terrakio-core 0.3.3__py3-none-any.whl → 0.3.6__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.
Potentially problematic release.
This version of terrakio-core might be problematic. Click here for more details.
- terrakio_core/__init__.py +10 -1
- terrakio_core/async_client.py +304 -0
- terrakio_core/client.py +22 -1717
- terrakio_core/config.py +8 -15
- terrakio_core/convenience_functions/convenience_functions.py +296 -0
- terrakio_core/endpoints/auth.py +180 -0
- terrakio_core/endpoints/dataset_management.py +369 -0
- terrakio_core/endpoints/group_management.py +228 -0
- terrakio_core/endpoints/mass_stats.py +594 -0
- terrakio_core/endpoints/model_management.py +385 -0
- terrakio_core/endpoints/space_management.py +72 -0
- terrakio_core/endpoints/user_management.py +131 -0
- terrakio_core/helper/bounded_taskgroup.py +20 -0
- terrakio_core/helper/decorators.py +58 -0
- terrakio_core/{generation → helper}/tiles.py +1 -12
- terrakio_core/sync_client.py +370 -0
- {terrakio_core-0.3.3.dist-info → terrakio_core-0.3.6.dist-info}/METADATA +1 -1
- terrakio_core-0.3.6.dist-info/RECORD +21 -0
- terrakio_core/auth.py +0 -223
- terrakio_core/dataset_management.py +0 -287
- terrakio_core/decorators.py +0 -18
- terrakio_core/group_access_management.py +0 -232
- terrakio_core/mass_stats.py +0 -504
- terrakio_core/space_management.py +0 -101
- terrakio_core/user_management.py +0 -227
- terrakio_core-0.3.3.dist-info/RECORD +0 -16
- {terrakio_core-0.3.3.dist-info → terrakio_core-0.3.6.dist-info}/WHEEL +0 -0
- {terrakio_core-0.3.3.dist-info → terrakio_core-0.3.6.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
from typing import Dict, Any, List, Optional
|
|
2
|
+
from ..helper.decorators import require_token, require_api_key, require_auth
|
|
3
|
+
|
|
4
|
+
class DatasetManagement:
|
|
5
|
+
def __init__(self, client):
|
|
6
|
+
self._client = client
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@require_api_key
|
|
10
|
+
def list_datasets(self, substring: Optional[str] = None, collection: str = "terrakio-datasets") -> List[Dict[str, Any]]:
|
|
11
|
+
"""
|
|
12
|
+
List datasets, optionally filtering by a substring and collection.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
substring: Substring to filter by (optional)
|
|
16
|
+
collection: Dataset collection (default: 'terrakio-datasets')
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
List of datasets matching the criteria
|
|
20
|
+
"""
|
|
21
|
+
params = {"collection": collection}
|
|
22
|
+
if substring:
|
|
23
|
+
params.update({"substring": substring})
|
|
24
|
+
return self._client._terrakio_request("GET", "/datasets", params = params)
|
|
25
|
+
|
|
26
|
+
@require_api_key
|
|
27
|
+
def get_dataset(self, name: str, collection: str = "terrakio-datasets") -> Dict[str, Any]:
|
|
28
|
+
"""
|
|
29
|
+
Retrieve dataset info by dataset name.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
name: The name of the dataset (required)
|
|
33
|
+
collection: The dataset collection (default: 'terrakio-datasets')
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
Dataset information as a dictionary
|
|
37
|
+
|
|
38
|
+
Raises:
|
|
39
|
+
APIError: If the API request fails
|
|
40
|
+
"""
|
|
41
|
+
params = {"collection": collection}
|
|
42
|
+
return self._client._terrakio_request("GET", f"/datasets/{name}", params = params)
|
|
43
|
+
|
|
44
|
+
@require_api_key
|
|
45
|
+
def create_dataset(
|
|
46
|
+
self,
|
|
47
|
+
name: str,
|
|
48
|
+
collection: str = "terrakio-datasets",
|
|
49
|
+
products: Optional[List[str]] = None,
|
|
50
|
+
dates_iso8601: Optional[List[str]] = None,
|
|
51
|
+
bucket: Optional[str] = None,
|
|
52
|
+
path: Optional[str] = None,
|
|
53
|
+
data_type: Optional[str] = None,
|
|
54
|
+
no_data: Optional[Any] = None,
|
|
55
|
+
i_max: Optional[int] = None,
|
|
56
|
+
j_max: Optional[int] = None,
|
|
57
|
+
y_size: Optional[int] = None,
|
|
58
|
+
x_size: Optional[int] = None,
|
|
59
|
+
proj4: Optional[str] = None,
|
|
60
|
+
abstract: Optional[str] = None,
|
|
61
|
+
geotransform: Optional[List[float]] = None,
|
|
62
|
+
padding: Optional[Any] = None
|
|
63
|
+
) -> Dict[str, Any]:
|
|
64
|
+
"""
|
|
65
|
+
Create a new dataset.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
name: Name of the dataset (required)
|
|
69
|
+
collection: Dataset collection (default: 'terrakio-datasets')
|
|
70
|
+
products: List of products
|
|
71
|
+
dates_iso8601: List of dates
|
|
72
|
+
bucket: Storage bucket
|
|
73
|
+
path: Storage path
|
|
74
|
+
data_type: Data type
|
|
75
|
+
no_data: No data value
|
|
76
|
+
i_max: Maximum level
|
|
77
|
+
j_max: Maximum level
|
|
78
|
+
y_size: Y size
|
|
79
|
+
x_size: X size
|
|
80
|
+
proj4: Projection string
|
|
81
|
+
abstract: Dataset abstract
|
|
82
|
+
geotransform: Geotransform parameters
|
|
83
|
+
padding: Padding value
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
Created dataset information
|
|
87
|
+
|
|
88
|
+
Raises:
|
|
89
|
+
APIError: If the API request fails
|
|
90
|
+
"""
|
|
91
|
+
params = {"collection": collection}
|
|
92
|
+
payload = {"name": name}
|
|
93
|
+
param_mapping = {
|
|
94
|
+
"products": products,
|
|
95
|
+
"dates_iso8601": dates_iso8601,
|
|
96
|
+
"bucket": bucket,
|
|
97
|
+
"path": path,
|
|
98
|
+
"data_type": data_type,
|
|
99
|
+
"no_data": no_data,
|
|
100
|
+
"i_max": i_max,
|
|
101
|
+
"j_max": j_max,
|
|
102
|
+
"y_size": y_size,
|
|
103
|
+
"x_size": x_size,
|
|
104
|
+
"proj4": proj4,
|
|
105
|
+
"abstract": abstract,
|
|
106
|
+
"geotransform": geotransform,
|
|
107
|
+
"padding": padding
|
|
108
|
+
}
|
|
109
|
+
for param, value in param_mapping.items():
|
|
110
|
+
if value is not None:
|
|
111
|
+
payload[param] = value
|
|
112
|
+
return self._client._terrakio_request("POST", "/datasets", params = params, json = payload)
|
|
113
|
+
|
|
114
|
+
@require_api_key
|
|
115
|
+
def update_dataset(
|
|
116
|
+
self,
|
|
117
|
+
name: str,
|
|
118
|
+
append: bool = True,
|
|
119
|
+
collection: str = "terrakio-datasets",
|
|
120
|
+
products: Optional[List[str]] = None,
|
|
121
|
+
dates_iso8601: Optional[List[str]] = None,
|
|
122
|
+
bucket: Optional[str] = None,
|
|
123
|
+
path: Optional[str] = None,
|
|
124
|
+
data_type: Optional[str] = None,
|
|
125
|
+
no_data: Optional[Any] = None,
|
|
126
|
+
i_max: Optional[int] = None,
|
|
127
|
+
j_max: Optional[int] = None,
|
|
128
|
+
y_size: Optional[int] = None,
|
|
129
|
+
x_size: Optional[int] = None,
|
|
130
|
+
proj4: Optional[str] = None,
|
|
131
|
+
abstract: Optional[str] = None,
|
|
132
|
+
geotransform: Optional[List[float]] = None,
|
|
133
|
+
padding: Optional[Any] = None
|
|
134
|
+
) -> Dict[str, Any]:
|
|
135
|
+
"""
|
|
136
|
+
Update an existing dataset.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
name: Name of the dataset (required)
|
|
140
|
+
append: Whether to append data or replace (default: True)
|
|
141
|
+
collection: Dataset collection (default: 'terrakio-datasets')
|
|
142
|
+
products: List of products
|
|
143
|
+
dates_iso8601: List of dates
|
|
144
|
+
bucket: Storage bucket
|
|
145
|
+
path: Storage path
|
|
146
|
+
data_type: Data type
|
|
147
|
+
no_data: No data value
|
|
148
|
+
i_max: Maximum level
|
|
149
|
+
j_max: Maximum level
|
|
150
|
+
y_size: Y size
|
|
151
|
+
x_size: X size
|
|
152
|
+
proj4: Projection string
|
|
153
|
+
abstract: Dataset abstract
|
|
154
|
+
geotransform: Geotransform parameters
|
|
155
|
+
padding: Padding value
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
Updated dataset information
|
|
159
|
+
|
|
160
|
+
Raises:
|
|
161
|
+
APIError: If the API request fails
|
|
162
|
+
"""
|
|
163
|
+
params = {"collection": collection, "append": str(append).lower()}
|
|
164
|
+
payload = {"name": name}
|
|
165
|
+
param_mapping = {
|
|
166
|
+
"products": products,
|
|
167
|
+
"dates_iso8601": dates_iso8601,
|
|
168
|
+
"bucket": bucket,
|
|
169
|
+
"path": path,
|
|
170
|
+
"data_type": data_type,
|
|
171
|
+
"no_data": no_data,
|
|
172
|
+
"i_max": i_max,
|
|
173
|
+
"j_max": j_max,
|
|
174
|
+
"y_size": y_size,
|
|
175
|
+
"x_size": x_size,
|
|
176
|
+
"proj4": proj4,
|
|
177
|
+
"abstract": abstract,
|
|
178
|
+
"geotransform": geotransform,
|
|
179
|
+
"padding": padding
|
|
180
|
+
}
|
|
181
|
+
for param, value in param_mapping.items():
|
|
182
|
+
if value is not None:
|
|
183
|
+
payload[param] = value
|
|
184
|
+
return self._client._terrakio_request("PATCH", "/datasets", params = params, json = payload)
|
|
185
|
+
|
|
186
|
+
@require_api_key
|
|
187
|
+
def update_virtual_dataset(
|
|
188
|
+
self,
|
|
189
|
+
name: str,
|
|
190
|
+
append: bool = True,
|
|
191
|
+
collection: str = "terrakio-datasets",
|
|
192
|
+
products: Optional[List[str]] = None,
|
|
193
|
+
dates_iso8601: Optional[List[str]] = None,
|
|
194
|
+
bucket: Optional[str] = None,
|
|
195
|
+
path: Optional[str] = None,
|
|
196
|
+
data_type: Optional[str] = None,
|
|
197
|
+
no_data: Optional[Any] = None,
|
|
198
|
+
i_max: Optional[int] = None,
|
|
199
|
+
j_max: Optional[int] = None,
|
|
200
|
+
y_size: Optional[int] = None,
|
|
201
|
+
x_size: Optional[int] = None,
|
|
202
|
+
proj4: Optional[str] = None,
|
|
203
|
+
abstract: Optional[str] = None,
|
|
204
|
+
geotransform: Optional[List[float]] = None,
|
|
205
|
+
padding: Optional[Any] = None,
|
|
206
|
+
input: Optional[str] = None,
|
|
207
|
+
) -> Dict[str, Any]:
|
|
208
|
+
"""
|
|
209
|
+
Update an existing dataset.
|
|
210
|
+
|
|
211
|
+
Args:
|
|
212
|
+
name: Name of the dataset (required)
|
|
213
|
+
append: Whether to append data or replace (default: True)
|
|
214
|
+
collection: Dataset collection (default: 'terrakio-datasets')
|
|
215
|
+
products: List of products
|
|
216
|
+
dates_iso8601: List of dates
|
|
217
|
+
bucket: Storage bucket
|
|
218
|
+
path: Storage path
|
|
219
|
+
data_type: Data type
|
|
220
|
+
no_data: No data value
|
|
221
|
+
i_max: Maximum level
|
|
222
|
+
j_max: Maximum level
|
|
223
|
+
y_size: Y size
|
|
224
|
+
x_size: X size
|
|
225
|
+
proj4: Projection string
|
|
226
|
+
abstract: Dataset abstract
|
|
227
|
+
geotransform: Geotransform parameters
|
|
228
|
+
padding: Padding value
|
|
229
|
+
input: The input for the virtual dataset
|
|
230
|
+
|
|
231
|
+
Returns:
|
|
232
|
+
Updated dataset information
|
|
233
|
+
|
|
234
|
+
Raises:
|
|
235
|
+
APIError: If the API request fails
|
|
236
|
+
"""
|
|
237
|
+
params = {"collection": collection, "append": str(append).lower()}
|
|
238
|
+
payload = {"name": name}
|
|
239
|
+
param_mapping = {
|
|
240
|
+
"products": products,
|
|
241
|
+
"dates_iso8601": dates_iso8601,
|
|
242
|
+
"bucket": bucket,
|
|
243
|
+
"path": path,
|
|
244
|
+
"data_type": data_type,
|
|
245
|
+
"no_data": no_data,
|
|
246
|
+
"i_max": i_max,
|
|
247
|
+
"j_max": j_max,
|
|
248
|
+
"y_size": y_size,
|
|
249
|
+
"x_size": x_size,
|
|
250
|
+
"proj4": proj4,
|
|
251
|
+
"abstract": abstract,
|
|
252
|
+
"geotransform": geotransform,
|
|
253
|
+
"padding": padding,
|
|
254
|
+
"input": input,
|
|
255
|
+
}
|
|
256
|
+
for param, value in param_mapping.items():
|
|
257
|
+
if value is not None:
|
|
258
|
+
payload[param] = value
|
|
259
|
+
return self._client._terrakio_request("PATCH", "/datasets", params = params, json = payload)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
@require_api_key
|
|
264
|
+
def overwrite_dataset(
|
|
265
|
+
self,
|
|
266
|
+
name: str,
|
|
267
|
+
collection: str = "terrakio-datasets",
|
|
268
|
+
products: Optional[List[str]] = None,
|
|
269
|
+
dates_iso8601: Optional[List[str]] = None,
|
|
270
|
+
bucket: Optional[str] = None,
|
|
271
|
+
path: Optional[str] = None,
|
|
272
|
+
data_type: Optional[str] = None,
|
|
273
|
+
no_data: Optional[Any] = None,
|
|
274
|
+
i_max: Optional[int] = None,
|
|
275
|
+
j_max: Optional[int] = None,
|
|
276
|
+
y_size: Optional[int] = None,
|
|
277
|
+
x_size: Optional[int] = None,
|
|
278
|
+
proj4: Optional[str] = None,
|
|
279
|
+
abstract: Optional[str] = None,
|
|
280
|
+
geotransform: Optional[List[float]] = None,
|
|
281
|
+
padding: Optional[Any] = None
|
|
282
|
+
) -> Dict[str, Any]:
|
|
283
|
+
"""
|
|
284
|
+
Overwrite a dataset.
|
|
285
|
+
|
|
286
|
+
Args:
|
|
287
|
+
name: Name of the dataset (required)
|
|
288
|
+
collection: Dataset collection (default: 'terrakio-datasets')
|
|
289
|
+
products: List of products
|
|
290
|
+
dates_iso8601: List of dates
|
|
291
|
+
bucket: Storage bucket
|
|
292
|
+
path: Storage path
|
|
293
|
+
data_type: Data type
|
|
294
|
+
no_data: No data value
|
|
295
|
+
i_max: Maximum level
|
|
296
|
+
j_max: Maximum level
|
|
297
|
+
y_size: Y size
|
|
298
|
+
x_size: X size
|
|
299
|
+
proj4: Projection string
|
|
300
|
+
abstract: Dataset abstract
|
|
301
|
+
geotransform: Geotransform parameters
|
|
302
|
+
padding: Padding value
|
|
303
|
+
|
|
304
|
+
Returns:
|
|
305
|
+
Overwritten dataset information
|
|
306
|
+
|
|
307
|
+
Raises:
|
|
308
|
+
APIError: If the API request fails
|
|
309
|
+
"""
|
|
310
|
+
params = {"collection": collection}
|
|
311
|
+
payload = {"name": name}
|
|
312
|
+
param_mapping = {
|
|
313
|
+
"products": products,
|
|
314
|
+
"dates_iso8601": dates_iso8601,
|
|
315
|
+
"bucket": bucket,
|
|
316
|
+
"path": path,
|
|
317
|
+
"data_type": data_type,
|
|
318
|
+
"no_data": no_data,
|
|
319
|
+
"i_max": i_max,
|
|
320
|
+
"j_max": j_max,
|
|
321
|
+
"y_size": y_size,
|
|
322
|
+
"x_size": x_size,
|
|
323
|
+
"proj4": proj4,
|
|
324
|
+
"abstract": abstract,
|
|
325
|
+
"geotransform": geotransform,
|
|
326
|
+
"padding": padding
|
|
327
|
+
}
|
|
328
|
+
for param, value in param_mapping.items():
|
|
329
|
+
if value is not None:
|
|
330
|
+
payload[param] = value
|
|
331
|
+
return self._client._terrakio_request("PUT", "/datasets", params = params, json = payload)
|
|
332
|
+
|
|
333
|
+
@require_api_key
|
|
334
|
+
def delete_dataset(self, name: str, collection: str = "terrakio-datasets") -> Dict[str, Any]:
|
|
335
|
+
"""
|
|
336
|
+
Delete a dataset by name.
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
name: The name of the dataset (required)
|
|
340
|
+
collection: The dataset collection (default: 'terrakio-datasets')
|
|
341
|
+
|
|
342
|
+
Returns:
|
|
343
|
+
Deleted dataset information
|
|
344
|
+
|
|
345
|
+
Raises:
|
|
346
|
+
APIError: If the API request fails
|
|
347
|
+
"""
|
|
348
|
+
params = {"collection": collection}
|
|
349
|
+
return self._client._terrakio_request("DELETE", f"/datasets/{name}", params = params)
|
|
350
|
+
|
|
351
|
+
@require_api_key
|
|
352
|
+
def download_file_to_path(self, job_name, stage, file_name, output_path):
|
|
353
|
+
if not self.mass_stats:
|
|
354
|
+
from terrakio_core.mass_stats import MassStats
|
|
355
|
+
if not self.url or not self.key:
|
|
356
|
+
raise ConfigurationError("Mass Stats client not initialized. Make sure API URL and key are set.")
|
|
357
|
+
self.mass_stats = MassStats(
|
|
358
|
+
base_url=self.url,
|
|
359
|
+
api_key=self.key,
|
|
360
|
+
verify=self.verify,
|
|
361
|
+
timeout=self.timeout
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
# fetch bucket info based on job name and stage
|
|
365
|
+
|
|
366
|
+
taskid = self.mass_stats.get_task_id(job_name, stage).get('task_id')
|
|
367
|
+
trackinfo = self.mass_stats.track_job([taskid])
|
|
368
|
+
bucket = trackinfo[taskid]['bucket']
|
|
369
|
+
return self.mass_stats.download_file(job_name, bucket, file_name, output_path)
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
from typing import Dict, Any
|
|
2
|
+
from ..helper.decorators import require_token, require_api_key, require_auth
|
|
3
|
+
class BaseGroupManagement:
|
|
4
|
+
"""Base class with common group management methods."""
|
|
5
|
+
def __init__(self, client):
|
|
6
|
+
self._client = client
|
|
7
|
+
|
|
8
|
+
@require_api_key
|
|
9
|
+
def get_group_datasets(self, group: str, collection: str = "terrakio-datasets") -> Dict[str, Any]:
|
|
10
|
+
"""
|
|
11
|
+
Get datasets of a group.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
group: Name of the group
|
|
15
|
+
collection: Name of the collection (default is "terrakio-datasets")
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
API response data
|
|
19
|
+
|
|
20
|
+
Raises:
|
|
21
|
+
APIError: If the API request fails
|
|
22
|
+
"""
|
|
23
|
+
params = {"collection": collection}
|
|
24
|
+
return self._client._terrakio_request("GET", f"/groups/{group}/datasets", params=params)
|
|
25
|
+
|
|
26
|
+
@require_api_key
|
|
27
|
+
def add_user_to_group(self, group: str, emails: list[str]) -> Dict[str, Any]:
|
|
28
|
+
"""
|
|
29
|
+
Add a user to a group.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
group: Name of the group
|
|
33
|
+
email: List of user emails to add to the group
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
API response data
|
|
37
|
+
"""
|
|
38
|
+
payload = {"emails": emails}
|
|
39
|
+
return self._client._terrakio_request("POST", f"/groups/{group}/users", json = payload)
|
|
40
|
+
|
|
41
|
+
@require_api_key
|
|
42
|
+
def add_group_to_dataset(self, dataset: str, id: str) -> Dict[str, Any]:
|
|
43
|
+
"""
|
|
44
|
+
Add a group to a dataset.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
dataset: Name of the dataset
|
|
48
|
+
id: Group ID
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
API response data
|
|
52
|
+
"""
|
|
53
|
+
payload = {"id": id}
|
|
54
|
+
return self._client._terrakio_request("POST", f"/datasets/{dataset}/groups", json = payload)
|
|
55
|
+
|
|
56
|
+
@require_api_key
|
|
57
|
+
def add_user_to_dataset(self, dataset: str, emails: list[str]) -> Dict[str, Any]:
|
|
58
|
+
"""
|
|
59
|
+
Add a user to a dataset.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
dataset: Name of the dataset
|
|
63
|
+
email: List of user emails to add to the dataset
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
API response data
|
|
67
|
+
"""
|
|
68
|
+
payload = {"emails": emails}
|
|
69
|
+
return self._client._terrakio_request("POST", f"/datasets/{dataset}/share", json = payload)
|
|
70
|
+
|
|
71
|
+
@require_api_key
|
|
72
|
+
def remove_user_from_group(self, group: str, emails: list[str]) -> Dict[str, Any]:
|
|
73
|
+
"""
|
|
74
|
+
Remove a user from a group.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
group: Name of the group
|
|
78
|
+
email: List of user emails to remove from the group
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
API response data
|
|
82
|
+
"""
|
|
83
|
+
payload = {"emails": emails}
|
|
84
|
+
return self._client._terrakio_request("DELETE", f"/groups/{group}/users", json = payload)
|
|
85
|
+
|
|
86
|
+
@require_api_key
|
|
87
|
+
def remove_user_from_dataset(self, dataset: str, emails: list[str]) -> Dict[str, Any]:
|
|
88
|
+
"""
|
|
89
|
+
Remove a user from a dataset.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
dataset: Name of the dataset
|
|
93
|
+
email: List of user emails to remove from the dataset
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
API response data
|
|
97
|
+
"""
|
|
98
|
+
payload = {"emails": emails}
|
|
99
|
+
return self._client._terrakio_request("PATCH", f"/datasets/{dataset}/share", json = payload)
|
|
100
|
+
|
|
101
|
+
class GroupManagement(BaseGroupManagement):
|
|
102
|
+
"""Normal user group management with regular user permissions."""
|
|
103
|
+
@require_api_key
|
|
104
|
+
def list_groups(self) -> Dict[str, Any]:
|
|
105
|
+
"""
|
|
106
|
+
List all groups.
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
API response data
|
|
110
|
+
|
|
111
|
+
Raises:
|
|
112
|
+
APIError: If the API request fails
|
|
113
|
+
"""
|
|
114
|
+
return self._client._terrakio_request("GET", "/groups")
|
|
115
|
+
|
|
116
|
+
@require_api_key
|
|
117
|
+
def get_group(self, group: str) -> Dict[str, Any]:
|
|
118
|
+
"""
|
|
119
|
+
Get a group.
|
|
120
|
+
|
|
121
|
+
Args:
|
|
122
|
+
group: Name of the group
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
API response data
|
|
126
|
+
|
|
127
|
+
Raises:
|
|
128
|
+
APIError: If the API request fails
|
|
129
|
+
"""
|
|
130
|
+
return self._client._terrakio_request("GET", f"/groups/{group}")
|
|
131
|
+
|
|
132
|
+
@require_api_key
|
|
133
|
+
def create_group(self, name: str) -> Dict[str, Any]:
|
|
134
|
+
"""
|
|
135
|
+
Create a group
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
name: Name of the group
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
API response data
|
|
142
|
+
|
|
143
|
+
Raises:
|
|
144
|
+
APIError: If the API request fails
|
|
145
|
+
"""
|
|
146
|
+
payload = {"name": name}
|
|
147
|
+
return self._client._terrakio_request("POST", "/groups", json = payload)
|
|
148
|
+
|
|
149
|
+
@require_api_key
|
|
150
|
+
def delete_group(self, group: str) -> Dict[str, Any]:
|
|
151
|
+
"""
|
|
152
|
+
Delete a group.
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
group: Name of the group to delete
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
API response data
|
|
159
|
+
|
|
160
|
+
Raises:
|
|
161
|
+
APIError: If the API request fails
|
|
162
|
+
"""
|
|
163
|
+
return self._client._terrakio_request("DELETE", f"/groups/{group}")
|
|
164
|
+
|
|
165
|
+
class AdminGroupManagement(BaseGroupManagement):
|
|
166
|
+
"""Admin user group management with admin permissions."""
|
|
167
|
+
@require_api_key
|
|
168
|
+
def list_groups(self) -> Dict[str, Any]:
|
|
169
|
+
"""
|
|
170
|
+
List all groups.
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
API response data
|
|
174
|
+
|
|
175
|
+
Raises:
|
|
176
|
+
APIError: If the API request fails
|
|
177
|
+
"""
|
|
178
|
+
return self._client._terrakio_request("GET", "/admin/groups")
|
|
179
|
+
|
|
180
|
+
@require_api_key
|
|
181
|
+
def get_group(self, group: str) -> Dict[str, Any]:
|
|
182
|
+
"""
|
|
183
|
+
Get a group.
|
|
184
|
+
|
|
185
|
+
Args:
|
|
186
|
+
group: Name of the group
|
|
187
|
+
|
|
188
|
+
Returns:
|
|
189
|
+
API response data
|
|
190
|
+
|
|
191
|
+
Raises:
|
|
192
|
+
APIError: If the API request fails
|
|
193
|
+
"""
|
|
194
|
+
return self._client._terrakio_request("GET", f"/admin/groups/{group}")
|
|
195
|
+
|
|
196
|
+
@require_api_key
|
|
197
|
+
def create_group(self, name: str, owner: str) -> Dict[str, Any]:
|
|
198
|
+
"""
|
|
199
|
+
Create a group.
|
|
200
|
+
|
|
201
|
+
Args:
|
|
202
|
+
name: Name of the group
|
|
203
|
+
owner: User email of the owner
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
API response data
|
|
207
|
+
|
|
208
|
+
Raises:
|
|
209
|
+
APIError: If the API request fails
|
|
210
|
+
"""
|
|
211
|
+
payload = {"name": name, "owner": owner}
|
|
212
|
+
return self._client._terrakio_request("POST", f"/admin/groups", json=payload)
|
|
213
|
+
|
|
214
|
+
@require_api_key
|
|
215
|
+
def delete_group(self, group: str) -> Dict[str, Any]:
|
|
216
|
+
"""
|
|
217
|
+
Delete a group.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
group: Name of the group to delete
|
|
221
|
+
|
|
222
|
+
Returns:
|
|
223
|
+
API response data
|
|
224
|
+
|
|
225
|
+
Raises:
|
|
226
|
+
APIError: If the API request fails
|
|
227
|
+
"""
|
|
228
|
+
return self._client._terrakio_request("DELETE", f"/admin/groups/{group}")
|