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 +1 -1
- pangea/asyncio/services/intel.py +58 -8
- pangea/asyncio/services/sanitize.py +1 -1
- pangea/asyncio/services/share.py +92 -2
- pangea/services/intel.py +109 -9
- pangea/services/sanitize.py +1 -18
- pangea/services/share/share.py +166 -4
- {pangea_sdk-5.2.1.dist-info → pangea_sdk-5.4.0.dist-info}/METADATA +7 -16
- {pangea_sdk-5.2.1.dist-info → pangea_sdk-5.4.0.dist-info}/RECORD +10 -10
- {pangea_sdk-5.2.1.dist-info → pangea_sdk-5.4.0.dist-info}/WHEEL +1 -1
pangea/__init__.py
CHANGED
pangea/asyncio/services/intel.py
CHANGED
@@ -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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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.
|
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,
|
pangea/asyncio/services/share.py
CHANGED
@@ -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,
|
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(
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
pangea/services/sanitize.py
CHANGED
@@ -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.
|
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,
|
pangea/services/share/share.py
CHANGED
@@ -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
|
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,
|
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(
|
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
|
-
|
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
|
+
Metadata-Version: 2.3
|
2
2
|
Name: pangea-sdk
|
3
|
-
Version: 5.
|
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
|
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.
|
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.
|
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.
|
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.
|
72
|
+
$ poetry add pangea-sdk==5.2.0b2
|
82
73
|
```
|
83
74
|
|
84
75
|
## Usage
|
@@ -1,4 +1,4 @@
|
|
1
|
-
pangea/__init__.py,sha256=
|
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=
|
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=
|
15
|
-
pangea/asyncio/services/share.py,sha256=
|
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=
|
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=
|
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=
|
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.
|
55
|
-
pangea_sdk-5.
|
56
|
-
pangea_sdk-5.
|
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,,
|