das-cli 1.0.0__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.
@@ -0,0 +1,84 @@
1
+ from das.common.api import post_data, get_data
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
+
9
+ def create(self, request_data: list[dict]):
10
+ """Create a new download request."""
11
+ token = load_token()
12
+
13
+ if (token is None or token == ""):
14
+ raise ValueError("Authorization token is required")
15
+
16
+ headers = {
17
+ "Authorization": f"Bearer {token}",
18
+ "Content-Type": "application/json"
19
+ }
20
+
21
+ url = f"{self.base_url}/Create"
22
+
23
+ response = post_data(url, data=request_data, headers=headers)
24
+
25
+ if response.get('success') == True:
26
+ return response.get('result')
27
+ else:
28
+ raise ValueError(response.get('error'))
29
+
30
+ def delete(self, request_id: str):
31
+ """Delete a download request by ID."""
32
+
33
+ #check if request_id is valid uuid
34
+ if not isinstance(request_id, str) or len(request_id) != 36:
35
+ raise ValueError("Invalid request ID")
36
+
37
+ token = load_token()
38
+
39
+ if (token is None or token == ""):
40
+ raise ValueError("Authorization token is required")
41
+
42
+ headers = {
43
+ "Authorization": f"Bearer {token}",
44
+ "Content-Type": "application/json"
45
+ }
46
+
47
+ url = f"{self.base_url}/Delete?downloadRequestId={request_id}"
48
+
49
+ response = post_data(url, data={}, headers=headers)
50
+
51
+ if response.get('success') == True:
52
+ return response.get('result')
53
+ else:
54
+ raise ValueError(response.get('error'))
55
+
56
+ def get_my_requests(self):
57
+ """Get all download requests for the current user."""
58
+ token = load_token()
59
+
60
+ if (token is None or token == ""):
61
+ raise ValueError("Authorization token is required")
62
+
63
+ headers = {
64
+ "Authorization": f"Bearer {token}"
65
+ }
66
+
67
+ url = f"{self.base_url}/GetMyRequests"
68
+ response = get_data(url, headers=headers)
69
+
70
+ # Expected API response shape:
71
+ # { success: true, result: { totalCount: number, items: [...] }, ... }
72
+ if isinstance(response, dict) and response.get('success') is True:
73
+ return response.get('result')
74
+ # Some backends might already return the result without 'success'
75
+ if isinstance(response, dict) and 'result' in response and 'success' not in response:
76
+ return response.get('result')
77
+ # If the API directly returns the payload (result), pass it through
78
+ if isinstance(response, dict) and 'items' in response and 'totalCount' in response:
79
+ return response
80
+ # Otherwise raise a meaningful error
81
+ error_msg = None
82
+ if isinstance(response, dict):
83
+ error_msg = response.get('error') or response.get('message')
84
+ raise ValueError(error_msg or 'Failed to fetch download requests')
@@ -0,0 +1,132 @@
1
+ from das.common.api import delete_data, get_data, post_data, put_data
2
+ from das.common.config import load_token
3
+
4
+ class EntriesService():
5
+ def __init__(self, base_url):
6
+ self.base_url = f"{base_url}/api/services/app/Entry"
7
+
8
+ def get_entry(self, code: str):
9
+ """Get an entry by its code (raw key values)."""
10
+ token = load_token()
11
+
12
+ if (token is None or token == ""):
13
+ raise ValueError("Authorization token is required")
14
+
15
+ headers = {
16
+ "Authorization": f"Bearer {token}"
17
+ }
18
+
19
+ url = f"{self.base_url}/GetEntryByCode?code={code}"
20
+
21
+ response = get_data(url, headers=headers)
22
+
23
+ if response.get('success') == True:
24
+ return response.get('result')
25
+ else:
26
+ raise ValueError(response.get('error'))
27
+
28
+ def get(self, id: str = None, code: str = None):
29
+ token = load_token()
30
+
31
+ if (token is None or token == ""):
32
+ raise ValueError("Authorization token is required")
33
+
34
+ headers = {
35
+ "Authorization": f"Bearer {token}"
36
+ }
37
+
38
+ url = ''
39
+
40
+ if id is not None:
41
+ url = f"{self.base_url}/GetById?id={id}"
42
+
43
+ if code is not None:
44
+ url = f"{self.base_url}/GetEntryByCode?code={code}"
45
+
46
+ response = get_data(url, headers=headers)
47
+
48
+ if response.get('success') == True:
49
+ return response.get('result')
50
+ elif 'error' in response and 'Invalid JSON' in str(response.get('error')):
51
+ raw_content = response.get('raw_content', '')
52
+ raise ValueError(f"API returned invalid JSON: {response.get('error')}\nResponse content: {raw_content}")
53
+ else:
54
+ raise ValueError(response.get('error') or "Unknown error occurred")
55
+
56
+ def delete(self, code: str):
57
+ """Delete an entry by its code."""
58
+ token = load_token()
59
+
60
+ if (token is None or token == ""):
61
+ raise ValueError("Authorization token is required")
62
+
63
+ headers = {
64
+ "Authorization": f"Bearer {token}"
65
+ }
66
+
67
+ response_entry = self.get(code=code) # Ensure entry exists before attempting deletion
68
+
69
+ if response_entry is None:
70
+ raise ValueError(f"Entry with code {code} not found")
71
+
72
+ url = f"{self.base_url}/Delete?Id={response_entry.get('entry',{}).get('id')}&AttributeId={response_entry.get('attributeId')}"
73
+
74
+ response = delete_data(url, headers=headers)
75
+
76
+ if response.get('success') == True:
77
+ return response
78
+ else:
79
+ raise ValueError(response.get('error'))
80
+
81
+ def create(self, attribute_id: int, entry: dict):
82
+ """Create a new entry."""
83
+ token = load_token()
84
+
85
+ if (token is None or token == ""):
86
+ raise ValueError("Authorization token is required")
87
+
88
+ headers = {
89
+ "Authorization": f"Bearer {token}",
90
+ "Content-Type": "application/json"
91
+ }
92
+
93
+ url = f"{self.base_url}/Create"
94
+
95
+ payload = {
96
+ "attributeId": attribute_id,
97
+ "entry": entry
98
+ }
99
+
100
+ response = post_data(url, data=payload, headers=headers)
101
+
102
+ if response.get('success') == True:
103
+ return response.get('result')
104
+ else:
105
+ raise ValueError(response.get('error'))
106
+
107
+ def update(self, attribute_id: int, entry: dict):
108
+ """Update an existing entry."""
109
+ token = load_token()
110
+
111
+ if (token is None or token == ""):
112
+ raise ValueError("Authorization token is required")
113
+
114
+ headers = {
115
+ "Authorization": f"Bearer {token}",
116
+ "Content-Type": "application/json"
117
+ }
118
+
119
+ url = f"{self.base_url}/Update"
120
+
121
+ payload = {
122
+ "attributeId": attribute_id,
123
+ "entry": entry
124
+ }
125
+
126
+ response = put_data(url, data=payload, headers=headers)
127
+
128
+ if response.get('success') == True:
129
+ return response.get('result')
130
+ else:
131
+ raise ValueError(response.get('error'))
132
+
@@ -0,0 +1,33 @@
1
+ from das.common.api import get_data, post_data
2
+ from das.common.config import load_token
3
+
4
+
5
+ class EntryFieldsService():
6
+ def __init__(self, base_url):
7
+ self.base_url = f"{base_url}/api/services/app/EntryField"
8
+
9
+ def get_entry_fields(self, attribute_id: int, display_type: int = 2):
10
+ token = load_token()
11
+
12
+ if (attribute_id is None):
13
+ raise ValueError("Attribute ID parameter must be provided")
14
+
15
+ if (token is None or token == ""):
16
+ raise ValueError("Authorization token is required")
17
+
18
+ headers = {
19
+ "Authorization": f"Bearer {token}"
20
+ }
21
+
22
+ url = f"{self.base_url}/GetAll?AttributeId={attribute_id}&DisplayType={display_type}"
23
+
24
+ response = get_data(url, headers=headers)
25
+
26
+ if response.get('success') == True:
27
+ return response
28
+ elif 'error' in response and 'Invalid JSON' in str(response.get('error')):
29
+ raw_content = response.get('raw_content', '')
30
+ raise ValueError(f"API returned invalid JSON: {response.get('error')}\nResponse content: {raw_content}")
31
+ else:
32
+ error_msg = response.get('error')
33
+ raise ValueError(error_msg if error_msg else "Unknown error in entry fields request")
@@ -0,0 +1,26 @@
1
+ from das.common.api import get_data, post_data
2
+ from das.common.config import load_token
3
+
4
+ class HangfireService:
5
+ def __init__(self, base_url):
6
+ self.base_url = f"{base_url}/api/services/app/Hangfire"
7
+
8
+ def sync_doi(self, id: str):
9
+ """Trigger a DOI synchronization task."""
10
+ token = load_token()
11
+
12
+ if (token is None or token == ""):
13
+ raise ValueError("Authorization token is required")
14
+
15
+ headers = {
16
+ "Authorization": f"Bearer {token}"
17
+ }
18
+
19
+ url = f"{self.base_url}/TriggerProcessDigitalObjectIdentifier?id={id}"
20
+
21
+ response = post_data(url, headers=headers)
22
+
23
+ if response.get('success') == True:
24
+ return response.get('result')
25
+ else:
26
+ raise ValueError(response.get('error'))
das/services/search.py ADDED
@@ -0,0 +1,33 @@
1
+ from das.common.config import load_token
2
+ from das.common.api import delete_data, get_data, post_data
3
+
4
+ class SearchService:
5
+ def __init__(self, base_url):
6
+ self.base_url = f"{base_url}/api/services/app/Search"
7
+
8
+ def search_entries(self, **kwargs):
9
+ """Search entries based on provided criteria."""
10
+ token = load_token()
11
+
12
+ if (token is None or token == ""):
13
+ raise ValueError("Authorization token is required")
14
+
15
+ headers = {
16
+ "Authorization": f"Bearer {token}"
17
+ }
18
+
19
+ valid_params = ['attributeId', 'tableName', 'queryString', 'includeRelationsId', 'sorting', 'maxResultCount', 'skipCount']
20
+
21
+ for key in kwargs.keys():
22
+ if key not in valid_params:
23
+ raise ValueError(f"Invalid search parameter: {key}")
24
+
25
+ response = post_data(f"{self.base_url}/SearchEntries", data=kwargs, headers=headers)
26
+
27
+ if response.get('success') == True:
28
+ return response.get('result')
29
+ elif 'error' in response and 'Invalid JSON' in str(response.get('error')):
30
+ raw_content = response.get('raw_content', '')
31
+ raise ValueError(f"API returned invalid JSON: {response.get('error')}\nResponse content: {raw_content}")
32
+ else:
33
+ raise ValueError(response.get('error') or "Unknown error occurred")