das-cli 1.2.6__py3-none-any.whl → 1.2.10__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.
- das/cli.py +1245 -1245
- das/managers/entries_manager.py +10 -5
- das/services/downloads.py +100 -100
- {das_cli-1.2.6.dist-info → das_cli-1.2.10.dist-info}/METADATA +1 -1
- {das_cli-1.2.6.dist-info → das_cli-1.2.10.dist-info}/RECORD +9 -9
- {das_cli-1.2.6.dist-info → das_cli-1.2.10.dist-info}/WHEEL +0 -0
- {das_cli-1.2.6.dist-info → das_cli-1.2.10.dist-info}/entry_points.txt +0 -0
- {das_cli-1.2.6.dist-info → das_cli-1.2.10.dist-info}/licenses/LICENSE +0 -0
- {das_cli-1.2.6.dist-info → das_cli-1.2.10.dist-info}/top_level.txt +0 -0
das/managers/entries_manager.py
CHANGED
|
@@ -161,15 +161,20 @@ class EntryManager:
|
|
|
161
161
|
|
|
162
162
|
new_entry = {}
|
|
163
163
|
|
|
164
|
+
# all keys must be strings and lowercase
|
|
165
|
+
entry = {str(k).lower(): v for k, v in entry.items()}
|
|
166
|
+
|
|
164
167
|
for field in fields:
|
|
165
|
-
field_name = field.get("displayName")
|
|
168
|
+
field_name = field.get("displayName").lower()
|
|
166
169
|
column_name = field.get("column").lower()
|
|
167
170
|
|
|
168
171
|
if field_name in entry:
|
|
169
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])
|
|
170
175
|
else:
|
|
171
176
|
new_entry[column_name] = None
|
|
172
|
-
|
|
177
|
+
|
|
173
178
|
return self.entry_service.create(attribute_id=attribute_id, entry=new_entry)
|
|
174
179
|
|
|
175
180
|
def update(self, id: str = None, code: str = None, entry: dict = None, entries: list = None) -> list:
|
|
@@ -246,8 +251,8 @@ class EntryManager:
|
|
|
246
251
|
|
|
247
252
|
attribute_id = existing_entry_response.get("attributeId")
|
|
248
253
|
|
|
249
|
-
#
|
|
250
|
-
entry = {k.lower(): v for k, v in entry.items()}
|
|
254
|
+
# all keys must be strings and lowercase
|
|
255
|
+
entry = {str(k).lower(): v for k, v in entry.items()}
|
|
251
256
|
|
|
252
257
|
if not attribute_id:
|
|
253
258
|
raise ValueError("Attribute ID is missing in the existing entry")
|
|
@@ -265,7 +270,7 @@ class EntryManager:
|
|
|
265
270
|
updated_entry = existing_entry_response.get('entry', {})
|
|
266
271
|
|
|
267
272
|
for field in fields:
|
|
268
|
-
field_name = field.get("displayName")
|
|
273
|
+
field_name = field.get("displayName").lower()
|
|
269
274
|
column_name = field.get("column").lower()
|
|
270
275
|
|
|
271
276
|
if field_name in entry:
|
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
|
das/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
das/app.py,sha256=kKxN4Vn84SA5Ph3zY13avMG2vrUp-ffpdDkhwYR9Bho,1475
|
|
3
|
-
das/cli.py,sha256=
|
|
3
|
+
das/cli.py,sha256=hl5-QofwNwloXuCdGlCg2Nb7RffQqS2mccyN-hGbkro,50019
|
|
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
|
|
@@ -13,20 +13,20 @@ 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=
|
|
16
|
+
das/managers/entries_manager.py,sha256=7mSbC26Z893cMTI-wA5anJThDlsX37eqxCQGK1e3eQo,21174
|
|
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=
|
|
21
|
+
das/services/downloads.py,sha256=gauyQUhu4TmClLbnBf1N9k86c0PWm8ZlMIvxoE5cOB8,3609
|
|
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.
|
|
28
|
-
das_cli-1.2.
|
|
29
|
-
das_cli-1.2.
|
|
30
|
-
das_cli-1.2.
|
|
31
|
-
das_cli-1.2.
|
|
32
|
-
das_cli-1.2.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|