pangea-sdk 5.2.1__py3-none-any.whl → 5.4.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.
pangea/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "5.2.1"
1
+ __version__ = "5.4.0"
2
2
 
3
3
  from pangea.asyncio.request import PangeaRequestAsync
4
4
  from pangea.config import PangeaConfig
@@ -361,7 +361,7 @@ class IpIntelAsync(ServiceBaseAsync):
361
361
  ip (str): The IP to be looked up
362
362
  verbose (bool, optional): Echo the API parameters in the response
363
363
  raw (bool, optional): Include raw data from this provider
364
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
364
+ provider (str, optional): Use reputation data from this provider
365
365
 
366
366
  Raises:
367
367
  PangeaAPIException: If an API Error happens
@@ -393,7 +393,7 @@ class IpIntelAsync(ServiceBaseAsync):
393
393
  ips (List[str]): The IP list to be looked up
394
394
  verbose (bool, optional): Echo the API parameters in the response
395
395
  raw (bool, optional): Include raw data from this provider
396
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
396
+ provider (str, optional): Use reputation data from this provider
397
397
 
398
398
  Raises:
399
399
  PangeaAPIException: If an API Error happens
@@ -697,7 +697,7 @@ class UrlIntelAsync(ServiceBaseAsync):
697
697
  url (str): The URL to be looked up
698
698
  verbose (bool, optional): Echo the API parameters in the response
699
699
  raw (bool, optional): Include raw data from this provider
700
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
700
+ provider (str, optional): Use reputation data from this provider
701
701
 
702
702
  Raises:
703
703
  PangeaAPIException: If an API Error happens
@@ -734,7 +734,7 @@ class UrlIntelAsync(ServiceBaseAsync):
734
734
  urls (List[str]): The URL list to be looked up
735
735
  verbose (bool, optional): Echo the API parameters in the response
736
736
  raw (bool, optional): Include raw data from this provider
737
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
737
+ provider (str, optional): Use reputation data from this provider
738
738
 
739
739
  Raises:
740
740
  PangeaAPIException: If an API Error happens
@@ -808,7 +808,7 @@ class UserIntelAsync(ServiceBaseAsync):
808
808
  end (str): Latest date for search
809
809
  verbose (bool, optional): Echo the API parameters in the response
810
810
  raw (bool, optional): Include raw data from this provider
811
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
811
+ provider (str, optional): Use reputation data from this provider
812
812
  cursor (str, optional): A token given in the raw response from SpyCloud. Post this back to paginate results
813
813
 
814
814
  Raises:
@@ -873,7 +873,7 @@ class UserIntelAsync(ServiceBaseAsync):
873
873
  end (str): Latest date for search
874
874
  verbose (bool, optional): Echo the API parameters in the response
875
875
  raw (bool, optional): Include raw data from this provider
876
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
876
+ provider (str, optional): Use reputation data from this provider
877
877
 
878
878
  Raises:
879
879
  PangeaAPIException: If an API Error happens
@@ -922,7 +922,7 @@ class UserIntelAsync(ServiceBaseAsync):
922
922
  hash_prefix (str): The prefix of the hash to be looked up.
923
923
  verbose (bool, optional): Echo the API parameters in the response
924
924
  raw (bool, optional): Include raw data from this provider
925
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
925
+ provider (str, optional): Use reputation data from this provider
926
926
 
927
927
  Raises:
928
928
  PangeaAPIException: If an API Error happens
@@ -966,7 +966,7 @@ class UserIntelAsync(ServiceBaseAsync):
966
966
  hash_prefixes (List[str]): The list of prefixes of the hash to be looked up.
967
967
  verbose (bool, optional): Echo the API parameters in the response
968
968
  raw (bool, optional): Include raw data from this provider
969
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
969
+ provider (str, optional): Use reputation data from this provider
970
970
 
971
971
  Raises:
972
972
  PangeaAPIException: If an API Error happens
@@ -985,3 +985,53 @@ class UserIntelAsync(ServiceBaseAsync):
985
985
  return await self.request.post(
986
986
  "v2/password/breached", m.UserPasswordBreachedBulkResult, data=input.model_dump(exclude_none=True)
987
987
  )
988
+
989
+ async def breach(
990
+ self,
991
+ breach_id: str,
992
+ verbose: Optional[bool] = None,
993
+ provider: Optional[str] = None,
994
+ cursor: Optional[str] = None,
995
+ start: Optional[str] = None,
996
+ end: Optional[str] = None,
997
+ severity: Optional[List[int]] = None,
998
+ ) -> PangeaResponse[m.BreachResult]:
999
+ """
1000
+ Look up information about a specific breach
1001
+
1002
+ Given a provider specific breach ID, find details about the breach.
1003
+
1004
+ OperationId: user_intel_post_v1_breach
1005
+
1006
+ Args:
1007
+ breach_id (str, optional): The ID of a breach returned by a provider
1008
+ verbose (bool, optional): Echo the API parameters in the response
1009
+ provider (str, optional): Use reputation data from this provider
1010
+ cursor (str, optional): A token given in the raw response from SpyCloud. Post this back to paginate results
1011
+ start (str, optional): This parameter allows you to define the starting point for a date range query on the spycloud_publish_date field
1012
+ end (str, optional): This parameter allows you to define the ending point for a date range query on the spycloud_publish_date field
1013
+ severity (List[int], optional): Filter for records that match one of the given severities
1014
+
1015
+ Raises:
1016
+ PangeaAPIException: If an API Error happens
1017
+
1018
+ Returns:
1019
+ A PangeaResponse where the breach details are in the
1020
+ response.result field. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/user-intel)
1021
+
1022
+ Examples:
1023
+ response = await user_intel.breach(
1024
+ breach_id="66111",
1025
+ )
1026
+ """
1027
+
1028
+ input = m.BreachRequest(
1029
+ breach_id=breach_id,
1030
+ provider=provider,
1031
+ verbose=verbose,
1032
+ cursor=cursor,
1033
+ start=start,
1034
+ end=end,
1035
+ severity=severity,
1036
+ )
1037
+ return await self.request.post("v1/breach", m.BreachResult, data=input.model_dump(exclude_none=True))
@@ -97,7 +97,7 @@ class SanitizeAsync(ServiceBaseAsync):
97
97
  performed.
98
98
 
99
99
  Examples:
100
- with open("/path/to/file.pdf", "rb") as f:
100
+ with open("/path/to/file.txt", "rb") as f:
101
101
  response = await sanitize.sanitize(
102
102
  file=f,
103
103
  transfer_method=TransferMethod.POST_URL,
@@ -93,6 +93,11 @@ class ShareAsync(ServiceBaseAsync):
93
93
  folder: Optional[str] = None,
94
94
  tags: Optional[m.Tags] = None,
95
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,
96
101
  ) -> PangeaResponse[m.FolderCreateResult]:
97
102
  """
98
103
  Create a folder
@@ -109,6 +114,13 @@ class ShareAsync(ServiceBaseAsync):
109
114
  match `parent_id` if also set.
110
115
  tags (Tags, optional): A list of user-defined tags.
111
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.
112
124
 
113
125
  Returns:
114
126
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -126,7 +138,16 @@ class ShareAsync(ServiceBaseAsync):
126
138
  """
127
139
 
128
140
  input = m.FolderCreateRequest(
129
- name=name, metadata=metadata, parent_id=parent_id, folder=folder, tags=tags, bucket_id=bucket_id
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,
130
151
  )
131
152
  return await self.request.post(
132
153
  "v1/folder/create", m.FolderCreateResult, data=input.model_dump(exclude_none=True)
@@ -138,6 +159,8 @@ class ShareAsync(ServiceBaseAsync):
138
159
  transfer_method: Optional[TransferMethod] = None,
139
160
  bucket_id: Optional[str] = None,
140
161
  password: Optional[str] = None,
162
+ *,
163
+ tenant_id: Optional[str] = None,
141
164
  ) -> PangeaResponse[m.GetResult]:
142
165
  """
143
166
  Get an object
@@ -152,6 +175,7 @@ class ShareAsync(ServiceBaseAsync):
152
175
  transfer_method (TransferMethod, optional): The requested transfer method for the file data.
153
176
  bucket_id (str, optional): The bucket to use, if not the default.
154
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.
155
179
 
156
180
  Returns:
157
181
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -163,7 +187,9 @@ class ShareAsync(ServiceBaseAsync):
163
187
  )
164
188
  """
165
189
 
166
- input = m.GetRequest(id=id, transfer_method=transfer_method, bucket_id=bucket_id, password=password)
190
+ input = m.GetRequest(
191
+ id=id, transfer_method=transfer_method, bucket_id=bucket_id, password=password, tenant_id=tenant_id
192
+ )
167
193
  return await self.request.post("v1/get", m.GetResult, data=input.model_dump(exclude_none=True))
168
194
 
169
195
  async def get_archive(
@@ -259,6 +285,11 @@ class ShareAsync(ServiceBaseAsync):
259
285
  bucket_id: Optional[str] = None,
260
286
  password: Optional[str] = None,
261
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,
262
293
  ) -> PangeaResponse[m.PutResult]:
263
294
  """
264
295
  Upload a file
@@ -287,6 +318,13 @@ class ShareAsync(ServiceBaseAsync):
287
318
  bucket_id (str, optional): The bucket to use, if not the default.
288
319
  password (str, optional): An optional password to protect the file with. Downloading the file will require this password.
289
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.
327
+
290
328
  Returns:
291
329
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
292
330
 
@@ -330,6 +368,10 @@ class ShareAsync(ServiceBaseAsync):
330
368
  bucket_id=bucket_id,
331
369
  password=password,
332
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,
333
375
  )
334
376
  data = input.model_dump(exclude_none=True)
335
377
  return await self.request.post("v1/put", m.PutResult, data=data, files=files)
@@ -351,6 +393,13 @@ class ShareAsync(ServiceBaseAsync):
351
393
  sha256: Optional[str] = None,
352
394
  size: Optional[int] = None,
353
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,
354
403
  ) -> PangeaResponse[m.PutResult]:
355
404
  """
356
405
  Request upload URL
@@ -376,6 +425,16 @@ class ShareAsync(ServiceBaseAsync):
376
425
  sha256 (str, optional): The SHA256 hash of the file data, which will be verified by the server if provided.
377
426
  size (str, optional): The size (in bytes) of the file. If the upload doesn't match, the call will fail.
378
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.
379
438
 
380
439
  Returns:
381
440
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -412,6 +471,12 @@ class ShareAsync(ServiceBaseAsync):
412
471
  sha512=sha512,
413
472
  size=size,
414
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,
415
480
  )
416
481
 
417
482
  data = input.model_dump(exclude_none=True)
@@ -430,6 +495,14 @@ class ShareAsync(ServiceBaseAsync):
430
495
  parent_id: Optional[str] = None,
431
496
  updated_at: Optional[str] = None,
432
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,
433
506
  ) -> PangeaResponse[m.UpdateResult]:
434
507
  """
435
508
  Update a file
@@ -451,6 +524,16 @@ class ShareAsync(ServiceBaseAsync):
451
524
  parent_id (str, optional): Set the parent (folder) of the object.
452
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.
453
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.
454
537
 
455
538
  Returns:
456
539
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -478,6 +561,13 @@ class ShareAsync(ServiceBaseAsync):
478
561
  parent_id=parent_id,
479
562
  updated_at=updated_at,
480
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,
481
571
  )
482
572
  return await self.request.post("v1/update", m.UpdateResult, data=input.model_dump(exclude_none=True))
483
573
 
pangea/services/intel.py CHANGED
@@ -821,7 +821,7 @@ class IpIntel(ServiceBase):
821
821
  ip (str): The IP to be looked up
822
822
  verbose (bool, optional): Echo the API parameters in the response
823
823
  raw (bool, optional): Include raw data from this provider
824
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
824
+ provider (str, optional): Use reputation data from this provider
825
825
 
826
826
  Raises:
827
827
  PangeaAPIException: If an API Error happens
@@ -853,7 +853,7 @@ class IpIntel(ServiceBase):
853
853
  ips (List[str]): The IP list to be looked up
854
854
  verbose (bool, optional): Echo the API parameters in the response
855
855
  raw (bool, optional): Include raw data from this provider
856
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
856
+ provider (str, optional): Use reputation data from this provider
857
857
 
858
858
  Raises:
859
859
  PangeaAPIException: If an API Error happens
@@ -1172,7 +1172,7 @@ class UrlIntel(ServiceBase):
1172
1172
  url (str): The URL to be looked up
1173
1173
  verbose (bool, optional): Echo the API parameters in the response
1174
1174
  raw (bool, optional): Include raw data from this provider
1175
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
1175
+ provider (str, optional): Use reputation data from this provider
1176
1176
 
1177
1177
  Raises:
1178
1178
  PangeaAPIException: If an API Error happens
@@ -1209,7 +1209,7 @@ class UrlIntel(ServiceBase):
1209
1209
  urls (List[str]): The URL list to be looked up
1210
1210
  verbose (bool, optional): Echo the API parameters in the response
1211
1211
  raw (bool, optional): Include raw data from this provider
1212
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
1212
+ provider (str, optional): Use reputation data from this provider
1213
1213
 
1214
1214
  Raises:
1215
1215
  PangeaAPIException: If an API Error happens
@@ -1250,6 +1250,9 @@ class UserBreachedRequest(IntelCommonRequest):
1250
1250
  end: Optional[str] = None
1251
1251
  cursor: Optional[str] = None
1252
1252
 
1253
+ severity: Optional[List[int]] = None
1254
+ """Filter for records that match one of the given severities"""
1255
+
1253
1256
 
1254
1257
  class UserBreachedBulkRequest(IntelCommonRequest):
1255
1258
  """
@@ -1272,6 +1275,9 @@ class UserBreachedBulkRequest(IntelCommonRequest):
1272
1275
  start: Optional[str] = None
1273
1276
  end: Optional[str] = None
1274
1277
 
1278
+ severity: Optional[List[int]] = None
1279
+ """Filter for records that match one of the given severities"""
1280
+
1275
1281
 
1276
1282
  class UserBreachedCommonData(PangeaResponseResult):
1277
1283
  """
@@ -1320,7 +1326,7 @@ class UserPasswordBreachedRequest(IntelCommonRequest):
1320
1326
 
1321
1327
  class UserPasswordBreachedBulkRequest(IntelCommonRequest):
1322
1328
  """
1323
- User password breached common request data
1329
+ User password breached bulk request data
1324
1330
 
1325
1331
  hash_type (str): Hash type to be looked up
1326
1332
  hash_prefixes (List[str]): The list of prefixes of the hashes to be looked up.
@@ -1354,6 +1360,44 @@ class UserPasswordBreachedBulkResult(IntelCommonResult):
1354
1360
  data: Dict[str, UserPasswordBreachedData]
1355
1361
 
1356
1362
 
1363
+ class BreachRequest(APIRequestModel):
1364
+ """Breach request data"""
1365
+
1366
+ breach_id: Optional[str] = None
1367
+ """The ID of a breach returned by a provider."""
1368
+
1369
+ verbose: Optional[bool] = None
1370
+ """Echo back the parameters of the API in the response."""
1371
+
1372
+ provider: Optional[str] = None
1373
+ """Provider of the information. Default provider defined by the configuration."""
1374
+
1375
+ severity: Optional[List[int]] = None
1376
+ """Filter for records that match one of the given severities"""
1377
+
1378
+ start: Optional[str] = None
1379
+ """This parameter allows you to define the starting point for a date range query on the spycloud_publish_date field."""
1380
+
1381
+ end: Optional[str] = None
1382
+ """This parameter allows you to define the ending point for a date range query on the spycloud_publish_date field."""
1383
+
1384
+ cursor: Optional[str] = None
1385
+ """A token given in the raw response from SpyCloud. Post this back to paginate results"""
1386
+
1387
+
1388
+ class BreachResult(PangeaResponseResult):
1389
+ """Breach result"""
1390
+
1391
+ found: bool
1392
+ """A flag indicating if the lookup was successful."""
1393
+
1394
+ data: Optional[Dict] = None
1395
+ """Breach details given by the provider."""
1396
+
1397
+ parameters: Optional[Dict] = None
1398
+ """The parameters, which were passed in the request, echoed back."""
1399
+
1400
+
1357
1401
  class UserIntel(ServiceBase):
1358
1402
  """User Intel service client.
1359
1403
 
@@ -1392,6 +1436,7 @@ class UserIntel(ServiceBase):
1392
1436
  raw: Optional[bool] = None,
1393
1437
  provider: Optional[str] = None,
1394
1438
  cursor: Optional[str] = None,
1439
+ severity: Optional[List[int]] = None,
1395
1440
  ) -> PangeaResponse[UserBreachedResult]:
1396
1441
  """
1397
1442
  Look up breached users
@@ -1409,8 +1454,9 @@ class UserIntel(ServiceBase):
1409
1454
  end (str): Latest date for search
1410
1455
  verbose (bool, optional): Echo the API parameters in the response
1411
1456
  raw (bool, optional): Include raw data from this provider
1412
- provider (str, optional): Use reputation data from this provider: "spycloud"
1457
+ provider (str, optional): Use reputation data from this provider
1413
1458
  cursor (str, optional): A token given in the raw response from SpyCloud. Post this back to paginate results
1459
+ severity (List[int], optional): Filter for records that match one of the given severities
1414
1460
 
1415
1461
  Raises:
1416
1462
  PangeaAPIException: If an API Error happens
@@ -1439,6 +1485,7 @@ class UserIntel(ServiceBase):
1439
1485
  verbose=verbose,
1440
1486
  raw=raw,
1441
1487
  cursor=cursor,
1488
+ severity=severity,
1442
1489
  )
1443
1490
  return self.request.post("v1/user/breached", UserBreachedResult, data=input.model_dump(exclude_none=True))
1444
1491
 
@@ -1454,6 +1501,7 @@ class UserIntel(ServiceBase):
1454
1501
  verbose: Optional[bool] = None,
1455
1502
  raw: Optional[bool] = None,
1456
1503
  provider: Optional[str] = None,
1504
+ severity: Optional[List[int]] = None,
1457
1505
  ) -> PangeaResponse[UserBreachedBulkResult]:
1458
1506
  """
1459
1507
  Look up breached users V2
@@ -1472,7 +1520,8 @@ class UserIntel(ServiceBase):
1472
1520
  end (str): Latest date for search
1473
1521
  verbose (bool, optional): Echo the API parameters in the response
1474
1522
  raw (bool, optional): Include raw data from this provider
1475
- provider (str, optional): Use reputation data from this provider: "spycloud"
1523
+ provider (str, optional): Use reputation data from this provider
1524
+ severity (List[int], optional): Filter for records that match one of the given severities
1476
1525
 
1477
1526
  Raises:
1478
1527
  PangeaAPIException: If an API Error happens
@@ -1501,6 +1550,7 @@ class UserIntel(ServiceBase):
1501
1550
  end=end,
1502
1551
  verbose=verbose,
1503
1552
  raw=raw,
1553
+ severity=severity,
1504
1554
  )
1505
1555
  return self.request.post("v2/user/breached", UserBreachedBulkResult, data=input.model_dump(exclude_none=True))
1506
1556
 
@@ -1524,7 +1574,7 @@ class UserIntel(ServiceBase):
1524
1574
  hash_prefix (str): The prefix of the hash to be looked up.
1525
1575
  verbose (bool, optional): Echo the API parameters in the response
1526
1576
  raw (bool, optional): Include raw data from this provider
1527
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
1577
+ provider (str, optional): Use reputation data from this provider
1528
1578
 
1529
1579
  Raises:
1530
1580
  PangeaAPIException: If an API Error happens
@@ -1568,7 +1618,7 @@ class UserIntel(ServiceBase):
1568
1618
  hash_prefixes (List[str]): The list of prefixes of the hashes to be looked up.
1569
1619
  verbose (bool, optional): Echo the API parameters in the response
1570
1620
  raw (bool, optional): Include raw data from this provider
1571
- provider (str, optional): Use reputation data from this provider: "crowdstrike"
1621
+ provider (str, optional): Use reputation data from this provider
1572
1622
 
1573
1623
  Raises:
1574
1624
  PangeaAPIException: If an API Error happens
@@ -1592,6 +1642,56 @@ class UserIntel(ServiceBase):
1592
1642
  "v2/password/breached", UserPasswordBreachedBulkResult, data=input.model_dump(exclude_none=True)
1593
1643
  )
1594
1644
 
1645
+ def breach(
1646
+ self,
1647
+ breach_id: Optional[str] = None,
1648
+ verbose: Optional[bool] = None,
1649
+ provider: Optional[str] = None,
1650
+ cursor: Optional[str] = None,
1651
+ start: Optional[str] = None,
1652
+ end: Optional[str] = None,
1653
+ severity: Optional[List[int]] = None,
1654
+ ) -> PangeaResponse[BreachResult]:
1655
+ """
1656
+ Look up information about a specific breach
1657
+
1658
+ Given a provider specific breach ID, find details about the breach.
1659
+
1660
+ OperationId: user_intel_post_v1_breach
1661
+
1662
+ Args:
1663
+ breach_id (str, optional): The ID of a breach returned by a provider
1664
+ verbose (bool, optional): Echo the API parameters in the response
1665
+ provider (str, optional): Use reputation data from this provider
1666
+ cursor (str, optional): A token given in the raw response from SpyCloud. Post this back to paginate results
1667
+ start (str, optional): This parameter allows you to define the starting point for a date range query on the spycloud_publish_date field
1668
+ end (str, optional): This parameter allows you to define the ending point for a date range query on the spycloud_publish_date field
1669
+ severity (List[int], optional): Filter for records that match one of the given severities
1670
+
1671
+ Raises:
1672
+ PangeaAPIException: If an API Error happens
1673
+
1674
+ Returns:
1675
+ A PangeaResponse where the breach details are in the
1676
+ response.result field. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/user-intel)
1677
+
1678
+ Examples:
1679
+ response = user_intel.breach(
1680
+ breach_id="66111",
1681
+ )
1682
+ """
1683
+
1684
+ input = BreachRequest(
1685
+ breach_id=breach_id,
1686
+ provider=provider,
1687
+ verbose=verbose,
1688
+ cursor=cursor,
1689
+ start=start,
1690
+ end=end,
1691
+ severity=severity,
1692
+ )
1693
+ return self.request.post("v1/breach", BreachResult, data=input.model_dump(exclude_none=True))
1694
+
1595
1695
  class PasswordStatus(enum.Enum):
1596
1696
  BREACHED = 0
1597
1697
  UNBREACHED = 1
@@ -46,12 +46,6 @@ class SanitizeContent(APIRequestModel):
46
46
  analysis engine results. Only works if redact is enabled.
47
47
  """
48
48
 
49
- remove_attachments: Optional[bool] = None
50
- """Remove file attachments (PDF only)."""
51
-
52
- remove_interactive: Optional[bool] = None
53
- """Remove interactive content (PDF only)."""
54
-
55
49
 
56
50
  class SanitizeShareOutput(APIRequestModel):
57
51
  enabled: Optional[bool] = None
@@ -144,14 +138,6 @@ class RedactData(PangeaResponseResult):
144
138
  """The scoring result of a set of rules."""
145
139
 
146
140
 
147
- class CDR(PangeaResponseResult):
148
- file_attachments_removed: Optional[int] = None
149
- """Number of file attachments removed."""
150
-
151
- interactive_contents_removed: Optional[int] = None
152
- """Number of interactive content items removed."""
153
-
154
-
155
141
  class SanitizeData(PangeaResponseResult):
156
142
  defang: Optional[DefangData] = None
157
143
  """Defang."""
@@ -162,9 +148,6 @@ class SanitizeData(PangeaResponseResult):
162
148
  malicious_file: Optional[bool] = None
163
149
  """If the file scanned was malicious."""
164
150
 
165
- cdr: Optional[CDR] = None
166
- """Content Disarm and Reconstruction."""
167
-
168
151
 
169
152
  class SanitizeResult(PangeaResponseResult):
170
153
  dest_url: Optional[str] = None
@@ -265,7 +248,7 @@ class Sanitize(ServiceBase):
265
248
  performed.
266
249
 
267
250
  Examples:
268
- with open("/path/to/file.pdf", "rb") as f:
251
+ with open("/path/to/file.txt", "rb") as f:
269
252
  response = sanitize.sanitize(
270
253
  file=f,
271
254
  transfer_method=TransferMethod.POST_URL,
@@ -160,6 +160,21 @@ class ItemData(PangeaResponseResult):
160
160
  external_bucket_key: Optional[str] = None
161
161
  """The key in the external bucket that contains this file."""
162
162
 
163
+ file_ttl: Optional[str] = None
164
+ """The explicit file TTL setting for this object."""
165
+
166
+ file_ttl_effective: Optional[str] = None
167
+ """
168
+ The effective file TTL setting for this object, either explicitly set or
169
+ inherited (see `file_ttl_from_id`.)
170
+ """
171
+
172
+ file_ttl_from_id: Optional[str] = None
173
+ """
174
+ The ID of the object the expiry / TTL is set from. Either a service
175
+ configuration, the object itself, or a parent folder.
176
+ """
177
+
163
178
 
164
179
  class DeleteResult(PangeaResponseResult):
165
180
  count: int
@@ -170,11 +185,26 @@ class FolderCreateRequest(APIRequestModel):
170
185
  name: Optional[str] = None
171
186
  """The name of an object."""
172
187
 
188
+ file_ttl: Optional[str] = None
189
+ """Duration until files within this folder are automatically deleted."""
190
+
173
191
  metadata: Optional[Metadata] = None
174
192
  """A set of string-based key/value pairs used to provide additional data about an object."""
175
193
 
194
+ root_folder: Optional[str] = None
195
+ """
196
+ The path of a root folder to restrict the operation to. Must resolve to
197
+ `root_id` if also set.
198
+ """
199
+
200
+ root_id: Optional[str] = None
201
+ """
202
+ The ID of a root folder to restrict the operation to. Must match
203
+ `root_folder` if also set.
204
+ """
205
+
176
206
  parent_id: Optional[str] = None
177
- """The ID of a stored object."""
207
+ """The ID of the parent folder. Must match `folder` if also set."""
178
208
 
179
209
  folder: Optional[str] = None
180
210
  """The folder to place the folder in. Must match `parent_id` if also set."""
@@ -182,6 +212,9 @@ class FolderCreateRequest(APIRequestModel):
182
212
  tags: Optional[Tags] = None
183
213
  """A list of user-defined tags"""
184
214
 
215
+ tenant_id: Optional[str] = None
216
+ """A tenant to associate with this request"""
217
+
185
218
  bucket_id: Optional[str] = None
186
219
  """The bucket to use, if not the default."""
187
220
 
@@ -204,6 +237,9 @@ class GetRequest(APIRequestModel):
204
237
  bucket_id: Optional[str] = None
205
238
  """The bucket to use, if not the default."""
206
239
 
240
+ tenant_id: Optional[str] = None
241
+ """A tenant to associate with this request."""
242
+
207
243
 
208
244
  class GetResult(PangeaResponseResult):
209
245
  object: ItemData
@@ -250,12 +286,27 @@ class PutRequest(APIRequestModel):
250
286
  folder: Optional[str] = None
251
287
  """The path to the parent folder. Leave blank for the root folder. Path must resolve to `parent_id` if also set."""
252
288
 
289
+ file_ttl: Optional[str] = None
290
+ """The TTL before expiry for the file."""
291
+
253
292
  password: Optional[str] = None
254
293
  """An optional password to protect the file with. Downloading the file will require this password."""
255
294
 
256
295
  password_algorithm: Optional[str] = None
257
296
  """An optional password algorithm to protect the file with. See symmetric vault password_algorithm."""
258
297
 
298
+ root_folder: Optional[str] = None
299
+ """
300
+ The path of a root folder to restrict the operation to. Must resolve to
301
+ `root_id` if also set.
302
+ """
303
+
304
+ root_id: Optional[str] = None
305
+ """
306
+ The ID of a root folder to restrict the operation to. Must match
307
+ `root_folder` if also set.
308
+ """
309
+
259
310
  sha1: Optional[str] = None
260
311
  """The hexadecimal-encoded SHA1 hash of the file data, which will be verified by the server if provided."""
261
312
 
@@ -265,6 +316,9 @@ class PutRequest(APIRequestModel):
265
316
  tags: Optional[Tags] = None
266
317
  """A list of user-defined tags"""
267
318
 
319
+ tenant_id: Optional[str] = None
320
+ """A tenant to associate with this request"""
321
+
268
322
 
269
323
  class PutResult(PangeaResponseResult):
270
324
  object: ItemData
@@ -292,6 +346,9 @@ class UpdateRequest(APIRequestModel):
292
346
  add_tags: Optional[Tags] = None
293
347
  """A list of Tags to add. It is not an error to provide a tag which already exists."""
294
348
 
349
+ file_ttl: Optional[str] = None
350
+ """Set the file TTL."""
351
+
295
352
  name: Optional[str] = None
296
353
  """Sets the object's Name."""
297
354
 
@@ -307,12 +364,27 @@ class UpdateRequest(APIRequestModel):
307
364
  remove_tags: Optional[Tags] = None
308
365
  """A list of tags to remove. It is not an error to provide a tag which is not present."""
309
366
 
367
+ root_folder: Optional[str] = None
368
+ """
369
+ The path of a root folder to restrict the operation to. Must resolve to
370
+ `root_id` if also set.
371
+ """
372
+
373
+ root_id: Optional[str] = None
374
+ """
375
+ The ID of a root folder to restrict the operation to. Must match
376
+ `root_folder` if also set.
377
+ """
378
+
310
379
  parent_id: Optional[str] = None
311
380
  """Set the parent (folder) of the object. Can be an empty string for the root folder."""
312
381
 
313
382
  tags: Optional[Tags] = None
314
383
  """Set the object's tags."""
315
384
 
385
+ tenant_id: Optional[str] = None
386
+ """A tenant to associate with this request."""
387
+
316
388
  updated_at: Optional[str] = None
317
389
  """The date and time the object was last updated. If included, the update will fail if this doesn't match the date and time of the last update for the object."""
318
390
 
@@ -747,6 +819,11 @@ class Share(ServiceBase):
747
819
  folder: Optional[str] = None,
748
820
  tags: Optional[Tags] = None,
749
821
  bucket_id: Optional[str] = None,
822
+ *,
823
+ file_ttl: Optional[str] = None,
824
+ root_folder: Optional[str] = None,
825
+ root_id: Optional[str] = None,
826
+ tenant_id: Optional[str] = None,
750
827
  ) -> PangeaResponse[FolderCreateResult]:
751
828
  """
752
829
  Create a folder
@@ -763,6 +840,13 @@ class Share(ServiceBase):
763
840
  match `parent_id` if also set.
764
841
  tags (Tags, optional): A list of user-defined tags.
765
842
  bucket_id (str, optional): The bucket to use, if not the default.
843
+ file_ttl: Duration until files within this folder are automatically
844
+ deleted.
845
+ root_folder: The path of a root folder to restrict the operation to.
846
+ Must resolve to `root_id` if also set.
847
+ root_id: The ID of a root folder to restrict the operation to. Must
848
+ match `root_folder` if also set.
849
+ tenant_id: A tenant to associate with this request
766
850
 
767
851
  Returns:
768
852
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -779,7 +863,16 @@ class Share(ServiceBase):
779
863
  )
780
864
  """
781
865
  input = FolderCreateRequest(
782
- name=name, metadata=metadata, parent_id=parent_id, folder=folder, tags=tags, bucket_id=bucket_id
866
+ name=name,
867
+ metadata=metadata,
868
+ parent_id=parent_id,
869
+ folder=folder,
870
+ tags=tags,
871
+ bucket_id=bucket_id,
872
+ file_ttl=file_ttl,
873
+ root_folder=root_folder,
874
+ root_id=root_id,
875
+ tenant_id=tenant_id,
783
876
  )
784
877
  return self.request.post("v1/folder/create", FolderCreateResult, data=input.model_dump(exclude_none=True))
785
878
 
@@ -789,6 +882,8 @@ class Share(ServiceBase):
789
882
  transfer_method: Optional[TransferMethod] = None,
790
883
  bucket_id: Optional[str] = None,
791
884
  password: Optional[str] = None,
885
+ *,
886
+ tenant_id: Optional[str] = None,
792
887
  ) -> PangeaResponse[GetResult]:
793
888
  """
794
889
  Get an object
@@ -803,6 +898,7 @@ class Share(ServiceBase):
803
898
  transfer_method (TransferMethod, optional): The requested transfer method for the file data.
804
899
  bucket_id (str, optional): The bucket to use, if not the default.
805
900
  password (str, optional): If the file was protected with a password, the password to decrypt with.
901
+ tenant_id: A tenant to associate with this request.
806
902
 
807
903
  Returns:
808
904
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -813,7 +909,9 @@ class Share(ServiceBase):
813
909
  folder="/",
814
910
  )
815
911
  """
816
- input = GetRequest(id=id, transfer_method=transfer_method, bucket_id=bucket_id, password=password)
912
+ input = GetRequest(
913
+ id=id, transfer_method=transfer_method, bucket_id=bucket_id, password=password, tenant_id=tenant_id
914
+ )
817
915
  return self.request.post("v1/get", GetResult, data=input.model_dump(exclude_none=True))
818
916
 
819
917
  def get_archive(
@@ -907,6 +1005,11 @@ class Share(ServiceBase):
907
1005
  bucket_id: Optional[str] = None,
908
1006
  password: Optional[str] = None,
909
1007
  password_algorithm: Optional[str] = None,
1008
+ *,
1009
+ file_ttl: Optional[str] = None,
1010
+ root_folder: Optional[str] = None,
1011
+ root_id: Optional[str] = None,
1012
+ tenant_id: Optional[str] = None,
910
1013
  ) -> PangeaResponse[PutResult]:
911
1014
  """
912
1015
  Upload a file
@@ -935,6 +1038,13 @@ class Share(ServiceBase):
935
1038
  bucket_id (str, optional): The bucket to use, if not the default.
936
1039
  password (str, optional): An optional password to protect the file with. Downloading the file will require this password.
937
1040
  password_algorithm (str, optional): An optional password algorithm to protect the file with. See symmetric vault password_algorithm.
1041
+ file_ttl: The TTL before expiry for the file.
1042
+ root_folder: The path of a root folder to restrict the operation to.
1043
+ Must resolve to `root_id` if also set.
1044
+ root_id: The ID of a root folder to restrict the operation to. Must
1045
+ match `root_folder` if also set.
1046
+ tenant_id: A tenant to associate with this request.
1047
+
938
1048
  Returns:
939
1049
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
940
1050
 
@@ -977,6 +1087,10 @@ class Share(ServiceBase):
977
1087
  bucket_id=bucket_id,
978
1088
  password=password,
979
1089
  password_algorithm=password_algorithm,
1090
+ file_ttl=file_ttl,
1091
+ root_folder=root_folder,
1092
+ root_id=root_id,
1093
+ tenant_id=tenant_id,
980
1094
  )
981
1095
  data = input.model_dump(exclude_none=True)
982
1096
  return self.request.post("v1/put", PutResult, data=data, files=files)
@@ -998,6 +1112,13 @@ class Share(ServiceBase):
998
1112
  sha256: Optional[str] = None,
999
1113
  size: Optional[int] = None,
1000
1114
  bucket_id: Optional[str] = None,
1115
+ *,
1116
+ file_ttl: Optional[str] = None,
1117
+ password: Optional[str] = None,
1118
+ password_algorithm: Optional[str] = None,
1119
+ root_folder: Optional[str] = None,
1120
+ root_id: Optional[str] = None,
1121
+ tenant_id: Optional[str] = None,
1001
1122
  ) -> PangeaResponse[PutResult]:
1002
1123
  """
1003
1124
  Request upload URL
@@ -1023,6 +1144,16 @@ class Share(ServiceBase):
1023
1144
  sha256 (str, optional): The SHA256 hash of the file data, which will be verified by the server if provided.
1024
1145
  size (str, optional): The size (in bytes) of the file. If the upload doesn't match, the call will fail.
1025
1146
  bucket_id (str, optional): The bucket to use, if not the default.
1147
+ file_ttl: The TTL before expiry for the file.
1148
+ password: An optional password to protect the file with. Downloading
1149
+ the file will require this password.
1150
+ password_algorithm: An optional password algorithm to protect the
1151
+ file with. See symmetric vault password_algorithm.
1152
+ root_folder: The path of a root folder to restrict the operation to.
1153
+ Must resolve to `root_id` if also set.
1154
+ root_id: The ID of a root folder to restrict the operation to. Must
1155
+ match `root_folder` if also set.
1156
+ tenant_id: A tenant to associate with this request.
1026
1157
 
1027
1158
  Returns:
1028
1159
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -1058,6 +1189,12 @@ class Share(ServiceBase):
1058
1189
  sha512=sha512,
1059
1190
  size=size,
1060
1191
  bucket_id=bucket_id,
1192
+ file_ttl=file_ttl,
1193
+ password=password,
1194
+ password_algorithm=password_algorithm,
1195
+ root_folder=root_folder,
1196
+ root_id=root_id,
1197
+ tenant_id=tenant_id,
1061
1198
  )
1062
1199
 
1063
1200
  data = input.model_dump(exclude_none=True)
@@ -1076,6 +1213,14 @@ class Share(ServiceBase):
1076
1213
  parent_id: Optional[str] = None,
1077
1214
  updated_at: Optional[str] = None,
1078
1215
  bucket_id: Optional[str] = None,
1216
+ *,
1217
+ add_password: Optional[str] = None,
1218
+ add_password_algorithm: Optional[str] = None,
1219
+ remove_password: Optional[str] = None,
1220
+ file_ttl: Optional[str] = None,
1221
+ root_folder: Optional[str] = None,
1222
+ root_id: Optional[str] = None,
1223
+ tenant_id: Optional[str] = None,
1079
1224
  ) -> PangeaResponse[UpdateResult]:
1080
1225
  """
1081
1226
  Update a file
@@ -1086,7 +1231,7 @@ class Share(ServiceBase):
1086
1231
 
1087
1232
  Args:
1088
1233
  id (str, optional): An identifier for the file to update.
1089
- path (str, optional): Set the parent (folder). Leave blank for the
1234
+ folder (str, optional): Set the parent (folder). Leave blank for the
1090
1235
  root folder. Path must resolve to `parent_id` if also set.
1091
1236
  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.
1092
1237
  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.
@@ -1097,6 +1242,16 @@ class Share(ServiceBase):
1097
1242
  parent_id (str, optional): Set the parent (folder) of the object.
1098
1243
  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.
1099
1244
  bucket_id (str, optional): The bucket to use, if not the default.
1245
+ add_password: Protect the file with the supplied password.
1246
+ add_password_algorithm: The algorithm to use to password protect the
1247
+ file.
1248
+ remove_password: Remove the supplied password from the file.
1249
+ file_ttl: Set the file TTL.
1250
+ root_folder: The path of a root folder to restrict the operation to.
1251
+ Must resolve to `root_id` if also set.
1252
+ root_id: The ID of a root folder to restrict the operation to. Must
1253
+ match `root_folder` if also set.
1254
+ tenant_id: A tenant to associate with this request.
1100
1255
 
1101
1256
  Returns:
1102
1257
  A PangeaResponse. Available response fields can be found in our [API documentation](https://pangea.cloud/docs/api/share).
@@ -1123,6 +1278,13 @@ class Share(ServiceBase):
1123
1278
  parent_id=parent_id,
1124
1279
  updated_at=updated_at,
1125
1280
  bucket_id=bucket_id,
1281
+ add_password=add_password,
1282
+ add_password_algorithm=add_password_algorithm,
1283
+ remove_password=remove_password,
1284
+ file_ttl=file_ttl,
1285
+ root_folder=root_folder,
1286
+ root_id=root_id,
1287
+ tenant_id=tenant_id,
1126
1288
  )
1127
1289
  return self.request.post("v1/update", UpdateResult, data=input.model_dump(exclude_none=True))
1128
1290
 
@@ -1,32 +1,23 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: pangea-sdk
3
- Version: 5.2.1
3
+ Version: 5.4.0
4
4
  Summary: Pangea API SDK
5
- Home-page: https://pangea.cloud/docs/sdk/python/
6
5
  License: MIT
7
6
  Keywords: Pangea,SDK,Audit
8
7
  Author: Glenn Gallien
9
8
  Author-email: glenn.gallien@pangea.cloud
10
- Requires-Python: >=3.9.0,<4.0.0
11
- Classifier: License :: OSI Approved :: MIT License
12
- Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.9
14
- Classifier: Programming Language :: Python :: 3.10
15
- Classifier: Programming Language :: Python :: 3.11
16
- Classifier: Programming Language :: Python :: 3.12
17
- Classifier: Programming Language :: Python :: 3.13
9
+ Requires-Python: >=3.9,<4.0.0
18
10
  Classifier: Topic :: Software Development
19
11
  Classifier: Topic :: Software Development :: Libraries
20
- Requires-Dist: aiohttp (>=3.11.10,<4.0.0)
12
+ Requires-Dist: aiohttp (>=3.11.11,<4.0.0)
21
13
  Requires-Dist: cryptography (>=43.0.3,<44.0.0)
22
14
  Requires-Dist: deprecated (>=1.2.15,<2.0.0)
23
15
  Requires-Dist: google-crc32c (>=1.5.0,<2.0.0)
24
- Requires-Dist: pydantic (>=2.10.3,<3.0.0)
16
+ Requires-Dist: pydantic (>=2.10.5,<3.0.0)
25
17
  Requires-Dist: python-dateutil (>=2.9.0,<3.0.0)
26
18
  Requires-Dist: requests (>=2.31.0,<3.0.0)
27
19
  Requires-Dist: requests-toolbelt (>=1.0.0,<2.0.0)
28
20
  Requires-Dist: typing-extensions (>=4.12.2,<5.0.0)
29
- Project-URL: Repository, https://github.com/pangeacyber/pangea-python/tree/main/packages/pangea-sdk
30
21
  Description-Content-Type: text/markdown
31
22
 
32
23
  <a href="https://pangea.cloud?utm_source=github&utm_medium=python-sdk" target="_blank" rel="noopener noreferrer">
@@ -72,13 +63,13 @@ the same compatibility guarantees as stable releases.
72
63
  Via pip:
73
64
 
74
65
  ```bash
75
- $ pip3 install pangea-sdk==5.2.0b1
66
+ $ pip3 install pangea-sdk==5.2.0b2
76
67
  ```
77
68
 
78
69
  Via poetry:
79
70
 
80
71
  ```bash
81
- $ poetry add pangea-sdk==5.2.0b1
72
+ $ poetry add pangea-sdk==5.2.0b2
82
73
  ```
83
74
 
84
75
  ## Usage
@@ -1,4 +1,4 @@
1
- pangea/__init__.py,sha256=YdVCSgR-OBewhxnne1SnOliwM7KXiu_EV88j_zSLRmM,246
1
+ pangea/__init__.py,sha256=B29PtEg8t_Rt5FD7rRfZZ1HAvsBv0WSHWqH6BxDY10U,246
2
2
  pangea/asyncio/__init__.py,sha256=kjEMkqMQ521LlMSu5jn3_WgweyArwVZ2C-s3x7mR6Pk,45
3
3
  pangea/asyncio/file_uploader.py,sha256=wI7epib7Rc5jtZw4eJ1L1SlmutDG6CPv59C8N2UPhtY,1436
4
4
  pangea/asyncio/request.py,sha256=BREsLY8_MCxGSplHbdKFZTzr4TX5ya0-BsXLffZhsco,17849
@@ -9,10 +9,10 @@ pangea/asyncio/services/authz.py,sha256=B_0_nhDMJcjNpjpCx3Vi2LDRhlmfV9325GKbUZ8r
9
9
  pangea/asyncio/services/base.py,sha256=vRFVcO_uEAGJte3OUUBLD43RoiiFB1vC7SPyN6yEMoA,3158
10
10
  pangea/asyncio/services/embargo.py,sha256=ctzj3kip6xos-Eu3JuOskrCGYC8T3JlsgAopZHiPSXM,3068
11
11
  pangea/asyncio/services/file_scan.py,sha256=PLG1O-PL4Yk9uY9D6NbMrZ5LHg70Z311s7bFe46UMZA,7108
12
- pangea/asyncio/services/intel.py,sha256=Iwz_DleAPtmd1taekT4W8lVo65uHjIvA4TQ7WUQGrRk,38306
12
+ pangea/asyncio/services/intel.py,sha256=BcxGKSoZ1nJiEHyZM9yOwKSSPJUrB6ibJ19KR27VlgQ,40261
13
13
  pangea/asyncio/services/redact.py,sha256=JPJcmeKFloMZRpkjAHAZbpZJpO993WsTfEwA-S5ov18,7951
14
- pangea/asyncio/services/sanitize.py,sha256=4pRWBH595kFUXBkmu8euyk6H7F1M_-xXB2Qxnz6St6c,8627
15
- pangea/asyncio/services/share.py,sha256=YPJm_Gc4tfcx2cX6P_vLWIsHOR6M3RYy9LdU2UzEZbk,26791
14
+ pangea/asyncio/services/sanitize.py,sha256=EbSdq_v9yZWce9xEYWvZharE9bJcxw8cg5Pv8LVxdxc,8627
15
+ pangea/asyncio/services/share.py,sha256=AXXtFtmbXud0dAAom7qqHVOK9zBfX5S10MFS_1DQvio,30767
16
16
  pangea/asyncio/services/vault.py,sha256=VqrJGSEdq6MlZRI6cJpkthhIsqLClSQdgVxwYCbIwEk,77079
17
17
  pangea/audit_logger.py,sha256=gRkCfUUT5LDNaycwxkhZUySgY47jDfn1ZeKOul4XCQI,3842
18
18
  pangea/config.py,sha256=mQUu8GX_6weIuv3vjNdG5plppXskXYASmxMWtFQh-hc,1662
@@ -37,11 +37,11 @@ pangea/services/authz.py,sha256=bB0ZEUuXLT7Xjs5kZef1hZK6Du6VUusHe5aekNaxamw,1274
37
37
  pangea/services/base.py,sha256=43pWQcR9CeT4sGzgctF3Sy4M_h7DaUzkuZD2Z7CcDUU,3845
38
38
  pangea/services/embargo.py,sha256=9Wfku4td5ORaIENKmnGmS5jxJJIRfWp6Q51L36Jsy0I,3897
39
39
  pangea/services/file_scan.py,sha256=QiO80uKqB_BnAOiYQKznXfxpa5j40qqETE3-zBRT_QE,7813
40
- pangea/services/intel.py,sha256=flVdK4WhllPutCkWh7H-MuBxMMz0f4Bl-fz2f-hPuWM,52679
40
+ pangea/services/intel.py,sha256=y1EX2ctYIxQc52lmHp6-Q_UIDM--t3fOpXDssWiRPfo,56474
41
41
  pangea/services/redact.py,sha256=ovIcT0jkXe57O7keGzSClWNCic8y-4NZoemXoSKjjww,12913
42
- pangea/services/sanitize.py,sha256=D_R_XIe9FvRCX40b8b_3gouhAGduDdxI9bT2w-kiVHU,13444
42
+ pangea/services/sanitize.py,sha256=eAN1HhObiKqygy6HHcfl0NmxYfPMvqSKepwEAVVIIEE,12936
43
43
  pangea/services/share/file_format.py,sha256=1svO1ee_aenA9zoO_AaU-Rk5Ulp7kcPOc_KwNoluyQE,2797
44
- pangea/services/share/share.py,sha256=8N4zXQJjkVDf2iR62pz6xpmxlbXRPNfHgYfOuEdNaZ8,46333
44
+ pangea/services/share/share.py,sha256=b1Iuuog0XWXaI6rImoj0OeEx3DXbYqLWsLbCC_Zp6eg,52343
45
45
  pangea/services/vault/models/asymmetric.py,sha256=vspijmEvHm5WXri_fjOWfQc4maYyZfhDkLuaTM8-PZo,4991
46
46
  pangea/services/vault/models/common.py,sha256=PSZRFqHTUtEMJJGwywEFM2AU3aV8S-sbcoo3LLQ6uTc,17981
47
47
  pangea/services/vault/models/keys.py,sha256=duAuTiOby_D7MloRvN4gNj0P-b-jx9sdtplAWFxsShw,2786
@@ -51,6 +51,6 @@ pangea/services/vault/vault.py,sha256=ow-Zm7PYzfWIfUcA4UNnpeL2DHfZM4C7inRDmNR3zQ
51
51
  pangea/tools.py,sha256=2-Y4SAHWFv6Ocj42J_bWrVy27M5G3wi7a8LJn0dabHc,6427
52
52
  pangea/utils.py,sha256=dZ6MwFVEWXUgXvvDg-k6JnvVfsgslvtaBd7ez7afrqk,4983
53
53
  pangea/verify_audit.py,sha256=nSP17OzoSPdvezRExwfcf45H8ZPZnxZu-CbEp3qFJO0,17354
54
- pangea_sdk-5.2.1.dist-info/METADATA,sha256=YjlZ9hj9YmyyMIeS6Z_eSbpBeHsh_QNfzwxfbexlZVs,7513
55
- pangea_sdk-5.2.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
56
- pangea_sdk-5.2.1.dist-info/RECORD,,
54
+ pangea_sdk-5.4.0.dist-info/METADATA,sha256=Tc6nPFcfuzi0DADnc9fPhUrBxEAxhu9v5b3JE-qJtSo,7009
55
+ pangea_sdk-5.4.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
56
+ pangea_sdk-5.4.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.1
2
+ Generator: poetry-core 2.0.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any