supervisely 6.73.337__py3-none-any.whl → 6.73.339__py3-none-any.whl

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.
@@ -11,7 +11,7 @@ from supervisely.app.singleton import Singleton
11
11
  from supervisely.app.widgets_context import JinjaWidgets
12
12
 
13
13
  # https://github.com/supervisely/js-bundle
14
- js_bundle_version = "2.1.98"
14
+ js_bundle_version = "2.1.99"
15
15
 
16
16
  # https://github.com/supervisely-ecosystem/supervisely-app-frontend-js
17
17
  js_frontend_version = "v0.0.55"
@@ -93,6 +93,7 @@ class Select(ConditionalWidget):
93
93
  widget_id: str = None,
94
94
  items_links: List[str] = None,
95
95
  width_percent: Optional[int] = None,
96
+ width_px: Optional[int] = None,
96
97
  ) -> Select:
97
98
  if items is None and groups is None:
98
99
  raise ValueError("One of the arguments has to be defined: items or groups")
@@ -113,6 +114,7 @@ class Select(ConditionalWidget):
113
114
  self._width_percent = min(max(width_percent, 1), 100)
114
115
  else:
115
116
  self._width_percent = None
117
+ self._width_px = width_px
116
118
 
117
119
  if items_links is not None:
118
120
  if items is None:
@@ -140,6 +142,7 @@ class Select(ConditionalWidget):
140
142
  "groups": None,
141
143
  "with_link": self._with_link,
142
144
  "width_percent": self._width_percent,
145
+ "width_px": self._width_px,
143
146
  }
144
147
  if self._items is not None:
145
148
  res["items"] = [item.to_json() for item in self._items]
@@ -10,7 +10,9 @@
10
10
  :multiple="data.{{{widget.widget_id}}}.multiple"
11
11
  :filterable="data.{{{widget.widget_id}}}.filterable"
12
12
  :fit-input-width="data.{{{widget.widget_id}}}.fit_input_width"
13
- {% if widget._width_percent is not none %}
13
+ {% if widget._width_px is not none %}
14
+ :style="{ width: `${data.{{{widget.widget_id}}}.width_px}px` }"
15
+ {% elif widget._width_percent is not none %}
14
16
  :style="{ width: `${data.{{{widget.widget_id}}}.width_percent}%` }"
15
17
  {% endif %}
16
18
  >
@@ -96,8 +96,9 @@ class SelectDatasetTree(Widget):
96
96
  append_to_body: bool = True,
97
97
  widget_id: Union[str, None] = None,
98
98
  show_select_all_datasets_checkbox: bool = True,
99
+ width: int = 193,
99
100
  ):
100
- self._api = Api()
101
+ self._api = Api.from_env()
101
102
 
102
103
  if default_id is not None and project_id is None:
103
104
  raise ValueError("Project ID must be provided when default dataset ID is set.")
@@ -136,6 +137,7 @@ class SelectDatasetTree(Widget):
136
137
  self._select_workspace = None
137
138
  self._select_project = None
138
139
  self._select_dataset = None
140
+ self._width = width
139
141
 
140
142
  # List of widgets will be used to create a Container.
141
143
  self._widgets = []
@@ -361,7 +363,7 @@ class SelectDatasetTree(Widget):
361
363
  flat=flat,
362
364
  always_open=always_open,
363
365
  append_to_body=self._append_to_body,
364
- width=193,
366
+ width=self._width,
365
367
  placeholder="Select dataset",
366
368
  )
367
369
  if self._dataset_id is not None:
@@ -416,7 +418,10 @@ class SelectDatasetTree(Widget):
416
418
  self._select_dataset.hide()
417
419
 
418
420
  self._select_team = Select(
419
- items=self._get_select_items(), placeholder="Select team", filterable=True
421
+ items=self._get_select_items(),
422
+ placeholder="Select team",
423
+ filterable=True,
424
+ width_px=self._width,
420
425
  )
421
426
  self._select_team.set_value(self._team_id)
422
427
  if not team_is_selectable:
@@ -426,6 +431,7 @@ class SelectDatasetTree(Widget):
426
431
  items=self._get_select_items(team_id=self._team_id),
427
432
  placeholder="Select workspace",
428
433
  filterable=True,
434
+ width_px=self._width,
429
435
  )
430
436
  self._select_workspace.set_value(self._workspace_id)
431
437
  if not workspace_is_selectable:
@@ -435,6 +441,7 @@ class SelectDatasetTree(Widget):
435
441
  items=self._get_select_items(workspace_id=self._workspace_id),
436
442
  placeholder="Select project",
437
443
  filterable=True,
444
+ width_px=self._width,
438
445
  )
439
446
  self._select_project.set_value(self._project_id)
440
447
 
@@ -131,6 +131,7 @@ class TreeSelect(Widget):
131
131
  append_to_body: bool = True,
132
132
  widget_id: Optional[str] = None,
133
133
  placeholder: Optional[str] = None,
134
+ show_tooltip: bool = True,
134
135
  ):
135
136
  self._items = items or []
136
137
  self._multiple = multiple_select
@@ -141,6 +142,7 @@ class TreeSelect(Widget):
141
142
  self._width = width
142
143
  self._append_to_body = append_to_body
143
144
  self._placeholder = placeholder
145
+ self._show_tooltip = show_tooltip
144
146
 
145
147
  super().__init__(widget_id=widget_id, file_path=__file__)
146
148
 
@@ -170,6 +172,7 @@ class TreeSelect(Widget):
170
172
  "valueFormat": self._value_format,
171
173
  "appendToBody": self._append_to_body,
172
174
  "placeholder": self._placeholder,
175
+ "showTooltip": self._show_tooltip,
173
176
  },
174
177
  }
175
178
 
@@ -69,6 +69,8 @@ class VideoDataset(Dataset):
69
69
  annotation_class = VideoAnnotation
70
70
  item_info_class = VideoInfo
71
71
 
72
+ datasets_dir_name = "datasets"
73
+
72
74
  @property
73
75
  def project_dir(self) -> str:
74
76
  """
@@ -1308,24 +1310,19 @@ def download_video_project(
1308
1310
  LOG_BATCH_SIZE = 1
1309
1311
 
1310
1312
  key_id_map = KeyIdMap()
1311
-
1312
1313
  project_fs = VideoProject(dest_dir, OpenMode.CREATE)
1313
-
1314
1314
  meta = ProjectMeta.from_json(api.project.get_meta(project_id))
1315
1315
  project_fs.set_meta(meta)
1316
-
1317
1316
  if progress_cb is not None:
1318
1317
  log_progress = False
1319
1318
 
1320
- datasets = []
1321
- if dataset_ids is not None:
1322
- for ds_id in dataset_ids:
1323
- datasets.append(api.dataset.get_info_by_id(ds_id))
1324
- else:
1325
- datasets = api.dataset.get_list(project_id)
1319
+ dataset_ids = set(dataset_ids) if (dataset_ids is not None) else None
1320
+ for parents, dataset in api.dataset.tree(project_id):
1321
+ if dataset_ids is not None and dataset.id not in dataset_ids:
1322
+ continue
1326
1323
 
1327
- for dataset in datasets:
1328
- dataset_fs = project_fs.create_dataset(dataset.name)
1324
+ dataset_path = Dataset._get_dataset_path(dataset.name, parents)
1325
+ dataset_fs = project_fs.create_dataset(dataset.name, dataset_path)
1329
1326
  videos = api.video.get_list(dataset.id)
1330
1327
 
1331
1328
  ds_progress = progress_cb
@@ -1463,9 +1460,17 @@ def upload_video_project(
1463
1460
  if progress_cb is not None:
1464
1461
  log_progress = False
1465
1462
 
1463
+ dataset_map = {}
1466
1464
  for dataset_fs in project_fs.datasets:
1467
1465
  dataset_fs: VideoDataset
1468
- dataset = api.dataset.create(project.id, dataset_fs.name)
1466
+ if len(dataset_fs.parents) > 0:
1467
+ parent = f"{os.path.sep}".join(dataset_fs.parents)
1468
+ parent_id = dataset_map.get(parent)
1469
+ else:
1470
+ parent = ""
1471
+ parent_id = None
1472
+ dataset = api.dataset.create(project.id, dataset_fs.short_name, parent_id=parent_id)
1473
+ dataset_map[os.path.join(parent, dataset.name)] = dataset.id
1469
1474
 
1470
1475
  names, item_paths, ann_paths = [], [], []
1471
1476
  for item_name in dataset_fs:
@@ -1603,15 +1608,14 @@ async def download_video_project_async(
1603
1608
  if progress_cb is not None:
1604
1609
  log_progress = False
1605
1610
 
1606
- datasets = []
1607
- if dataset_ids is not None:
1608
- for ds_id in dataset_ids:
1609
- datasets.append(api.dataset.get_info_by_id(ds_id))
1610
- else:
1611
- datasets = api.dataset.get_list(project_id, recursive=True)
1611
+ dataset_ids = set(dataset_ids) if (dataset_ids is not None) else None
1612
+ for parents, dataset in api.dataset.tree(project_id):
1613
+ if dataset_ids is not None and dataset.id not in dataset_ids:
1614
+ continue
1615
+
1616
+ dataset_path = Dataset._get_dataset_path(dataset.name, parents)
1612
1617
 
1613
- for dataset in datasets:
1614
- dataset_fs = project_fs.create_dataset(dataset.name)
1618
+ dataset_fs = project_fs.create_dataset(dataset.name, dataset_path)
1615
1619
  videos = api.video.get_list(dataset.id)
1616
1620
 
1617
1621
  if log_progress is True:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.337
3
+ Version: 6.73.339
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -94,7 +94,7 @@ supervisely/app/fastapi/no_html_main.html,sha256=NhQP7noyORBx72lFh1CQKgBRupkWjiq
94
94
  supervisely/app/fastapi/offline.py,sha256=CwMMkJ1frD6wiZS-SEoNDtQ1UJcJe1Ob6ohE3r4CQL8,7414
95
95
  supervisely/app/fastapi/request.py,sha256=NU7rKmxJ1pfkDZ7_yHckRcRAueJRQIqCor11UO2OHr8,766
96
96
  supervisely/app/fastapi/subapp.py,sha256=5lMfFLYBfHzE1OmITHsogB9hScyTJFjGV45AKY67Hkg,45647
97
- supervisely/app/fastapi/templating.py,sha256=JOAW8U-14GD47E286mzFi3mZSPbm_csJGqtXWLRM4rc,2929
97
+ supervisely/app/fastapi/templating.py,sha256=3X69vo-_RO2tlaVz5obifXjrNEIHVSNVQFNm_xjOMe4,2929
98
98
  supervisely/app/fastapi/utils.py,sha256=t_UquzlFrdkKtAJmH6eJ279pE8Aa3BaIu4XjX-SEaIE,946
99
99
  supervisely/app/fastapi/websocket.py,sha256=TlRSPOAhRItTv1HGvdukK1ZvhRjMUxRa-lJlsRR9rJw,1308
100
100
  supervisely/app/v1/__init__.py,sha256=OdU0PYv6hLwahYoyaLFO8m3cbJSchvPbqxuG1N3T734,848
@@ -428,8 +428,8 @@ supervisely/app/widgets/run_app_button/template.html,sha256=-SX7zZ53ehyfQMg_az3B
428
428
  supervisely/app/widgets/scatter_chart/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
429
429
  supervisely/app/widgets/scatter_chart/scatter_chart.py,sha256=nX7fZbWsDiMjOek5FvIHgKbnBwQ-ol_V3XvnoAnz59c,4832
430
430
  supervisely/app/widgets/select/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
431
- supervisely/app/widgets/select/select.py,sha256=pYxUYl0-yuMnGQ9wjxkbDKWRMVi-egXw29YJZHTvKrI,11253
432
- supervisely/app/widgets/select/template.html,sha256=S7Bx4TSc6Ua4BL1duY_pfVX9MDBmAJkKnCNzPf-jt2A,1933
431
+ supervisely/app/widgets/select/select.py,sha256=1aB7Oi1mtyBySvBc78McZy4NnNNxGXGwMkCeYpOsLew,11367
432
+ supervisely/app/widgets/select/template.html,sha256=s5ZpmWkYf3JOVyBEgWPAIMbQzTK6txL9E-k5-HNFj3s,2041
433
433
  supervisely/app/widgets/select_app_session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
434
434
  supervisely/app/widgets/select_app_session/select_app_session.py,sha256=l8Nam2bG8g9re29ra28i5PmmW9LKhkOGAG48dgHFr9M,2038
435
435
  supervisely/app/widgets/select_app_session/template.html,sha256=PGr5YL7Ts3ALO9ZQkuYNnRhP7eyYq54sf7Y9EhDbuvE,959
@@ -440,7 +440,7 @@ supervisely/app/widgets/select_dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JC
440
440
  supervisely/app/widgets/select_dataset/select_dataset.py,sha256=2bltbJ70plGFoF8mpLxAU2huVBce8D6CsCcX9wxO5KU,9713
441
441
  supervisely/app/widgets/select_dataset/template.html,sha256=7O_ZgmRs0vOL8tng6QvYbI_0o6A4yMAPB2MlfzWHeHQ,984
442
442
  supervisely/app/widgets/select_dataset_tree/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
443
- supervisely/app/widgets/select_dataset_tree/select_dataset_tree.py,sha256=abFPT8MJv6a7oPZzwCvak6q4HB72ijpW7axJHjoJvH0,22319
443
+ supervisely/app/widgets/select_dataset_tree/select_dataset_tree.py,sha256=ngSp4-R7rLsExYOY3VY7yhhC_yeeO_BkAxN95savSPc,22517
444
444
  supervisely/app/widgets/select_dataset_tree/template.html,sha256=_uvKCMP0nkpSl3FiTUxqy10JZw3q8-9hXCv22W3BDF0,38
445
445
  supervisely/app/widgets/select_item/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
446
446
  supervisely/app/widgets/select_item/select_item.py,sha256=dcB0UN46rn3nFQybgrGpLRfwB6xnPo-GGrv9rsMeCbA,3833
@@ -530,7 +530,7 @@ supervisely/app/widgets/transfer/template.html,sha256=w9T5TrityCeHUBPPyzRBBSm48z
530
530
  supervisely/app/widgets/transfer/transfer.py,sha256=tZ6HhRH11xOrEhz3TAH0Redw3NE2GFSDHuHCmKBSY_s,19986
531
531
  supervisely/app/widgets/tree_select/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
532
532
  supervisely/app/widgets/tree_select/template.html,sha256=eUHN0yn_llRRozAOvdc8SjhY-KX12TcgOUXCemHWGew,613
533
- supervisely/app/widgets/tree_select/tree_select.py,sha256=qy5JBVQ812FcyXIDPwCjt7C9N9H9gSzXwlkvO8mKqrQ,14371
533
+ supervisely/app/widgets/tree_select/tree_select.py,sha256=A86TCS_gXHi6UvHmsvZUyijnKgTvQ6UGnrHPJ19U_IY,14499
534
534
  supervisely/app/widgets/treemap_chart/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
535
535
  supervisely/app/widgets/treemap_chart/treemap_chart.py,sha256=g6wc1M30kNFA92Xj-6g2bJlnnV23ro17pJn0s4WDgvs,9298
536
536
  supervisely/app/widgets/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1026,7 +1026,7 @@ supervisely/project/project_settings.py,sha256=NLThzU_DCynOK6hkHhVdFyezwprn9Uqln
1026
1026
  supervisely/project/project_type.py,sha256=EZDJFRi4MmC_5epYexBgML5WMZsWdEVk_CjqDQy5m3c,572
1027
1027
  supervisely/project/readme_template.md,sha256=rGmSLRVUSGjvorjpzl0sZ7YA4sKfDexl95NFtMISj3I,9128
1028
1028
  supervisely/project/upload.py,sha256=AjgHYgVZwUE25ygC5pqvFjdAladbyB8T78mlet5Qpho,3750
1029
- supervisely/project/video_project.py,sha256=STlkzLeRhpcg0kXLankWvX4DmkGTo4YlEgACAYSIeio,63580
1029
+ supervisely/project/video_project.py,sha256=bkQI3JTimQR-83iWAThjoz7bTcbCIqvvk039AG3BPXc,64081
1030
1030
  supervisely/project/volume_project.py,sha256=Kn9VEvWuKKZvL2nx6B6bjSvHuoZhAOxEc6DvPRexUco,22666
1031
1031
  supervisely/pyscripts_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1032
1032
  supervisely/pyscripts_utils/utils.py,sha256=scEwHJvHRQa8NHIOn2eTwH6-Zc8CGdLoxM-WzH9jcRo,314
@@ -1082,9 +1082,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
1082
1082
  supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
1083
1083
  supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
1084
1084
  supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
1085
- supervisely-6.73.337.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1086
- supervisely-6.73.337.dist-info/METADATA,sha256=jScEliXar4ZvwI1uw3RQwMuYWDQiojDu2__YBWsvfDg,33596
1087
- supervisely-6.73.337.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1088
- supervisely-6.73.337.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1089
- supervisely-6.73.337.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1090
- supervisely-6.73.337.dist-info/RECORD,,
1085
+ supervisely-6.73.339.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1086
+ supervisely-6.73.339.dist-info/METADATA,sha256=jUY-G7GqpZ9Qe4qSdlGrj8lMGoV8P386z114kCWh7gk,33596
1087
+ supervisely-6.73.339.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1088
+ supervisely-6.73.339.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1089
+ supervisely-6.73.339.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1090
+ supervisely-6.73.339.dist-info/RECORD,,