dataroom-client 1.0.1.post13.dev0__tar.gz → 1.0.1.post49.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dataroom-client
3
- Version: 1.0.1.post13.dev0
3
+ Version: 1.0.1.post49.dev0
4
4
  Summary: A python client to interface with the Dataroom backend API
5
5
  Author: Ales Kocjancic
6
6
  Author-email: hi@ales.io
@@ -38,5 +38,5 @@ For more examples see [client_example.ipynb](./notebooks/client_example.ipynb).
38
38
 
39
39
  # Developing
40
40
 
41
- Check out the `dataroom` repo and follow the instructions in the README.
41
+ Follow the instructions in the main [README](../README.md).
42
42
 
@@ -23,4 +23,4 @@ For more examples see [client_example.ipynb](./notebooks/client_example.ipynb).
23
23
 
24
24
  # Developing
25
25
 
26
- Check out the `dataroom` repo and follow the instructions in the README.
26
+ Follow the instructions in the main [README](../README.md).
@@ -87,6 +87,7 @@ class ImageUpdate(TypedDict, total=False):
87
87
  tags: Optional[List[str]]
88
88
  coca_embedding: Optional[str]
89
89
  related_images: Optional[dict[str, str]]
90
+ datasets: Optional[list[str]]
90
91
 
91
92
 
92
93
  class ImageCreate(TypedDict, total=False):
@@ -97,6 +98,7 @@ class ImageCreate(TypedDict, total=False):
97
98
  attributes: Optional[dict]
98
99
  tags: Optional[list[str]]
99
100
  related_images: Optional[dict[str, str]]
101
+ datasets: Optional[list[str]]
100
102
 
101
103
 
102
104
  def arg_deprecation_msg(arg_name, msg=''):
@@ -305,6 +307,11 @@ class DataRoomClient:
305
307
  date_updated__gte: datetime = None,
306
308
  date_updated__lt: datetime = None,
307
309
  date_updated__lte: datetime = None,
310
+ datasets: list = None,
311
+ datasets__ne: list = None,
312
+ datasets__all: list = None,
313
+ datasets__ne_all: list = None,
314
+ datasets__empty: bool = None,
308
315
  ):
309
316
  headers = {}
310
317
  if cache_ttl:
@@ -368,6 +375,11 @@ class DataRoomClient:
368
375
  "date_updated__gte": date_updated__gte.isoformat() if date_updated__gte else None,
369
376
  "date_updated__lt": date_updated__lt.isoformat() if date_updated__lt else None,
370
377
  "date_updated__lte": date_updated__lte.isoformat() if date_updated__lte else None,
378
+ "datasets": ",".join(datasets) if datasets else None,
379
+ "datasets__ne": ",".join(datasets__ne) if datasets__ne else None,
380
+ "datasets__all": ",".join(datasets__all) if datasets__all else None,
381
+ "datasets__ne_all": ",".join(datasets__ne_all) if datasets__ne_all else None,
382
+ "datasets__empty": datasets__empty,
371
383
  }
372
384
  ),
373
385
  headers=headers,
@@ -427,6 +439,11 @@ class DataRoomClient:
427
439
  date_updated__gte: datetime = None,
428
440
  date_updated__lt: datetime = None,
429
441
  date_updated__lte: datetime = None,
442
+ datasets: list = None,
443
+ datasets__ne: list = None,
444
+ datasets__all: list = None,
445
+ datasets__ne_all: list = None,
446
+ datasets__empty: bool = None,
430
447
  ):
431
448
  headers = {}
432
449
  if cache_ttl:
@@ -490,6 +507,11 @@ class DataRoomClient:
490
507
  "date_updated__gte": date_updated__gte.isoformat() if date_updated__gte else None,
491
508
  "date_updated__lt": date_updated__lt.isoformat() if date_updated__lt else None,
492
509
  "date_updated__lte": date_updated__lte.isoformat() if date_updated__lte else None,
510
+ "datasets": ",".join(datasets) if datasets else None,
511
+ "datasets__ne": ",".join(datasets__ne) if datasets__ne else None,
512
+ "datasets__all": ",".join(datasets__all) if datasets__all else None,
513
+ "datasets__ne_all": ",".join(datasets__ne_all) if datasets__ne_all else None,
514
+ "datasets__empty": datasets__empty,
493
515
  }
494
516
  ),
495
517
  headers=headers,
@@ -550,6 +572,11 @@ class DataRoomClient:
550
572
  date_updated__gte: datetime = None,
551
573
  date_updated__lt: datetime = None,
552
574
  date_updated__lte: datetime = None,
575
+ datasets: list = None,
576
+ datasets__ne: list = None,
577
+ datasets__all: list = None,
578
+ datasets__ne_all: list = None,
579
+ datasets__empty: bool = None,
553
580
  ):
554
581
  """
555
582
  Get a list of random images.
@@ -621,6 +648,11 @@ class DataRoomClient:
621
648
  "date_updated__gte": date_updated__gte.isoformat() if date_updated__gte else None,
622
649
  "date_updated__lt": date_updated__lt.isoformat() if date_updated__lt else None,
623
650
  "date_updated__lte": date_updated__lte.isoformat() if date_updated__lte else None,
651
+ "datasets": ",".join(datasets) if datasets else None,
652
+ "datasets__ne": ",".join(datasets__ne) if datasets__ne else None,
653
+ "datasets__all": ",".join(datasets__all) if datasets__all else None,
654
+ "datasets__ne_all": ",".join(datasets__ne_all) if datasets__ne_all else None,
655
+ "datasets__empty": datasets__empty,
624
656
  }
625
657
  ),
626
658
  headers=headers,
@@ -672,6 +704,11 @@ class DataRoomClient:
672
704
  date_updated__gte: datetime = None,
673
705
  date_updated__lt: datetime = None,
674
706
  date_updated__lte: datetime = None,
707
+ datasets: list = None,
708
+ datasets__ne: list = None,
709
+ datasets__all: list = None,
710
+ datasets__ne_all: list = None,
711
+ datasets__empty: bool = None,
675
712
  ):
676
713
 
677
714
  if source is not None:
@@ -725,6 +762,11 @@ class DataRoomClient:
725
762
  "date_updated__gte": date_updated__gte.isoformat() if date_updated__gte else None,
726
763
  "date_updated__lt": date_updated__lt.isoformat() if date_updated__lt else None,
727
764
  "date_updated__lte": date_updated__lte.isoformat() if date_updated__lte else None,
765
+ "datasets": ",".join(datasets) if datasets else None,
766
+ "datasets__ne": ",".join(datasets__ne) if datasets__ne else None,
767
+ "datasets__all": ",".join(datasets__all) if datasets__all else None,
768
+ "datasets__ne_all": ",".join(datasets__ne_all) if datasets__ne_all else None,
769
+ "datasets__empty": datasets__empty,
728
770
  }
729
771
  ),
730
772
  )
@@ -759,6 +801,7 @@ class DataRoomClient:
759
801
  attributes: dict = None,
760
802
  tags: list[str] = None,
761
803
  related_images: dict[str, str] | None = None,
804
+ datasets: list[str] = None,
762
805
  ):
763
806
  if not image_file and not image_url:
764
807
  raise DataRoomError('Please provide either an "image_file" or "image_url" field')
@@ -777,6 +820,7 @@ class DataRoomClient:
777
820
  "attributes": attributes,
778
821
  "tags": tags,
779
822
  "related_images": related_images,
823
+ "datasets": datasets,
780
824
  }
781
825
  )
782
826
 
@@ -836,6 +880,7 @@ class DataRoomClient:
836
880
  "attributes": image.get('attributes'),
837
881
  "tags": image.get('tags'),
838
882
  "related_images": image.get('related_images'),
883
+ "datasets": image.get('datasets'),
839
884
  })
840
885
  files.append((
841
886
  f"json_{i}",
@@ -853,9 +898,15 @@ class DataRoomClient:
853
898
  tags: list[str] = None,
854
899
  coca_embedding: str = None,
855
900
  related_images: dict[str, str] | None = None,
901
+ datasets: list[str] = None,
856
902
  ):
857
903
  """
858
- Update the image, overwriting the tags and merging attributes, latents and related_images.
904
+ Update the image:
905
+ * overwrite tags
906
+ * merge attributes
907
+ * merge latents
908
+ * merge related_images
909
+ * merge datasets
859
910
  """
860
911
 
861
912
  if coca_embedding:
@@ -895,6 +946,7 @@ class DataRoomClient:
895
946
  "tags": tags,
896
947
  "coca_embedding": coca_embedding,
897
948
  "related_images": related_images,
949
+ "datasets": datasets,
898
950
  })
899
951
  files.append((
900
952
  "json",
@@ -911,6 +963,7 @@ class DataRoomClient:
911
963
  "tags": tags,
912
964
  "coca_embedding": coca_embedding,
913
965
  "related_images": related_images,
966
+ "datasets": datasets,
914
967
  }),
915
968
  )
916
969
 
@@ -919,7 +972,12 @@ class DataRoomClient:
919
972
  images: List[ImageUpdate],
920
973
  ):
921
974
  """
922
- Bulk update images, overwriting the tags and merging attributes, latents and related_images.
975
+ Bulk update images:
976
+ * overwrite tags
977
+ * merge attributes
978
+ * merge latents
979
+ * merge related_images
980
+ * merge datasets
923
981
  """
924
982
  for image in images:
925
983
  if 'id' not in image:
@@ -929,6 +987,7 @@ class DataRoomClient:
929
987
  image.setdefault('tags', None)
930
988
  image.setdefault('coca_embedding', None)
931
989
  image.setdefault('related_images', None)
990
+ image.setdefault('datasets', None)
932
991
 
933
992
  return await self._make_request(
934
993
  url=f"images/bulk_update/",
@@ -941,6 +1000,7 @@ class DataRoomClient:
941
1000
  "tags": image['tags'],
942
1001
  "coca_embedding": image['coca_embedding'],
943
1002
  "related_images": image['related_images'],
1003
+ "datasets": image['datasets'],
944
1004
  })
945
1005
  for image in images
946
1006
  ],
@@ -1064,6 +1124,11 @@ class DataRoomClient:
1064
1124
  date_updated__gte: datetime = None,
1065
1125
  date_updated__lt: datetime = None,
1066
1126
  date_updated__lte: datetime = None,
1127
+ datasets: list = None,
1128
+ datasets__ne: list = None,
1129
+ datasets__all: list = None,
1130
+ datasets__ne_all: list = None,
1131
+ datasets__empty: bool = None,
1067
1132
  ):
1068
1133
  search_args = {
1069
1134
  'image_id': image_id, 'image_file': image_file, 'image_vector': image_vector, 'image_text': image_text,
@@ -1118,6 +1183,11 @@ class DataRoomClient:
1118
1183
  "date_updated__gte": date_updated__gte.isoformat() if date_updated__gte else None,
1119
1184
  "date_updated__lt": date_updated__lt.isoformat() if date_updated__lt else None,
1120
1185
  "date_updated__lte": date_updated__lte.isoformat() if date_updated__lte else None,
1186
+ "datasets": ",".join(datasets) if datasets else None,
1187
+ "datasets__ne": ",".join(datasets__ne) if datasets__ne else None,
1188
+ "datasets__all": ",".join(datasets__all) if datasets__all else None,
1189
+ "datasets__ne_all": ",".join(datasets__ne_all) if datasets__ne_all else None,
1190
+ "datasets__empty": datasets__empty,
1121
1191
  })
1122
1192
 
1123
1193
  if image_file:
@@ -1312,6 +1382,63 @@ class DataRoomClient:
1312
1382
  },
1313
1383
  )
1314
1384
 
1385
+ # -------------------- Dataset API methods --------------------
1386
+
1387
+ async def get_datasets(self, slug: str = None, limit: int = 1000):
1388
+ return await self._make_paginated_request(
1389
+ url=f"datasets/",
1390
+ params=self._dict_filter_none({
1391
+ "slug": slug,
1392
+ }),
1393
+ limit=limit,
1394
+ )
1395
+
1396
+ async def get_dataset(self, slug_version: str):
1397
+ return await self._make_request(
1398
+ url=f"datasets/{slug_version}/",
1399
+ )
1400
+
1401
+ async def create_dataset(self, name: str, slug: str, description: str = None):
1402
+ return await self._make_request(
1403
+ url=f"datasets/",
1404
+ method="POST",
1405
+ json={
1406
+ "name": name,
1407
+ "slug": slug,
1408
+ "description": description if description else "",
1409
+ },
1410
+ )
1411
+
1412
+ async def freeze_dataset(self, slug_version: str):
1413
+ return await self._make_request(
1414
+ url=f"datasets/{slug_version}/freeze/",
1415
+ method="POST",
1416
+ )
1417
+
1418
+ async def unfreeze_dataset(self, slug_version: str):
1419
+ return await self._make_request(
1420
+ url=f"datasets/{slug_version}/unfreeze/",
1421
+ method="POST",
1422
+ )
1423
+
1424
+ async def dataset_add_images(self, slug_version: str, image_ids: List[str]):
1425
+ return await self._make_request(
1426
+ url=f"datasets/{slug_version}/images/",
1427
+ method="POST",
1428
+ json={
1429
+ "image_ids": image_ids,
1430
+ },
1431
+ )
1432
+
1433
+ async def dataset_remove_images(self, slug_version: str, image_ids: List[str]):
1434
+ return await self._make_request(
1435
+ url=f"datasets/{slug_version}/images/",
1436
+ method="DELETE",
1437
+ json={
1438
+ "image_ids": image_ids,
1439
+ },
1440
+ )
1441
+
1315
1442
 
1316
1443
  class DataRoomClientSync:
1317
1444
  """
@@ -1392,6 +1519,9 @@ class DataRoomClientSync:
1392
1519
  def get_image_similarity(self, *args, **kwargs):
1393
1520
  return self._run_sync(self._async_client.get_image_similarity(*args, **kwargs))
1394
1521
 
1522
+ def get_related_images(self, *args, **kwargs):
1523
+ return self._run_sync(self._async_client.get_related_images(*args, **kwargs))
1524
+
1395
1525
  def get_similar_images(self, *args, **kwargs):
1396
1526
  return self._run_sync(self._async_client.get_similar_images(*args, **kwargs))
1397
1527
 
@@ -1436,6 +1566,29 @@ class DataRoomClientSync:
1436
1566
  def tag_images(self, *args, **kwargs):
1437
1567
  return self._run_sync(self._async_client.tag_images(*args, **kwargs))
1438
1568
 
1569
+ # -------------------- Dataset API methods --------------------
1570
+
1571
+ def get_datasets(self, *args, **kwargs):
1572
+ return self._run_sync(self._async_client.get_datasets(*args, **kwargs))
1573
+
1574
+ def get_dataset(self, *args, **kwargs):
1575
+ return self._run_sync(self._async_client.get_dataset(*args, **kwargs))
1576
+
1577
+ def create_dataset(self, *args, **kwargs):
1578
+ return self._run_sync(self._async_client.create_dataset(*args, **kwargs))
1579
+
1580
+ def freeze_dataset(self, *args, **kwargs):
1581
+ return self._run_sync(self._async_client.freeze_dataset(*args, **kwargs))
1582
+
1583
+ def unfreeze_dataset(self, *args, **kwargs):
1584
+ return self._run_sync(self._async_client.unfreeze_dataset(*args, **kwargs))
1585
+
1586
+ def dataset_add_images(self, *args, **kwargs):
1587
+ return self._run_sync(self._async_client.dataset_add_images(*args, **kwargs))
1588
+
1589
+ def dataset_remove_images(self, *args, **kwargs):
1590
+ return self._run_sync(self._async_client.dataset_remove_images(*args, **kwargs))
1591
+
1439
1592
 
1440
1593
  for method_name in dir(DataRoomClient):
1441
1594
  if not method_name.startswith("_"):
@@ -6,7 +6,7 @@ authors = [
6
6
  ]
7
7
  readme = "README.md"
8
8
  dynamic = []
9
- version = "1.0.1.post13.dev0"
9
+ version = "1.0.1.post49.dev0"
10
10
 
11
11
  [tool.poetry]
12
12