das-cli 1.2.26__tar.gz → 1.2.28__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.
Files changed (38) hide show
  1. {das_cli-1.2.26/das_cli.egg-info → das_cli-1.2.28}/PKG-INFO +1 -1
  2. {das_cli-1.2.26 → das_cli-1.2.28}/das/common/api.py +4 -4
  3. {das_cli-1.2.26 → das_cli-1.2.28}/das/managers/search_manager.py +19 -1
  4. {das_cli-1.2.26 → das_cli-1.2.28}/das/services/entries.py +16 -8
  5. {das_cli-1.2.26 → das_cli-1.2.28/das_cli.egg-info}/PKG-INFO +1 -1
  6. {das_cli-1.2.26 → das_cli-1.2.28}/pyproject.toml +1 -1
  7. {das_cli-1.2.26 → das_cli-1.2.28}/LICENSE +0 -0
  8. {das_cli-1.2.26 → das_cli-1.2.28}/MANIFEST.in +0 -0
  9. {das_cli-1.2.26 → das_cli-1.2.28}/README.md +0 -0
  10. {das_cli-1.2.26 → das_cli-1.2.28}/das/__init__.py +0 -0
  11. {das_cli-1.2.26 → das_cli-1.2.28}/das/ai/plugins/dasai.py +0 -0
  12. {das_cli-1.2.26 → das_cli-1.2.28}/das/ai/plugins/entries/entries_plugin.py +0 -0
  13. {das_cli-1.2.26 → das_cli-1.2.28}/das/app.py +0 -0
  14. {das_cli-1.2.26 → das_cli-1.2.28}/das/authentication/auth.py +0 -0
  15. {das_cli-1.2.26 → das_cli-1.2.28}/das/authentication/secure_input.py +0 -0
  16. {das_cli-1.2.26 → das_cli-1.2.28}/das/cli.py +0 -0
  17. {das_cli-1.2.26 → das_cli-1.2.28}/das/common/config.py +0 -0
  18. {das_cli-1.2.26 → das_cli-1.2.28}/das/common/entry_fields_constants.py +0 -0
  19. {das_cli-1.2.26 → das_cli-1.2.28}/das/common/enums.py +0 -0
  20. {das_cli-1.2.26 → das_cli-1.2.28}/das/common/file_utils.py +0 -0
  21. {das_cli-1.2.26 → das_cli-1.2.28}/das/managers/__init__.py +0 -0
  22. {das_cli-1.2.26 → das_cli-1.2.28}/das/managers/digital_objects_manager.py +0 -0
  23. {das_cli-1.2.26 → das_cli-1.2.28}/das/managers/download_manager.py +0 -0
  24. {das_cli-1.2.26 → das_cli-1.2.28}/das/managers/entries_manager.py +0 -0
  25. {das_cli-1.2.26 → das_cli-1.2.28}/das/services/attributes.py +0 -0
  26. {das_cli-1.2.26 → das_cli-1.2.28}/das/services/cache.py +0 -0
  27. {das_cli-1.2.26 → das_cli-1.2.28}/das/services/digital_objects.py +0 -0
  28. {das_cli-1.2.26 → das_cli-1.2.28}/das/services/downloads.py +0 -0
  29. {das_cli-1.2.26 → das_cli-1.2.28}/das/services/entry_fields.py +0 -0
  30. {das_cli-1.2.26 → das_cli-1.2.28}/das/services/hangfire.py +0 -0
  31. {das_cli-1.2.26 → das_cli-1.2.28}/das/services/search.py +0 -0
  32. {das_cli-1.2.26 → das_cli-1.2.28}/das/services/users.py +0 -0
  33. {das_cli-1.2.26 → das_cli-1.2.28}/das_cli.egg-info/SOURCES.txt +0 -0
  34. {das_cli-1.2.26 → das_cli-1.2.28}/das_cli.egg-info/dependency_links.txt +0 -0
  35. {das_cli-1.2.26 → das_cli-1.2.28}/das_cli.egg-info/entry_points.txt +0 -0
  36. {das_cli-1.2.26 → das_cli-1.2.28}/das_cli.egg-info/requires.txt +0 -0
  37. {das_cli-1.2.26 → das_cli-1.2.28}/das_cli.egg-info/top_level.txt +0 -0
  38. {das_cli-1.2.26 → das_cli-1.2.28}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: das-cli
3
- Version: 1.2.26
3
+ Version: 1.2.28
4
4
  Summary: DAS api client.
5
5
  Author: Royal Netherlands Institute for Sea Research
6
6
  License-Expression: MIT
@@ -17,10 +17,10 @@ def get_data(url, headers=None, params=None):
17
17
  """
18
18
  try:
19
19
  response = requests.get(url, headers=headers, params=params, verify=load_verify_ssl())
20
- response.raise_for_status() # Raise an error for HTTP errors
21
20
  try:
22
21
  return response.json()
23
22
  except json.JSONDecodeError as json_err:
23
+ response.raise_for_status()
24
24
  print(f"Error decoding JSON response: {json_err}")
25
25
  return {"error": f"Invalid JSON response: {json_err}", "raw_content": response.text[:200]}
26
26
  except requests.RequestException as e:
@@ -61,10 +61,10 @@ def post_data(url, headers=None, data=None):
61
61
  """
62
62
  try:
63
63
  response = requests.post(url, headers=headers, json=data, verify=load_verify_ssl())
64
- response.raise_for_status() # Raise an error for HTTP errors
65
64
  try:
66
65
  return response.json()
67
66
  except json.JSONDecodeError as json_err:
67
+ response.raise_for_status()
68
68
  print(f"Error decoding JSON response: {json_err}")
69
69
  return {"error": f"Invalid JSON response: {json_err}", "raw_content": response.text[:200]}
70
70
  except requests.RequestException as e:
@@ -85,10 +85,10 @@ def put_data(url, headers=None, data=None):
85
85
  """
86
86
  try:
87
87
  response = requests.put(url, headers=headers, json=data, verify=load_verify_ssl())
88
- response.raise_for_status() # Raise an error for HTTP errors
89
88
  try:
90
89
  return response.json()
91
90
  except json.JSONDecodeError as json_err:
91
+ response.raise_for_status()
92
92
  print(f"Error decoding JSON response: {json_err}")
93
93
  return {"error": f"Invalid JSON response: {json_err}", "raw_content": response.text[:200]}
94
94
  except requests.RequestException as e:
@@ -109,10 +109,10 @@ def delete_data(url, headers=None, data=None):
109
109
  """
110
110
  try:
111
111
  response = requests.delete(url, headers=headers, json=data, verify=load_verify_ssl())
112
- response.raise_for_status() # Raise an error for HTTP errors
113
112
  try:
114
113
  return response.json()
115
114
  except json.JSONDecodeError as json_err:
115
+ response.raise_for_status()
116
116
  print(f"Error decoding JSON response: {json_err}")
117
117
  return {"error": f"Invalid JSON response: {json_err}", "raw_content": response.text[:200]}
118
118
  except requests.RequestException as e:
@@ -2,7 +2,8 @@ from das.common.config import load_api_url
2
2
  from das.services.attributes import AttributesService
3
3
  from das.services.entry_fields import EntryFieldsService
4
4
  from das.services.search import SearchService
5
-
5
+ from das.common.entry_fields_constants import DIGITAL_OBJECT_INPUT, GROUP_BOX_INPUT
6
+ import json
6
7
  class SearchManager:
7
8
  def __init__(self):
8
9
  base_url = load_api_url()
@@ -12,6 +13,21 @@ class SearchManager:
12
13
  self.attributes_service = AttributesService(base_url)
13
14
  self.entry_fields = EntryFieldsService(base_url)
14
15
 
16
+ def __convert_group_box_filter(self, entry_fields: list, filter: str) -> str:
17
+ """Converts user-friendly group box filter to API-compatible filter."""
18
+ for field in entry_fields:
19
+ if field.get('inputType') == GROUP_BOX_INPUT:
20
+ custom_data = field.get('customData', None)
21
+ if custom_data is not None:
22
+ custom_data = json.loads(custom_data)
23
+ if custom_data.get('fields') is not None:
24
+ for field in custom_data.get('fields'):
25
+ display_name = field.get('displayName')
26
+ column_name = field.get('column')
27
+ if display_name and column_name:
28
+ filter = filter.lower().replace(f"{display_name.lower()}(", f"{column_name.lower()}(")
29
+ return filter
30
+
15
31
  def __convert_filter(self, entry_fields: list, filter: str) -> str:
16
32
  """Converts user-friendly filter to API-compatible filter."""
17
33
  # The fileter will be in the format: name(*64*);Create at(>2023-01-01);Sampling Location(*North Sea*)
@@ -19,6 +35,8 @@ class SearchManager:
19
35
  for field in entry_fields:
20
36
  display_name = field.get('displayName')
21
37
  column_name = field.get('column')
38
+ if field.get('inputType') == GROUP_BOX_INPUT:
39
+ filter = self.__convert_group_box_filter(entry_fields, filter)
22
40
  if display_name and column_name:
23
41
  filter = filter.lower().replace(f"{display_name.lower()}(", f"{column_name.lower()}(")
24
42
  return filter
@@ -5,6 +5,14 @@ class EntriesService():
5
5
  def __init__(self, base_url):
6
6
  self.base_url = f"{base_url}/api/services/app/Entry"
7
7
 
8
+ def _raise_error(self, response: dict):
9
+ error = response.get('error') or {}
10
+ if isinstance(error, dict):
11
+ message = (error.get('message') or 'Unknown error occurred').strip()
12
+ else:
13
+ message = str(error).strip() or 'Unknown error occurred'
14
+ raise ValueError(message)
15
+
8
16
  def get_entry(self, code: str):
9
17
  """Get an entry by its code (raw key values)."""
10
18
  token = load_token()
@@ -23,7 +31,7 @@ class EntriesService():
23
31
  if response.get('success') == True:
24
32
  return response.get('result')
25
33
  else:
26
- raise ValueError(response.get('error'))
34
+ self._raise_error(response)
27
35
 
28
36
  def get(self, id: str = None, code: str = None):
29
37
  token = load_token()
@@ -51,7 +59,7 @@ class EntriesService():
51
59
  raw_content = response.get('raw_content', '')
52
60
  raise ValueError(f"API returned invalid JSON: {response.get('error')}\nResponse content: {raw_content}")
53
61
  else:
54
- raise ValueError(response.get('error') or "Unknown error occurred")
62
+ self._raise_error(response)
55
63
 
56
64
  def delete_by_id(self, id: str) -> bool:
57
65
  """Delete an entry by its id."""
@@ -77,7 +85,7 @@ class EntriesService():
77
85
  if response.get('success') == True:
78
86
  return True
79
87
  else:
80
- raise ValueError(response.get('error'))
88
+ self._raise_error(response)
81
89
 
82
90
  def delete(self, code: str) -> bool:
83
91
  """Delete an entry by its code."""
@@ -102,7 +110,7 @@ class EntriesService():
102
110
  if response.get('success') == True:
103
111
  return True
104
112
  else:
105
- raise ValueError(response.get('error'))
113
+ self._raise_error(response)
106
114
 
107
115
  def create(self, attribute_id: int, entry: dict):
108
116
  """Create a new entry."""
@@ -128,7 +136,7 @@ class EntriesService():
128
136
  if response.get('success') == True:
129
137
  return response.get('result')
130
138
  else:
131
- raise ValueError(response.get('error'))
139
+ self._raise_error(response)
132
140
 
133
141
  def update(self, attribute_id: int, entry: dict):
134
142
  """Update an existing entry."""
@@ -154,7 +162,7 @@ class EntriesService():
154
162
  if response.get('success') == True:
155
163
  return response.get('result')
156
164
  else:
157
- raise ValueError(response.get('error'))
165
+ self._raise_error(response)
158
166
 
159
167
  def get_entry_logs(
160
168
  self,
@@ -183,7 +191,7 @@ class EntriesService():
183
191
  if response.get('success') == True:
184
192
  return response.get('result')
185
193
  else:
186
- raise ValueError(response.get('error'))
194
+ self._raise_error(response)
187
195
 
188
196
  def chown(self, new_user_id: int, entry_list_ids: list[str]):
189
197
  """Change the owner of a list of entries."""
@@ -209,5 +217,5 @@ class EntriesService():
209
217
  if response.get('success') == True:
210
218
  return response.get('result')
211
219
  else:
212
- raise ValueError(response.get('error'))
220
+ self._raise_error(response)
213
221
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: das-cli
3
- Version: 1.2.26
3
+ Version: 1.2.28
4
4
  Summary: DAS api client.
5
5
  Author: Royal Netherlands Institute for Sea Research
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "das-cli"
7
- version = "1.2.26"
7
+ version = "1.2.28"
8
8
  authors = [
9
9
  { name="Royal Netherlands Institute for Sea Research" },
10
10
  ]
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