das-cli 1.2.22__tar.gz → 1.2.24__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.
- {das_cli-1.2.22/das_cli.egg-info → das_cli-1.2.24}/PKG-INFO +1 -1
- {das_cli-1.2.22 → das_cli-1.2.24}/das/managers/entries_manager.py +72 -29
- {das_cli-1.2.22 → das_cli-1.2.24/das_cli.egg-info}/PKG-INFO +1 -1
- {das_cli-1.2.22 → das_cli-1.2.24}/pyproject.toml +1 -1
- {das_cli-1.2.22 → das_cli-1.2.24}/LICENSE +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/MANIFEST.in +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/README.md +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/__init__.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/ai/plugins/dasai.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/ai/plugins/entries/entries_plugin.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/app.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/authentication/auth.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/authentication/secure_input.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/cli.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/common/api.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/common/config.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/common/entry_fields_constants.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/common/enums.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/common/file_utils.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/managers/__init__.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/managers/digital_objects_manager.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/managers/download_manager.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/managers/search_manager.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/services/attributes.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/services/cache.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/services/digital_objects.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/services/downloads.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/services/entries.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/services/entry_fields.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/services/hangfire.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/services/search.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das/services/users.py +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das_cli.egg-info/SOURCES.txt +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das_cli.egg-info/dependency_links.txt +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das_cli.egg-info/entry_points.txt +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das_cli.egg-info/requires.txt +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/das_cli.egg-info/top_level.txt +0 -0
- {das_cli-1.2.22 → das_cli-1.2.24}/setup.cfg +0 -0
|
@@ -350,59 +350,102 @@ class EntryManager:
|
|
|
350
350
|
else:
|
|
351
351
|
return source
|
|
352
352
|
|
|
353
|
-
def __get_select_combobox_field_value(self, field, source: str) -> str:
|
|
353
|
+
def __get_select_combobox_field_value(self, field, source: str | list | dict) -> str | list | dict:
|
|
354
354
|
"""Helper method to get select combobox field value."""
|
|
355
355
|
|
|
356
356
|
if not source:
|
|
357
357
|
return None
|
|
358
358
|
|
|
359
|
+
# if is a dict return source as is
|
|
360
|
+
if isinstance(source, dict):
|
|
361
|
+
return source
|
|
362
|
+
elif isinstance(source, list):
|
|
363
|
+
return source
|
|
364
|
+
|
|
359
365
|
attribute_id = -1
|
|
360
366
|
|
|
367
|
+
# convert all keys to lowercase
|
|
368
|
+
field = {str(k).lower(): v for k, v in field.items()}
|
|
369
|
+
|
|
361
370
|
if field.get('column').isdigit():
|
|
362
371
|
attribute_id = int(field.get('column'))
|
|
363
372
|
elif field.get('column')[0].isalpha() and field.get('column')[1:].isdigit():
|
|
364
373
|
attribute_id = int(field.get('column')[1:])
|
|
365
374
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
375
|
+
customdata = None
|
|
376
|
+
is_multiselect = False
|
|
377
|
+
|
|
378
|
+
if not field.get('customdata', None) is None and field.get('customdata') != "":
|
|
379
|
+
try:
|
|
380
|
+
customdata_string = field.get('customdata').lower()
|
|
381
|
+
customdata = json.loads(customdata_string)
|
|
382
|
+
if (customdata is not None and isinstance(customdata, dict) and "datasource" in customdata):
|
|
383
|
+
datasource = customdata.get("datasource")
|
|
384
|
+
if datasource is not None and isinstance(datasource, dict):
|
|
385
|
+
if "attributeid" in datasource:
|
|
374
386
|
attribute_id = datasource.get("attributeid")
|
|
375
|
-
|
|
376
|
-
|
|
387
|
+
if "ismultiselect" in datasource:
|
|
388
|
+
is_multiselect = datasource.get("ismultiselect")
|
|
389
|
+
except json.JSONDecodeError:
|
|
390
|
+
raise ValueError(f"Invalid customdata JSON: {field.get('customdata')}")
|
|
391
|
+
|
|
392
|
+
expected_max_result_count = 1
|
|
393
|
+
if is_multiselect:
|
|
394
|
+
expected_max_result_count = len(source.split(','))
|
|
377
395
|
|
|
378
396
|
search_params = {
|
|
379
397
|
"attributeId": attribute_id,
|
|
380
|
-
"queryString":
|
|
381
|
-
"maxResultCount":
|
|
398
|
+
"queryString": self.__get_query_string(source, is_multiselect),
|
|
399
|
+
"maxResultCount": expected_max_result_count,
|
|
382
400
|
"skipCount": 0
|
|
383
401
|
}
|
|
384
|
-
|
|
385
|
-
# checks if source is GUID, if so, than we search by id
|
|
386
|
-
if self.is_guid(source):
|
|
387
|
-
search_params['queryString'] = f"id({source});"
|
|
388
402
|
|
|
389
403
|
search_response = self.search_service.search_entries(**search_params)
|
|
390
404
|
|
|
391
405
|
if search_response.get('totalCount', 0) == 0:
|
|
392
406
|
raise ValueError(f"No results found for {field.get('displayName')}: {source}. Attribute ID: {attribute_id}")
|
|
393
|
-
|
|
407
|
+
result_list = []
|
|
394
408
|
if search_response and 'items' in search_response and len(search_response['items']) > 0:
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
409
|
+
for item in search_response['items']:
|
|
410
|
+
result = {}
|
|
411
|
+
result['id'] = item.get('entry', {}).get('id')
|
|
412
|
+
result['name'] = item.get('entry', {}).get('displayname')
|
|
413
|
+
result['code'] = item.get('entry', {}).get('code')
|
|
414
|
+
result['alias'] = item.get('entry', {}).get('alias', None)
|
|
415
|
+
result['attributeid'] = attribute_id
|
|
416
|
+
result = {k: v for k, v in result.items() if v is not None}
|
|
417
|
+
result_list.append(result)
|
|
418
|
+
return json.dumps(result_list)
|
|
419
|
+
else:
|
|
420
|
+
return source
|
|
421
|
+
|
|
422
|
+
def __get_query_string(self, source: str, is_multiselect: bool) -> str:
|
|
423
|
+
|
|
424
|
+
if not source:
|
|
425
|
+
return None
|
|
426
|
+
|
|
427
|
+
if not is_multiselect:
|
|
428
|
+
if self.is_guid(source):
|
|
429
|
+
return f"id({source});"
|
|
430
|
+
else:
|
|
431
|
+
return f"displayname({source}) or code({source});"
|
|
432
|
+
else:
|
|
433
|
+
values = source.split(',')
|
|
434
|
+
query_strings = []
|
|
435
|
+
for value in values:
|
|
436
|
+
if self.is_guid(value):
|
|
437
|
+
query_string = f"id({value}) "
|
|
438
|
+
else:
|
|
439
|
+
query_string = f"displayname({value}) or code({value}) "
|
|
440
|
+
query_strings.append(query_string)
|
|
441
|
+
return f"{' or '.join(query_strings)}"
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
|
|
406
449
|
|
|
407
450
|
def is_guid(self, source: str) -> bool:
|
|
408
451
|
"""Helper method to check if a string is a GUID."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|