das-cli 1.2.10__py3-none-any.whl → 1.2.12__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.
@@ -1,3 +1,4 @@
1
1
  # Constants for Entry Fields - Input Types
2
+ SELECT_COMBO_INPUT = 4
2
3
  DIGITAL_OBJECT_INPUT = 13
3
- SELECT_COMBO_INPUT = 4
4
+ GROUP_BOX_INPUT = 34
@@ -4,7 +4,7 @@ from das.managers.search_manager import SearchManager
4
4
  from das.services.attributes import AttributesService
5
5
  from das.services.entry_fields import EntryFieldsService
6
6
  from das.services.entries import EntriesService
7
- from das.common.entry_fields_constants import DIGITAL_OBJECT_INPUT, SELECT_COMBO_INPUT
7
+ from das.common.entry_fields_constants import DIGITAL_OBJECT_INPUT, SELECT_COMBO_INPUT, GROUP_BOX_INPUT
8
8
  from das.services.search import SearchService
9
9
  from das.services.users import UsersService
10
10
 
@@ -168,12 +168,15 @@ class EntryManager:
168
168
  field_name = field.get("displayName").lower()
169
169
  column_name = field.get("column").lower()
170
170
 
171
- if field_name in entry:
172
- new_entry[column_name] = self.__get_value(field, entry[field_name])
173
- elif column_name in entry:
174
- new_entry[column_name] = self.__get_value(field, entry[column_name])
171
+ if field.get('inputType') == GROUP_BOX_INPUT:
172
+ new_entry = self.__set_group_box_field_value(new_entry, field, entry)
175
173
  else:
176
- new_entry[column_name] = None
174
+ if field_name in entry:
175
+ new_entry[column_name] = self.__get_value(field, entry[field_name])
176
+ elif column_name in entry:
177
+ new_entry[column_name] = self.__get_value(field, entry[column_name])
178
+ else:
179
+ new_entry[column_name] = None
177
180
 
178
181
  return self.entry_service.create(attribute_id=attribute_id, entry=new_entry)
179
182
 
@@ -270,24 +273,49 @@ class EntryManager:
270
273
  updated_entry = existing_entry_response.get('entry', {})
271
274
 
272
275
  for field in fields:
276
+
273
277
  field_name = field.get("displayName").lower()
274
278
  column_name = field.get("column").lower()
275
279
 
276
- if field_name in entry:
277
- updated_entry[column_name] = self.__get_value(field, entry[field_name])
278
- elif column_name in entry:
279
- updated_entry[column_name] = self.__get_value(field, entry[column_name])
280
+ if field.get('inputType') == GROUP_BOX_INPUT:
281
+ # remove the column from the entry
282
+ updated_entry = self.__set_group_box_field_value(updated_entry, field, entry)
280
283
  else:
281
- updated_entry[column_name] = None
284
+ if field_name in entry:
285
+ updated_entry[column_name] = self.__get_value(field, entry[field_name])
286
+ elif column_name in entry:
287
+ updated_entry[column_name] = self.__get_value(field, entry[column_name])
288
+ else:
289
+ updated_entry[column_name] = None
282
290
 
283
291
  return self.entry_service.update(attribute_id=attribute_id, entry=updated_entry)
284
292
 
293
+ def __set_group_box_field_value(self, current_entry: dict, field, entry: dict) -> dict:
294
+ """Helper method to set group box field value."""
295
+ custom_data = field.get('customData', None)
296
+ if custom_data is not None:
297
+ custom_data = json.loads(custom_data)
298
+ if custom_data.get('fields') is not None:
299
+ for field in custom_data.get('fields'):
300
+ field_name = field.get("displayName").lower()
301
+ column_name = field.get("column").lower()
302
+ if field_name in entry:
303
+ current_entry[column_name] = self.__get_value(field, entry[field_name])
304
+ elif column_name in entry:
305
+ current_entry[column_name] = self.__get_value(field, entry[column_name])
306
+ else:
307
+ current_entry[column_name] = None
308
+
309
+ return current_entry
285
310
 
286
311
  def __get_value(self, field, source: str):
287
312
  """Helper method to get field value based on its type."""
288
313
  if field.get('inputType') == SELECT_COMBO_INPUT: # SELECT_COMBO_INPUT
289
314
  select_value = self.__get_select_combobox_field_value(field, source)
290
315
  return select_value
316
+ elif field.get('inputType') == GROUP_BOX_INPUT:
317
+ # group_box_value = self.__get_group_box_field_value(entry_raw, field)
318
+ return None
291
319
  else:
292
320
  return source
293
321
 
das/services/downloads.py CHANGED
@@ -1,101 +1,101 @@
1
- from das.common.api import post_data, get_data, get_binary_response
2
- from das.common.config import load_token
3
-
4
-
5
- class DownloadRequestService:
6
- def __init__(self, base_url):
7
- self.base_url = f"{base_url}/api/services/app/DownloadRequest"
8
- self.download_files_url = f"{base_url}/File/DownloadRequestSet"
9
-
10
- def create(self, request_data: list[dict]):
11
- """Create a new download request."""
12
- token = load_token()
13
-
14
- if (token is None or token == ""):
15
- raise ValueError("Authorization token is required")
16
-
17
- headers = {
18
- "Authorization": f"Bearer {token}",
19
- "Content-Type": "application/json"
20
- }
21
-
22
- url = f"{self.base_url}/Create"
23
-
24
- response = post_data(url, data=request_data, headers=headers)
25
-
26
- if response.get('success') == True:
27
- return response.get('result')
28
- else:
29
- raise ValueError(response.get('error'))
30
-
31
- def delete(self, request_id: str):
32
- """Delete a download request by ID."""
33
-
34
- #check if request_id is valid uuid
35
- if not isinstance(request_id, str) or len(request_id) != 36:
36
- raise ValueError("Invalid request ID")
37
-
38
- token = load_token()
39
-
40
- if (token is None or token == ""):
41
- raise ValueError("Authorization token is required")
42
-
43
- headers = {
44
- "Authorization": f"Bearer {token}",
45
- "Content-Type": "application/json"
46
- }
47
-
48
- url = f"{self.base_url}/Delete?downloadRequestId={request_id}"
49
-
50
- response = post_data(url, data={}, headers=headers)
51
-
52
- if response.get('success') == True:
53
- return response.get('result')
54
- else:
55
- raise ValueError(response.get('error'))
56
-
57
- def get_my_requests(self):
58
- """Get all download requests for the current user."""
59
- token = load_token()
60
-
61
- if (token is None or token == ""):
62
- raise ValueError("Authorization token is required")
63
-
64
- headers = {
65
- "Authorization": f"Bearer {token}"
66
- }
67
-
68
- url = f"{self.base_url}/GetMyRequests"
69
- response = get_data(url, headers=headers)
70
-
71
- # Expected API response shape:
72
- # { success: true, result: { totalCount: number, items: [...] }, ... }
73
- if isinstance(response, dict) and response.get('success') is True:
74
- return response.get('result')
75
- # Some backends might already return the result without 'success'
76
- if isinstance(response, dict) and 'result' in response and 'success' not in response:
77
- return response.get('result')
78
- # If the API directly returns the payload (result), pass it through
79
- if isinstance(response, dict) and 'items' in response and 'totalCount' in response:
80
- return response
81
- # Otherwise raise a meaningful error
82
- error_msg = None
83
- if isinstance(response, dict):
84
- error_msg = response.get('error') or response.get('message')
85
- raise ValueError(error_msg or 'Failed to fetch download requests')
86
-
87
- def download_files(self, request_id: str):
88
- """Return a streaming HTTP response for the download bundle of a request."""
89
- token = load_token()
90
-
91
- if (token is None or token == ""):
92
- raise ValueError("Authorization token is required")
93
-
94
- headers = {
95
- "Authorization": f"Bearer {token}"
96
- }
97
-
98
- url = f"{self.download_files_url}?requestId={request_id}"
99
-
100
- response = get_binary_response(url, headers=headers, params=None, stream=True)
1
+ from das.common.api import post_data, get_data, get_binary_response
2
+ from das.common.config import load_token
3
+
4
+
5
+ class DownloadRequestService:
6
+ def __init__(self, base_url):
7
+ self.base_url = f"{base_url}/api/services/app/DownloadRequest"
8
+ self.download_files_url = f"{base_url}/File/DownloadRequestSet"
9
+
10
+ def create(self, request_data: list[dict]):
11
+ """Create a new download request."""
12
+ token = load_token()
13
+
14
+ if (token is None or token == ""):
15
+ raise ValueError("Authorization token is required")
16
+
17
+ headers = {
18
+ "Authorization": f"Bearer {token}",
19
+ "Content-Type": "application/json"
20
+ }
21
+
22
+ url = f"{self.base_url}/Create"
23
+
24
+ response = post_data(url, data=request_data, headers=headers)
25
+
26
+ if response.get('success') == True:
27
+ return response.get('result')
28
+ else:
29
+ raise ValueError(response.get('error'))
30
+
31
+ def delete(self, request_id: str):
32
+ """Delete a download request by ID."""
33
+
34
+ #check if request_id is valid uuid
35
+ if not isinstance(request_id, str) or len(request_id) != 36:
36
+ raise ValueError("Invalid request ID")
37
+
38
+ token = load_token()
39
+
40
+ if (token is None or token == ""):
41
+ raise ValueError("Authorization token is required")
42
+
43
+ headers = {
44
+ "Authorization": f"Bearer {token}",
45
+ "Content-Type": "application/json"
46
+ }
47
+
48
+ url = f"{self.base_url}/Delete?downloadRequestId={request_id}"
49
+
50
+ response = post_data(url, data={}, headers=headers)
51
+
52
+ if response.get('success') == True:
53
+ return response.get('result')
54
+ else:
55
+ raise ValueError(response.get('error'))
56
+
57
+ def get_my_requests(self):
58
+ """Get all download requests for the current user."""
59
+ token = load_token()
60
+
61
+ if (token is None or token == ""):
62
+ raise ValueError("Authorization token is required")
63
+
64
+ headers = {
65
+ "Authorization": f"Bearer {token}"
66
+ }
67
+
68
+ url = f"{self.base_url}/GetMyRequests"
69
+ response = get_data(url, headers=headers)
70
+
71
+ # Expected API response shape:
72
+ # { success: true, result: { totalCount: number, items: [...] }, ... }
73
+ if isinstance(response, dict) and response.get('success') is True:
74
+ return response.get('result')
75
+ # Some backends might already return the result without 'success'
76
+ if isinstance(response, dict) and 'result' in response and 'success' not in response:
77
+ return response.get('result')
78
+ # If the API directly returns the payload (result), pass it through
79
+ if isinstance(response, dict) and 'items' in response and 'totalCount' in response:
80
+ return response
81
+ # Otherwise raise a meaningful error
82
+ error_msg = None
83
+ if isinstance(response, dict):
84
+ error_msg = response.get('error') or response.get('message')
85
+ raise ValueError(error_msg or 'Failed to fetch download requests')
86
+
87
+ def download_files(self, request_id: str):
88
+ """Return a streaming HTTP response for the download bundle of a request."""
89
+ token = load_token()
90
+
91
+ if (token is None or token == ""):
92
+ raise ValueError("Authorization token is required")
93
+
94
+ headers = {
95
+ "Authorization": f"Bearer {token}"
96
+ }
97
+
98
+ url = f"{self.download_files_url}?requestId={request_id}"
99
+
100
+ response = get_binary_response(url, headers=headers, params=None, stream=True)
101
101
  return response
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: das-cli
3
- Version: 1.2.10
3
+ Version: 1.2.12
4
4
  Summary: DAS api client.
5
5
  Author: Royal Netherlands Institute for Sea Research
6
6
  License-Expression: MIT
@@ -1,32 +1,32 @@
1
1
  das/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  das/app.py,sha256=kKxN4Vn84SA5Ph3zY13avMG2vrUp-ffpdDkhwYR9Bho,1475
3
- das/cli.py,sha256=hl5-QofwNwloXuCdGlCg2Nb7RffQqS2mccyN-hGbkro,50019
3
+ das/cli.py,sha256=lh6RGqxACR4OOS7wrkhfD2yXli-Z7dsrch1_HNF05LM,51264
4
4
  das/ai/plugins/dasai.py,sha256=1P-0q4ReAnmJxliGAPMxR1aij9RWKxyTIHJzWTwLZLo,2459
5
5
  das/ai/plugins/entries/entries_plugin.py,sha256=Dhv6PrguQj5mzxBW6DlCzkmwucszazLQfzwlp9EhIGk,608
6
6
  das/authentication/auth.py,sha256=DTtH66Ft6nuuMe7EYvrr3GqGVEGGxE7GmD2fO7vRv4s,1501
7
7
  das/authentication/secure_input.py,sha256=P-NpbFeHrp2uIOMqip55cGn_NqqpswhnknAF1t7c2_U,1911
8
8
  das/common/api.py,sha256=GNY1nF5B8JgFDAGifC2jR2ZTtKt4GLd7W20ARky4wcY,4501
9
9
  das/common/config.py,sha256=VQi_tJ7hvIa--gvx9VCBkfVI9p0ptOvifIu08tc8kEs,6127
10
- das/common/entry_fields_constants.py,sha256=5Yh4Ujt70HEF-FsnwVBPBm3DB3HHzQWSWR-9Upt7C5I,93
10
+ das/common/entry_fields_constants.py,sha256=719tx8ZINbmb-qrrRM-O9AKcyy-vrPiW8tKGqom_MqY,117
11
11
  das/common/enums.py,sha256=jS0frv6717duG_wZNockXMTZ-VfsGu_f8_-lgYGnrcY,1745
12
12
  das/common/file_utils.py,sha256=Mb1uV9OAHle4zPSQFrythsU_8fzYV5grjgc1p9cmeA4,7129
13
13
  das/managers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  das/managers/digital_objects_manager.py,sha256=v7VAYfKoDpmWJGVgpVoSyk6hqGMiQJeOX5rgm65xE5U,3677
15
15
  das/managers/download_manager.py,sha256=bZuRX5yoKC_n00Tbjn_aRHgHLeq6SjI0TqDqgjttOQU,5431
16
- das/managers/entries_manager.py,sha256=7mSbC26Z893cMTI-wA5anJThDlsX37eqxCQGK1e3eQo,21174
16
+ das/managers/entries_manager.py,sha256=VEu_lIN4YCsBr1QOnhzZ5I_DWs76oHebCBn9yFLNSkY,22754
17
17
  das/managers/search_manager.py,sha256=vXf0JmK5oW-xEGUdDnppfc1-6HdH1hfiZR7L2bCz9u0,4263
18
18
  das/services/attributes.py,sha256=78E9f1wNZYxG9Hg5HfX_h1CFmACaMjwD2Y6Ilb7PJGY,2616
19
19
  das/services/cache.py,sha256=g-vY51gqGV_1Vpza476PkMqGpuDNo1NbTwQWIIsvO0s,1932
20
20
  das/services/digital_objects.py,sha256=ww1KHVLNmm_ffzgqP4Jt4wCbHMVfhD2FJWahlSPFaes,4935
21
- das/services/downloads.py,sha256=gauyQUhu4TmClLbnBf1N9k86c0PWm8ZlMIvxoE5cOB8,3609
21
+ das/services/downloads.py,sha256=cn2eoiKEDRcINlzoLgw6mpN3VVLBBiccdFyuCO7TB2I,3709
22
22
  das/services/entries.py,sha256=Dzvzx4wOljfumjBBg4sboXmgDTQf3FNbTQp-sl9hAn0,5755
23
23
  das/services/entry_fields.py,sha256=x2wUDkKNduj9pf4s56hRo0UW-eBhipkU9gFMEjFw5DA,1290
24
24
  das/services/hangfire.py,sha256=hidmVP9yb4znzBaJJRyKawYx7oYaBv5OVL-t0BhvN_A,818
25
25
  das/services/search.py,sha256=3X_KPb9fs024FhxoTr4j-xY5ymm5rvvzlekxuh8tLdg,1374
26
26
  das/services/users.py,sha256=iNijO2UPIEtcpPy8Tkemdxxym9rYLCUyckQHIQj68W0,795
27
- das_cli-1.2.10.dist-info/licenses/LICENSE,sha256=4EDhysVgQWBlzo0rdUl_k89s-iVfgCcSa1gUx1TM1vA,1124
28
- das_cli-1.2.10.dist-info/METADATA,sha256=QNg5cdAqba61koZ5lWsE5k-_K1GqJRkVgWti2NLbXbw,26210
29
- das_cli-1.2.10.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
30
- das_cli-1.2.10.dist-info/entry_points.txt,sha256=ZrdMae7NcvogQhzM1zun8E8n_QwYq-LpZvoJCr2_I4g,36
31
- das_cli-1.2.10.dist-info/top_level.txt,sha256=OJsPEeJyJ2rJlpEn2DTPgbMSvYG-6FeD13_m5qLpw3E,4
32
- das_cli-1.2.10.dist-info/RECORD,,
27
+ das_cli-1.2.12.dist-info/licenses/LICENSE,sha256=4EDhysVgQWBlzo0rdUl_k89s-iVfgCcSa1gUx1TM1vA,1124
28
+ das_cli-1.2.12.dist-info/METADATA,sha256=ID1WVX6J2tyCuZXUyH1uGELD7nOO8j3mrFM1lAXORW0,26210
29
+ das_cli-1.2.12.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
30
+ das_cli-1.2.12.dist-info/entry_points.txt,sha256=ZrdMae7NcvogQhzM1zun8E8n_QwYq-LpZvoJCr2_I4g,36
31
+ das_cli-1.2.12.dist-info/top_level.txt,sha256=OJsPEeJyJ2rJlpEn2DTPgbMSvYG-6FeD13_m5qLpw3E,4
32
+ das_cli-1.2.12.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.10.1)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5