pangea-sdk 3.8.0b1__py3-none-any.whl → 5.3.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.
Files changed (48) hide show
  1. pangea/__init__.py +1 -1
  2. pangea/asyncio/file_uploader.py +1 -1
  3. pangea/asyncio/request.py +49 -31
  4. pangea/asyncio/services/__init__.py +2 -0
  5. pangea/asyncio/services/audit.py +192 -31
  6. pangea/asyncio/services/authn.py +187 -109
  7. pangea/asyncio/services/authz.py +285 -0
  8. pangea/asyncio/services/base.py +21 -2
  9. pangea/asyncio/services/embargo.py +2 -2
  10. pangea/asyncio/services/file_scan.py +24 -9
  11. pangea/asyncio/services/intel.py +108 -34
  12. pangea/asyncio/services/redact.py +72 -4
  13. pangea/asyncio/services/sanitize.py +217 -0
  14. pangea/asyncio/services/share.py +246 -73
  15. pangea/asyncio/services/vault.py +1710 -750
  16. pangea/crypto/rsa.py +135 -0
  17. pangea/deep_verify.py +7 -1
  18. pangea/dump_audit.py +9 -8
  19. pangea/request.py +83 -59
  20. pangea/response.py +49 -31
  21. pangea/services/__init__.py +2 -0
  22. pangea/services/audit/audit.py +205 -42
  23. pangea/services/audit/models.py +56 -8
  24. pangea/services/audit/signing.py +6 -5
  25. pangea/services/audit/util.py +3 -3
  26. pangea/services/authn/authn.py +140 -70
  27. pangea/services/authn/models.py +167 -11
  28. pangea/services/authz.py +400 -0
  29. pangea/services/base.py +39 -8
  30. pangea/services/embargo.py +2 -2
  31. pangea/services/file_scan.py +32 -15
  32. pangea/services/intel.py +157 -32
  33. pangea/services/redact.py +152 -4
  34. pangea/services/sanitize.py +388 -0
  35. pangea/services/share/share.py +683 -107
  36. pangea/services/vault/models/asymmetric.py +120 -18
  37. pangea/services/vault/models/common.py +439 -141
  38. pangea/services/vault/models/keys.py +94 -0
  39. pangea/services/vault/models/secret.py +27 -3
  40. pangea/services/vault/models/symmetric.py +68 -22
  41. pangea/services/vault/vault.py +1690 -749
  42. pangea/tools.py +6 -7
  43. pangea/utils.py +16 -27
  44. pangea/verify_audit.py +270 -83
  45. {pangea_sdk-3.8.0b1.dist-info → pangea_sdk-5.3.0.dist-info}/METADATA +43 -35
  46. pangea_sdk-5.3.0.dist-info/RECORD +56 -0
  47. {pangea_sdk-3.8.0b1.dist-info → pangea_sdk-5.3.0.dist-info}/WHEEL +1 -1
  48. pangea_sdk-3.8.0b1.dist-info/RECORD +0 -50
@@ -1,35 +1,79 @@
1
1
  # Copyright 2022 Pangea Cyber Corporation
2
2
  # Author: Pangea Cyber Corporation
3
+ from __future__ import annotations
4
+
3
5
  import io
4
6
  from typing import Dict, List, Optional, Tuple, Union
5
7
 
6
8
  import pangea.services.share.share as m
7
- from .base import ServiceBaseAsync
9
+ from pangea.asyncio.services.base import ServiceBaseAsync
10
+ from pangea.config import PangeaConfig
8
11
  from pangea.response import PangeaResponse, TransferMethod
9
12
  from pangea.services.share.file_format import FileFormat
10
13
  from pangea.utils import get_file_size, get_file_upload_params
11
14
 
12
15
 
13
16
  class ShareAsync(ServiceBaseAsync):
14
- """Share service client."""
17
+ """Secure Share service client."""
15
18
 
16
19
  service_name = "share"
17
20
 
21
+ def __init__(
22
+ self, token: str, config: PangeaConfig | None = None, logger_name: str = "pangea", config_id: str | None = None
23
+ ) -> None:
24
+ """
25
+ Secure Share client
26
+
27
+ Initializes a new Secure Share client.
28
+
29
+ Args:
30
+ token: Pangea API token.
31
+ config: Configuration.
32
+ logger_name: Logger name.
33
+ config_id: Configuration ID.
34
+
35
+ Examples:
36
+ config = PangeaConfig(domain="aws.us.pangea.cloud")
37
+ authz = ShareAsync(token="pangea_token", config=config)
38
+ """
39
+
40
+ super().__init__(token, config, logger_name, config_id=config_id)
41
+
42
+ async def buckets(self) -> PangeaResponse[m.BucketsResult]:
43
+ """
44
+ Buckets
45
+
46
+ Get information on the accessible buckets.
47
+
48
+ OperationId: share_post_v1_buckets
49
+
50
+ Returns:
51
+ A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
52
+
53
+ Examples:
54
+ response = share.buckets()
55
+ """
56
+
57
+ return await self.request.post("v1/buckets", m.BucketsResult)
58
+
18
59
  async def delete(
19
- self, id: Optional[str] = None, path: Optional[str] = None, force: Optional[bool] = None
60
+ self,
61
+ id: Optional[str] = None,
62
+ force: Optional[bool] = None,
63
+ bucket_id: Optional[str] = None,
20
64
  ) -> PangeaResponse[m.DeleteResult]:
21
65
  """
22
66
  Delete
23
67
 
24
68
  Delete object by ID or path. If both are supplied, the path must match
25
- that of the object represented by the ID. Beta API.
69
+ that of the object represented by the ID.
26
70
 
27
- OperationId: share_post_v1beta_delete
71
+ OperationId: share_post_v1_delete
28
72
 
29
73
  Args:
30
74
  id (str, optional): The ID of the object to delete.
31
- path (str, optional): The path of the object to delete.
32
75
  force (bool, optional): If true, delete a folder even if it's not empty.
76
+ bucket_id (str, optional): The bucket to use, if not the default.
33
77
 
34
78
  Returns:
35
79
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -38,30 +82,45 @@ class ShareAsync(ServiceBaseAsync):
38
82
  response = await share.delete(id="pos_3djfmzg2db4c6donarecbyv5begtj2bm")
39
83
  """
40
84
 
41
- input = m.DeleteRequest(id=id, path=path, force=force)
42
- return await self.request.post("v1beta/delete", m.DeleteResult, data=input.dict(exclude_none=True))
85
+ input = m.DeleteRequest(id=id, force=force, bucket_id=bucket_id)
86
+ return await self.request.post("v1/delete", m.DeleteResult, data=input.model_dump(exclude_none=True))
43
87
 
44
88
  async def folder_create(
45
89
  self,
46
90
  name: Optional[str] = None,
47
91
  metadata: Optional[m.Metadata] = None,
48
92
  parent_id: Optional[str] = None,
49
- path: Optional[str] = None,
93
+ folder: Optional[str] = None,
50
94
  tags: Optional[m.Tags] = None,
95
+ bucket_id: Optional[str] = None,
96
+ *,
97
+ file_ttl: Optional[str] = None,
98
+ root_folder: Optional[str] = None,
99
+ root_id: Optional[str] = None,
100
+ tenant_id: Optional[str] = None,
51
101
  ) -> PangeaResponse[m.FolderCreateResult]:
52
102
  """
53
103
  Create a folder
54
104
 
55
- Create a folder, either by name or path and parent_id. Beta API.
105
+ Create a folder, either by name or path and parent_id.
56
106
 
57
- OperationId: share_post_v1beta_folder_create
107
+ OperationId: share_post_v1_folder_create
58
108
 
59
109
  Args:
60
110
  name (str, optional): The name of an object.
61
111
  metadata (Metadata, optional): A set of string-based key/value pairs used to provide additional data about an object.
62
112
  parent_id (str, optional): The ID of a stored object.
63
- path (str, optional): A case-sensitive path to an object. Contains a sequence of path segments delimited by the the / character. Any path ending in a / character refers to a folder.
113
+ folder (str, optional): The folder to place the folder in. Must
114
+ match `parent_id` if also set.
64
115
  tags (Tags, optional): A list of user-defined tags.
116
+ bucket_id (str, optional): The bucket to use, if not the default.
117
+ file_ttl: Duration until files within this folder are automatically
118
+ deleted.
119
+ root_folder: The path of a root folder to restrict the operation to. Must resolve to
120
+ `root_id` if also set.
121
+ root_id: The ID of a root folder to restrict the operation to. Must match
122
+ `root_folder` if also set.
123
+ tenant_id: A tenant to associate with this request.
65
124
 
66
125
  Returns:
67
126
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -73,29 +132,50 @@ class ShareAsync(ServiceBaseAsync):
73
132
  "priority": "medium",
74
133
  },
75
134
  parent_id="pos_3djfmzg2db4c6donarecbyv5begtj2bm",
76
- path="/",
135
+ folder="/",
77
136
  tags=["irs_2023", "personal"],
78
137
  )
79
138
  """
80
139
 
81
- input = m.FolderCreateRequest(name=name, metadata=metadata, parent_id=parent_id, path=path, tags=tags)
82
- return await self.request.post("v1beta/folder/create", m.FolderCreateResult, data=input.dict(exclude_none=True))
140
+ input = m.FolderCreateRequest(
141
+ name=name,
142
+ metadata=metadata,
143
+ parent_id=parent_id,
144
+ folder=folder,
145
+ tags=tags,
146
+ bucket_id=bucket_id,
147
+ file_ttl=file_ttl,
148
+ root_folder=root_folder,
149
+ root_id=root_id,
150
+ tenant_id=tenant_id,
151
+ )
152
+ return await self.request.post(
153
+ "v1/folder/create", m.FolderCreateResult, data=input.model_dump(exclude_none=True)
154
+ )
83
155
 
84
156
  async def get(
85
- self, id: Optional[str] = None, path: Optional[str] = None, transfer_method: Optional[TransferMethod] = None
157
+ self,
158
+ id: Optional[str] = None,
159
+ transfer_method: Optional[TransferMethod] = None,
160
+ bucket_id: Optional[str] = None,
161
+ password: Optional[str] = None,
162
+ *,
163
+ tenant_id: Optional[str] = None,
86
164
  ) -> PangeaResponse[m.GetResult]:
87
165
  """
88
166
  Get an object
89
167
 
90
168
  Get object. If both ID and Path are supplied, the call will fail if the
91
- target object doesn't match both properties. Beta API.
169
+ target object doesn't match both properties.
92
170
 
93
- OperationId: share_post_v1beta_get
171
+ OperationId: share_post_v1_get
94
172
 
95
173
  Args:
96
174
  id (str, optional): The ID of the object to retrieve.
97
- path (str, optional): The path of the object to retrieve.
98
175
  transfer_method (TransferMethod, optional): The requested transfer method for the file data.
176
+ bucket_id (str, optional): The bucket to use, if not the default.
177
+ password (str, optional): If the file was protected with a password, the password to decrypt with.
178
+ tenant_id: A tenant to associate with this request.
99
179
 
100
180
  Returns:
101
181
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -103,34 +183,34 @@ class ShareAsync(ServiceBaseAsync):
103
183
  Examples:
104
184
  response = await share.get(
105
185
  id="pos_3djfmzg2db4c6donarecbyv5begtj2bm",
106
- path="/",
186
+ folder="/",
107
187
  )
108
188
  """
109
189
 
110
190
  input = m.GetRequest(
111
- id=id,
112
- path=path,
113
- transfer_method=transfer_method,
191
+ id=id, transfer_method=transfer_method, bucket_id=bucket_id, password=password, tenant_id=tenant_id
114
192
  )
115
- return await self.request.post("v1beta/get", m.GetResult, data=input.dict(exclude_none=True))
193
+ return await self.request.post("v1/get", m.GetResult, data=input.model_dump(exclude_none=True))
116
194
 
117
195
  async def get_archive(
118
196
  self,
119
197
  ids: List[str] = [],
120
198
  format: Optional[m.ArchiveFormat] = None,
121
199
  transfer_method: Optional[TransferMethod] = None,
200
+ bucket_id: Optional[str] = None,
122
201
  ) -> PangeaResponse[m.GetArchiveResult]:
123
202
  """
124
203
  Get archive
125
204
 
126
- Get an archive file of multiple objects. Beta API.
205
+ Get an archive file of multiple objects.
127
206
 
128
- OperationId: share_post_v1beta_get_archive
207
+ OperationId: share_post_v1_get_archive
129
208
 
130
209
  Args:
131
210
  ids (List[str]): The IDs of the objects to include in the archive. Folders include all children.
132
211
  format (ArchiveFormat, optional): The format to use for the built archive.
133
212
  transfer_method (TransferMethod, optional): The requested transfer method for the file data.
213
+ bucket_id (str, optional): The bucket to use, if not the default.
134
214
 
135
215
  Returns:
136
216
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -148,8 +228,8 @@ class ShareAsync(ServiceBaseAsync):
148
228
  ):
149
229
  raise ValueError(f"Only {TransferMethod.DEST_URL} and {TransferMethod.MULTIPART} are supported")
150
230
 
151
- input = m.GetArchiveRequest(ids=ids, format=format, transfer_method=transfer_method)
152
- return await self.request.post("v1beta/get_archive", m.GetArchiveResult, data=input.dict(exclude_none=True))
231
+ input = m.GetArchiveRequest(ids=ids, format=format, transfer_method=transfer_method, bucket_id=bucket_id)
232
+ return await self.request.post("v1/get_archive", m.GetArchiveResult, data=input.model_dump(exclude_none=True))
153
233
 
154
234
  async def list(
155
235
  self,
@@ -158,13 +238,14 @@ class ShareAsync(ServiceBaseAsync):
158
238
  order: Optional[m.ItemOrder] = None,
159
239
  order_by: Optional[m.ItemOrderBy] = None,
160
240
  size: Optional[int] = None,
241
+ bucket_id: Optional[str] = None,
161
242
  ) -> PangeaResponse[m.ListResult]:
162
243
  """
163
244
  List
164
245
 
165
- List or filter/search records. Beta API.
246
+ List or filter/search records.
166
247
 
167
- OperationId: share_post_v1beta_list
248
+ OperationId: share_post_v1_list
168
249
 
169
250
  Args:
170
251
  filter (Union[Dict[str, str], FilterList], optional):
@@ -172,6 +253,7 @@ class ShareAsync(ServiceBaseAsync):
172
253
  order (ItemOrder, optional): Order results asc(ending) or desc(ending).
173
254
  order_by (ItemOrderBy, optional): Which field to order results by.
174
255
  size (int, optional): Maximum results to include in the response.
256
+ bucket_id (str, optional): The bucket to use, if not the default.
175
257
 
176
258
  Returns:
177
259
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -180,14 +262,14 @@ class ShareAsync(ServiceBaseAsync):
180
262
  response = await share.list()
181
263
  """
182
264
 
183
- input = m.ListRequest(filter=filter, last=last, order=order, order_by=order_by, size=size)
184
- return await self.request.post("v1beta/list", m.ListResult, data=input.dict(exclude_none=True))
265
+ input = m.ListRequest(filter=filter, last=last, order=order, order_by=order_by, size=size, bucket_id=bucket_id)
266
+ return await self.request.post("v1/list", m.ListResult, data=input.model_dump(exclude_none=True))
185
267
 
186
268
  async def put(
187
269
  self,
188
270
  file: io.BufferedReader,
189
271
  name: Optional[str] = None,
190
- path: Optional[str] = None,
272
+ folder: Optional[str] = None,
191
273
  format: Optional[FileFormat] = None,
192
274
  metadata: Optional[m.Metadata] = None,
193
275
  mimetype: Optional[str] = None,
@@ -200,18 +282,27 @@ class ShareAsync(ServiceBaseAsync):
200
282
  sha256: Optional[str] = None,
201
283
  sha512: Optional[str] = None,
202
284
  size: Optional[int] = None,
285
+ bucket_id: Optional[str] = None,
286
+ password: Optional[str] = None,
287
+ password_algorithm: Optional[str] = None,
288
+ *,
289
+ file_ttl: Optional[str] = None,
290
+ root_folder: Optional[str] = None,
291
+ root_id: Optional[str] = None,
292
+ tenant_id: Optional[str] = None,
203
293
  ) -> PangeaResponse[m.PutResult]:
204
294
  """
205
295
  Upload a file
206
296
 
207
- Upload a file. Beta API.
297
+ Upload a file.
208
298
 
209
- OperationId: share_post_v1beta_put
299
+ OperationId: share_post_v1_put
210
300
 
211
301
  Args:
212
302
  file (io.BufferedReader):
213
303
  name (str, optional): The name of the object to store.
214
- path (str, optional): An optional path where the file should be placed. Will auto-create directories if necessary.
304
+ folder (str, optional): The path to the parent folder. Leave blank
305
+ for the root folder. Path must resolve to `parent_id` if also set.
215
306
  format (FileFormat, optional): The format of the file, which will be verified by the server if provided. Uploads not matching the supplied format will be rejected.
216
307
  metadata (Metadata, optional): A set of string-based key/value pairs used to provide additional data about an object.
217
308
  mimetype (str, optional): The MIME type of the file, which will be verified by the server if provided. Uploads not matching the supplied MIME type will be rejected.
@@ -224,6 +315,15 @@ class ShareAsync(ServiceBaseAsync):
224
315
  sha256 (str, optional): The SHA256 hash of the file data, which will be verified by the server if provided.
225
316
  sha512 (str, optional): The hexadecimal-encoded SHA512 hash of the file data, which will be verified by the server if provided.
226
317
  size (str, optional): The size (in bytes) of the file. If the upload doesn't match, the call will fail.
318
+ bucket_id (str, optional): The bucket to use, if not the default.
319
+ password (str, optional): An optional password to protect the file with. Downloading the file will require this password.
320
+ password_algorithm (str, optional): An optional password algorithm to protect the file with. See symmetric vault password_algorithm.
321
+ file_ttl: The TTL before expiry for the file.
322
+ root_folder: The path of a root folder to restrict the operation to.
323
+ Must resolve to `root_id` if also set.
324
+ root_id: The ID of a root folder to restrict the operation to. Must
325
+ match `root_folder` if also set.
326
+ tenant_id: A tenant to associate with this request.
227
327
 
228
328
  Returns:
229
329
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -256,7 +356,7 @@ class ShareAsync(ServiceBaseAsync):
256
356
  metadata=metadata,
257
357
  mimetype=mimetype,
258
358
  parent_id=parent_id,
259
- path=path,
359
+ folder=folder,
260
360
  tags=tags,
261
361
  transfer_method=transfer_method,
262
362
  crc32c=crc32c,
@@ -265,14 +365,21 @@ class ShareAsync(ServiceBaseAsync):
265
365
  sha256=sha256,
266
366
  sha512=sha512,
267
367
  size=size,
368
+ bucket_id=bucket_id,
369
+ password=password,
370
+ password_algorithm=password_algorithm,
371
+ file_ttl=file_ttl,
372
+ root_folder=root_folder,
373
+ root_id=root_id,
374
+ tenant_id=tenant_id,
268
375
  )
269
- data = input.dict(exclude_none=True)
270
- return await self.request.post("v1beta/put", m.PutResult, data=data, files=files)
376
+ data = input.model_dump(exclude_none=True)
377
+ return await self.request.post("v1/put", m.PutResult, data=data, files=files)
271
378
 
272
379
  async def request_upload_url(
273
380
  self,
274
381
  name: Optional[str] = None,
275
- path: Optional[str] = None,
382
+ folder: Optional[str] = None,
276
383
  format: Optional[FileFormat] = None,
277
384
  metadata: Optional[m.Metadata] = None,
278
385
  mimetype: Optional[str] = None,
@@ -285,17 +392,26 @@ class ShareAsync(ServiceBaseAsync):
285
392
  crc32c: Optional[str] = None,
286
393
  sha256: Optional[str] = None,
287
394
  size: Optional[int] = None,
395
+ bucket_id: Optional[str] = None,
396
+ *,
397
+ password: Optional[str] = None,
398
+ password_algorithm: Optional[str] = None,
399
+ file_ttl: Optional[str] = None,
400
+ root_folder: Optional[str] = None,
401
+ root_id: Optional[str] = None,
402
+ tenant_id: Optional[str] = None,
288
403
  ) -> PangeaResponse[m.PutResult]:
289
404
  """
290
405
  Request upload URL
291
406
 
292
- Request an upload URL. Beta API.
407
+ Request an upload URL.
293
408
 
294
- OperationId: share_post_v1beta_put 2
409
+ OperationId: share_post_v1_put 2
295
410
 
296
411
  Args:
297
412
  name (str, optional): The name of the object to store.
298
- path (str, optional): An optional path where the file should be placed. Will auto-create directories if necessary.
413
+ folder (str, optional): The path to the parent folder. Leave blank
414
+ for the root folder. Path must resolve to `parent_id` if also set.
299
415
  format (FileFormat, optional): The format of the file, which will be verified by the server if provided. Uploads not matching the supplied format will be rejected.
300
416
  metadata (Metadata, optional): A set of string-based key/value pairs used to provide additional data about an object.
301
417
  mimetype (str, optional): The MIME type of the file, which will be verified by the server if provided. Uploads not matching the supplied MIME type will be rejected.
@@ -308,6 +424,17 @@ class ShareAsync(ServiceBaseAsync):
308
424
  crc32c (str, optional): The hexadecimal-encoded CRC32C hash of the file data, which will be verified by the server if provided.
309
425
  sha256 (str, optional): The SHA256 hash of the file data, which will be verified by the server if provided.
310
426
  size (str, optional): The size (in bytes) of the file. If the upload doesn't match, the call will fail.
427
+ bucket_id (str, optional): The bucket to use, if not the default.
428
+ password: An optional password to protect the file with. Downloading
429
+ the file will require this password.
430
+ password_algorithm: An optional password algorithm to protect the
431
+ file with. See symmetric vault password_algorithm.
432
+ file_ttl: The TTL before expiry for the file.
433
+ root_folder: The path of a root folder to restrict the operation to.
434
+ Must resolve to `root_id` if also set.
435
+ root_id: The ID of a root folder to restrict the operation to. Must
436
+ match `root_folder` if also set.
437
+ tenant_id: A tenant to associate with this request.
311
438
 
312
439
  Returns:
313
440
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -323,7 +450,7 @@ class ShareAsync(ServiceBaseAsync):
323
450
  "priority": "medium",
324
451
  },
325
452
  parent_id="pos_3djfmzg2db4c6donarecbyv5begtj2bm",
326
- path="/",
453
+ folder="/",
327
454
  tags=["irs_2023", "personal"],
328
455
  )
329
456
  """
@@ -334,7 +461,7 @@ class ShareAsync(ServiceBaseAsync):
334
461
  metadata=metadata,
335
462
  mimetype=mimetype,
336
463
  parent_id=parent_id,
337
- path=path,
464
+ folder=folder,
338
465
  tags=tags,
339
466
  transfer_method=transfer_method,
340
467
  crc32c=crc32c,
@@ -343,15 +470,22 @@ class ShareAsync(ServiceBaseAsync):
343
470
  sha256=sha256,
344
471
  sha512=sha512,
345
472
  size=size,
473
+ bucket_id=bucket_id,
474
+ password=password,
475
+ password_algorithm=password_algorithm,
476
+ file_ttl=file_ttl,
477
+ root_folder=root_folder,
478
+ root_id=root_id,
479
+ tenant_id=tenant_id,
346
480
  )
347
481
 
348
- data = input.dict(exclude_none=True)
349
- return await self.request.request_presigned_url("v1beta/put", m.PutResult, data=data)
482
+ data = input.model_dump(exclude_none=True)
483
+ return await self.request.request_presigned_url("v1/put", m.PutResult, data=data)
350
484
 
351
485
  async def update(
352
486
  self,
353
487
  id: Optional[str] = None,
354
- path: Optional[str] = None,
488
+ folder: Optional[str] = None,
355
489
  add_metadata: Optional[m.Metadata] = None,
356
490
  remove_metadata: Optional[m.Metadata] = None,
357
491
  metadata: Optional[m.Metadata] = None,
@@ -360,17 +494,27 @@ class ShareAsync(ServiceBaseAsync):
360
494
  tags: Optional[m.Tags] = None,
361
495
  parent_id: Optional[str] = None,
362
496
  updated_at: Optional[str] = None,
497
+ bucket_id: Optional[str] = None,
498
+ *,
499
+ add_password: Optional[str] = None,
500
+ add_password_algorithm: Optional[str] = None,
501
+ remove_password: Optional[str] = None,
502
+ file_ttl: Optional[str] = None,
503
+ root_folder: Optional[str] = None,
504
+ root_id: Optional[str] = None,
505
+ tenant_id: Optional[str] = None,
363
506
  ) -> PangeaResponse[m.UpdateResult]:
364
507
  """
365
508
  Update a file
366
509
 
367
- Update a file. Beta API.
510
+ Update a file.
368
511
 
369
- OperationId: share_post_v1beta_update
512
+ OperationId: share_post_v1_update
370
513
 
371
514
  Args:
372
515
  id (str, optional): An identifier for the file to update.
373
- path (str, optional): An alternative to ID for providing the target file.
516
+ folder (str, optional): Set the parent (folder). Leave blank for the
517
+ root folder. Path must resolve to `parent_id` if also set.
374
518
  add_metadata (Metadata, optional): A list of Metadata key/values to set in the object. If a provided key exists, the value will be replaced.
375
519
  remove_metadata (Metadata, optional): A list of Metadata key/values to remove in the object. It is not an error for a provided key to not exist. If a provided key exists but doesn't match the provided value, it will not be removed.
376
520
  metadata (Metadata, optional): Set the object's Metadata.
@@ -379,6 +523,17 @@ class ShareAsync(ServiceBaseAsync):
379
523
  tags (Tags, optional): Set the object's Tags.
380
524
  parent_id (str, optional): Set the parent (folder) of the object.
381
525
  updated_at (str, optional): The date and time the object was last updated. If included, the update will fail if this doesn't match what's stored.
526
+ bucket_id (str, optional): The bucket to use, if not the default.
527
+ add_password: Protect the file with the supplied password.
528
+ add_password_algorithm: The algorithm to use to password protect the
529
+ file.
530
+ remove_password: Remove the supplied password from the file.
531
+ file_ttl: Set the file TTL.
532
+ root_folder: The path of a root folder to restrict the operation to.
533
+ Must resolve to `root_id` if also set.
534
+ root_id: The ID of a root folder to restrict the operation to. Must
535
+ match `root_folder` if also set.
536
+ tenant_id: A tenant to associate with this request.
382
537
 
383
538
  Returns:
384
539
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -396,7 +551,7 @@ class ShareAsync(ServiceBaseAsync):
396
551
 
397
552
  input = m.UpdateRequest(
398
553
  id=id,
399
- path=path,
554
+ folder=folder,
400
555
  add_metadata=add_metadata,
401
556
  remove_metadata=remove_metadata,
402
557
  metadata=metadata,
@@ -405,19 +560,30 @@ class ShareAsync(ServiceBaseAsync):
405
560
  tags=tags,
406
561
  parent_id=parent_id,
407
562
  updated_at=updated_at,
563
+ bucket_id=bucket_id,
564
+ add_password=add_password,
565
+ add_password_algorithm=add_password_algorithm,
566
+ remove_password=remove_password,
567
+ file_ttl=file_ttl,
568
+ root_folder=root_folder,
569
+ root_id=root_id,
570
+ tenant_id=tenant_id,
408
571
  )
409
- return await self.request.post("v1beta/update", m.UpdateResult, data=input.dict(exclude_none=True))
572
+ return await self.request.post("v1/update", m.UpdateResult, data=input.model_dump(exclude_none=True))
410
573
 
411
- async def share_link_create(self, links: List[m.ShareLinkCreateItem]) -> PangeaResponse[m.ShareLinkCreateResult]:
574
+ async def share_link_create(
575
+ self, links: List[m.ShareLinkCreateItem], bucket_id: Optional[str] = None
576
+ ) -> PangeaResponse[m.ShareLinkCreateResult]:
412
577
  """
413
578
  Create share links
414
579
 
415
- Create a share link. Beta API.
580
+ Create a share link.
416
581
 
417
- OperationId: share_post_v1beta_share_link_create
582
+ OperationId: share_post_v1_share_link_create
418
583
 
419
584
  Args:
420
585
  links (List[ShareLinkCreateItem]):
586
+ bucket_id (str, optional): The bucket to use, if not the default.
421
587
 
422
588
  Returns:
423
589
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -439,18 +605,18 @@ class ShareAsync(ServiceBaseAsync):
439
605
  )
440
606
  """
441
607
 
442
- input = m.ShareLinkCreateRequest(links=links)
608
+ input = m.ShareLinkCreateRequest(links=links, bucket_id=bucket_id)
443
609
  return await self.request.post(
444
- "v1beta/share/link/create", m.ShareLinkCreateResult, data=input.dict(exclude_none=True)
610
+ "v1/share/link/create", m.ShareLinkCreateResult, data=input.model_dump(exclude_none=True)
445
611
  )
446
612
 
447
613
  async def share_link_get(self, id: str) -> PangeaResponse[m.ShareLinkGetResult]:
448
614
  """
449
615
  Get share link
450
616
 
451
- Get a share link. Beta API.
617
+ Get a share link.
452
618
 
453
- OperationId: share_post_v1beta_share_link_get
619
+ OperationId: share_post_v1_share_link_get
454
620
 
455
621
  Args:
456
622
  id (str, optional): The ID of a share link.
@@ -466,7 +632,7 @@ class ShareAsync(ServiceBaseAsync):
466
632
 
467
633
  input = m.ShareLinkGetRequest(id=id)
468
634
  return await self.request.post(
469
- "v1beta/share/link/get", m.ShareLinkGetResult, data=input.dict(exclude_none=True)
635
+ "v1/share/link/get", m.ShareLinkGetResult, data=input.model_dump(exclude_none=True)
470
636
  )
471
637
 
472
638
  async def share_link_list(
@@ -476,13 +642,14 @@ class ShareAsync(ServiceBaseAsync):
476
642
  order: Optional[m.ItemOrder] = None,
477
643
  order_by: Optional[m.ShareLinkOrderBy] = None,
478
644
  size: Optional[int] = None,
645
+ bucket_id: Optional[str] = None,
479
646
  ) -> PangeaResponse[m.ShareLinkListResult]:
480
647
  """
481
648
  List share links
482
649
 
483
- Look up share links by filter options. Beta API.
650
+ Look up share links by filter options.
484
651
 
485
- OperationId: share_post_v1beta_share_link_list
652
+ OperationId: share_post_v1_share_link_list
486
653
 
487
654
  Args:
488
655
  filter (Union[Dict[str, str], ShareLinkListFilter], optional):
@@ -490,6 +657,7 @@ class ShareAsync(ServiceBaseAsync):
490
657
  order (ItemOrder, optional): Order results asc(ending) or desc(ending).
491
658
  order_by (ItemOrderBy, optional): Which field to order results by.
492
659
  size (int, optional): Maximum results to include in the response.
660
+ bucket_id (str, optional): The bucket to use, if not the default.
493
661
 
494
662
  Returns:
495
663
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -498,21 +666,26 @@ class ShareAsync(ServiceBaseAsync):
498
666
  response = await share.share_link_list()
499
667
  """
500
668
 
501
- input = m.ShareLinkListRequest(filter=filter, last=last, order=order, order_by=order_by, size=size)
669
+ input = m.ShareLinkListRequest(
670
+ filter=filter, last=last, order=order, order_by=order_by, size=size, bucket_id=bucket_id
671
+ )
502
672
  return await self.request.post(
503
- "v1beta/share/link/list", m.ShareLinkListResult, data=input.dict(exclude_none=True)
673
+ "v1/share/link/list", m.ShareLinkListResult, data=input.model_dump(exclude_none=True)
504
674
  )
505
675
 
506
- async def share_link_delete(self, ids: List[str]) -> PangeaResponse[m.ShareLinkDeleteResult]:
676
+ async def share_link_delete(
677
+ self, ids: List[str], bucket_id: Optional[str] = None
678
+ ) -> PangeaResponse[m.ShareLinkDeleteResult]:
507
679
  """
508
680
  Delete share links
509
681
 
510
- Delete share links. Beta API.
682
+ Delete share links.
511
683
 
512
- OperationId: share_post_v1beta_share_link_delete
684
+ OperationId: share_post_v1_share_link_delete
513
685
 
514
686
  Args:
515
687
  ids (List[str]): list of the share link's id to delete
688
+ bucket_id (str, optional): The bucket to use, if not the default.
516
689
 
517
690
  Returns:
518
691
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -523,9 +696,9 @@ class ShareAsync(ServiceBaseAsync):
523
696
  )
524
697
  """
525
698
 
526
- input = m.ShareLinkDeleteRequest(ids=ids)
699
+ input = m.ShareLinkDeleteRequest(ids=ids, bucket_id=bucket_id)
527
700
  return await self.request.post(
528
- "v1beta/share/link/delete", m.ShareLinkDeleteResult, data=input.dict(exclude_none=True)
701
+ "v1/share/link/delete", m.ShareLinkDeleteResult, data=input.model_dump(exclude_none=True)
529
702
  )
530
703
 
531
704
  async def share_link_send(
@@ -537,9 +710,9 @@ class ShareAsync(ServiceBaseAsync):
537
710
  Send a secure share-link notification to a set of email addresses. The
538
711
  notification email will contain an Open button that the recipient can
539
712
  use to follow the secured share-link to authenticate and then access the
540
- shared content. Beta API.
713
+ shared content.
541
714
 
542
- OperationId: share_post_v1beta_share_link_send
715
+ OperationId: share_post_v1_share_link_send
543
716
 
544
717
  Args:
545
718
  sender_email: An email address.
@@ -556,5 +729,5 @@ class ShareAsync(ServiceBaseAsync):
556
729
 
557
730
  input = m.ShareLinkSendRequest(links=links, sender_email=sender_email, sender_name=sender_name)
558
731
  return await self.request.post(
559
- "v1beta/share/link/send", m.ShareLinkSendResult, data=input.dict(exclude_none=True)
732
+ "v1/share/link/send", m.ShareLinkSendResult, data=input.model_dump(exclude_none=True)
560
733
  )