pangea-sdk 3.8.0b1__py3-none-any.whl → 3.8.0b3__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/__init__.py +2 -0
- pangea/asyncio/services/authz.py +267 -0
- pangea/asyncio/services/sanitize.py +185 -0
- pangea/asyncio/services/share.py +39 -26
- pangea/services/__init__.py +2 -0
- pangea/services/authz.py +377 -0
- pangea/services/file_scan.py +0 -1
- pangea/services/sanitize.py +275 -0
- pangea/services/share/share.py +39 -26
- {pangea_sdk-3.8.0b1.dist-info → pangea_sdk-3.8.0b3.dist-info}/METADATA +28 -3
- {pangea_sdk-3.8.0b1.dist-info → pangea_sdk-3.8.0b3.dist-info}/RECORD +13 -9
- {pangea_sdk-3.8.0b1.dist-info → pangea_sdk-3.8.0b3.dist-info}/WHEEL +0 -0
pangea/__init__.py
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
from .audit import AuditAsync
|
2
2
|
from .authn import AuthNAsync
|
3
|
+
from .authz import AuthZAsync
|
3
4
|
from .embargo import EmbargoAsync
|
4
5
|
from .file_scan import FileScanAsync
|
5
6
|
from .intel import DomainIntelAsync, FileIntelAsync, IpIntelAsync, UrlIntelAsync, UserIntelAsync
|
6
7
|
from .redact import RedactAsync
|
8
|
+
from .sanitize import SanitizeAsync
|
7
9
|
from .share import ShareAsync
|
8
10
|
from .vault import VaultAsync
|
@@ -0,0 +1,267 @@
|
|
1
|
+
# Copyright 2022 Pangea Cyber Corporation
|
2
|
+
# Author: Pangea Cyber Corporation
|
3
|
+
|
4
|
+
from typing import Dict, List, Optional, Union
|
5
|
+
|
6
|
+
from pangea.asyncio.services.base import ServiceBaseAsync
|
7
|
+
from pangea.response import PangeaResponse
|
8
|
+
from pangea.services.authz import (
|
9
|
+
CheckRequest,
|
10
|
+
CheckResult,
|
11
|
+
ItemOrder,
|
12
|
+
ListResourcesRequest,
|
13
|
+
ListResourcesResult,
|
14
|
+
ListSubjectsRequest,
|
15
|
+
ListSubjectsResult,
|
16
|
+
Resource,
|
17
|
+
Subject,
|
18
|
+
Tuple,
|
19
|
+
TupleCreateRequest,
|
20
|
+
TupleCreateResult,
|
21
|
+
TupleDeleteRequest,
|
22
|
+
TupleDeleteResult,
|
23
|
+
TupleListFilter,
|
24
|
+
TupleListRequest,
|
25
|
+
TupleListResult,
|
26
|
+
TupleOrderBy,
|
27
|
+
)
|
28
|
+
|
29
|
+
|
30
|
+
class AuthZAsync(ServiceBaseAsync):
|
31
|
+
"""AuthZ service client. (Beta)
|
32
|
+
|
33
|
+
Provides methods to interact with the Pangea AuthZ Service.
|
34
|
+
Documentation for the AuthZ Service API can be found at
|
35
|
+
<https://pangea.cloud/docs/api/authz>. Note that this service is in Beta and
|
36
|
+
is subject to change.
|
37
|
+
|
38
|
+
Examples:
|
39
|
+
import os
|
40
|
+
from pangea.config import PangeaConfig
|
41
|
+
from pangea.services import AuthZ
|
42
|
+
|
43
|
+
PANGEA_TOKEN = os.getenv("PANGEA_AUTHZ_TOKEN")
|
44
|
+
|
45
|
+
authz_config = PangeaConfig(domain="aws.us.pangea.cloud")
|
46
|
+
|
47
|
+
# Setup Pangea AuthZ service client
|
48
|
+
authz = AuthZAsync(token=PANGEA_TOKEN, config=authz_config)
|
49
|
+
"""
|
50
|
+
|
51
|
+
service_name = "authz"
|
52
|
+
|
53
|
+
def __init__(self, token: str, config=None, logger_name="pangea", config_id: Optional[str] = None):
|
54
|
+
super().__init__(token, config, logger_name, config_id=config_id)
|
55
|
+
|
56
|
+
async def tuple_create(self, tuples: List[Tuple]) -> PangeaResponse[TupleCreateResult]:
|
57
|
+
"""Create tuples. (Beta)
|
58
|
+
|
59
|
+
Create tuples in the AuthZ Service. The request will fail if there is no schema
|
60
|
+
or the tuples do not validate against the schema.
|
61
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
62
|
+
|
63
|
+
Args:
|
64
|
+
tuples (List[Tuple]): List of tuples to be created.
|
65
|
+
|
66
|
+
Raises:
|
67
|
+
PangeaAPIException: If an API Error happens.
|
68
|
+
|
69
|
+
Returns:
|
70
|
+
Pangea Response with empty result.
|
71
|
+
Available response fields can be found in our
|
72
|
+
[API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/tuple/create).
|
73
|
+
|
74
|
+
Examples:
|
75
|
+
await authz.tuple_create(
|
76
|
+
tuples=[
|
77
|
+
Tuple(
|
78
|
+
resource=Resource(namespace="file", id="file_1"),
|
79
|
+
relation="owner",
|
80
|
+
subject=Subject(namespace="user", id="user_1"),
|
81
|
+
)
|
82
|
+
]
|
83
|
+
)
|
84
|
+
"""
|
85
|
+
|
86
|
+
input_data = TupleCreateRequest(tuples=tuples)
|
87
|
+
return await self.request.post(
|
88
|
+
"v1beta/tuple/create", TupleCreateResult, data=input_data.dict(exclude_none=True)
|
89
|
+
)
|
90
|
+
|
91
|
+
async def tuple_list(
|
92
|
+
self,
|
93
|
+
filter: TupleListFilter,
|
94
|
+
size: Optional[int] = None,
|
95
|
+
last: Optional[str] = None,
|
96
|
+
order: Optional[ItemOrder] = None,
|
97
|
+
order_by: Optional[TupleOrderBy] = None,
|
98
|
+
) -> PangeaResponse[TupleListResult]:
|
99
|
+
"""List tuples. (Beta)
|
100
|
+
|
101
|
+
Return a paginated list of filtered tuples. The filter is given in terms
|
102
|
+
of a tuple. Fill out the fields that you want to filter. If the filter
|
103
|
+
is empty it will return all the tuples.
|
104
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
105
|
+
|
106
|
+
Args:
|
107
|
+
filter (TupleListFilter): The filter for listing tuples.
|
108
|
+
size (Optional[int]): The size of the result set. Default is None.
|
109
|
+
last (Optional[str]): The last token from a previous response. Default is None.
|
110
|
+
order (Optional[ItemOrder]): Order results asc(ending) or desc(ending).
|
111
|
+
order_by (Optional[TupleOrderBy]): Which field to order results by.
|
112
|
+
|
113
|
+
Raises:
|
114
|
+
PangeaAPIException: If an API Error happens.
|
115
|
+
|
116
|
+
Returns:
|
117
|
+
Pangea Response with a list of tuples and the last token.
|
118
|
+
Available response fields can be found in our
|
119
|
+
[API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/tuple/list).
|
120
|
+
|
121
|
+
Examples:
|
122
|
+
await authz.tuple_list(TupleListFilter(subject_namespace="user", subject_id="user_1"))
|
123
|
+
"""
|
124
|
+
input_data = TupleListRequest(
|
125
|
+
filter=filter.dict(exclude_none=True), size=size, last=last, order=order, order_by=order_by
|
126
|
+
)
|
127
|
+
return await self.request.post("v1beta/tuple/list", TupleListResult, data=input_data.dict(exclude_none=True))
|
128
|
+
|
129
|
+
async def tuple_delete(self, tuples: List[Tuple]) -> PangeaResponse[TupleDeleteResult]:
|
130
|
+
"""Delete tuples. (Beta)
|
131
|
+
|
132
|
+
Delete tuples in the AuthZ Service.
|
133
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
134
|
+
|
135
|
+
Args:
|
136
|
+
tuples (List[Tuple]): List of tuples to be deleted.
|
137
|
+
|
138
|
+
Raises:
|
139
|
+
PangeaAPIException: If an API Error happens.
|
140
|
+
|
141
|
+
Returns:
|
142
|
+
Pangea Response with empty result.
|
143
|
+
Available response fields can be found in our
|
144
|
+
[API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/tuple/delete).
|
145
|
+
|
146
|
+
Examples:
|
147
|
+
await authz.tuple_delete(
|
148
|
+
tuples=[
|
149
|
+
Tuple(
|
150
|
+
resource=Resource(namespace="file", id="file_1"),
|
151
|
+
relation="owner",
|
152
|
+
subject=Subject(namespace="user", id="user_1"),
|
153
|
+
)
|
154
|
+
]
|
155
|
+
)
|
156
|
+
"""
|
157
|
+
|
158
|
+
input_data = TupleDeleteRequest(tuples=tuples)
|
159
|
+
return await self.request.post(
|
160
|
+
"v1beta/tuple/delete", TupleDeleteResult, data=input_data.dict(exclude_none=True)
|
161
|
+
)
|
162
|
+
|
163
|
+
async def check(
|
164
|
+
self,
|
165
|
+
resource: Resource,
|
166
|
+
action: str,
|
167
|
+
subject: Subject,
|
168
|
+
debug: Optional[bool] = None,
|
169
|
+
attributes: Optional[Dict[str, Union[int, str]]] = None,
|
170
|
+
) -> PangeaResponse[CheckResult]:
|
171
|
+
"""Perform a check request. (Beta)
|
172
|
+
|
173
|
+
Check if a subject has permission to perform an action on the resource.
|
174
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
175
|
+
|
176
|
+
Args:
|
177
|
+
resource (Resource): The resource to check.
|
178
|
+
action (str): The action to check.
|
179
|
+
subject (Subject): The subject to check.
|
180
|
+
debug (Optional[bool]): Setting this value to True will provide a detailed analysis of the check.
|
181
|
+
attributes (Optional[Dict[str, Union[int, str]]]): Additional attributes for the check.
|
182
|
+
|
183
|
+
Raises:
|
184
|
+
PangeaAPIException: If an API Error happens.
|
185
|
+
|
186
|
+
Returns:
|
187
|
+
Pangea Response with the result of the check.
|
188
|
+
Available response fields can be found in our
|
189
|
+
[API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/check).
|
190
|
+
|
191
|
+
Examples:
|
192
|
+
await authz.check(
|
193
|
+
resource=Resource(namespace="file", id="file_1"),
|
194
|
+
action="update",
|
195
|
+
subject=Subject(namespace="user", id="user_1"),
|
196
|
+
debug=True,
|
197
|
+
)
|
198
|
+
"""
|
199
|
+
|
200
|
+
input_data = CheckRequest(resource=resource, action=action, subject=subject, debug=debug, attributes=attributes)
|
201
|
+
return await self.request.post("v1beta/check", CheckResult, data=input_data.dict(exclude_none=True))
|
202
|
+
|
203
|
+
async def list_resources(
|
204
|
+
self, namespace: str, action: str, subject: Subject
|
205
|
+
) -> PangeaResponse[ListResourcesResult]:
|
206
|
+
"""List resources. (Beta)
|
207
|
+
|
208
|
+
Given a namespace, action, and subject, list all the resources in the
|
209
|
+
namespace that the subject has access to the action with.
|
210
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
211
|
+
|
212
|
+
Args:
|
213
|
+
namespace (str): The namespace to filter resources.
|
214
|
+
action (str): The action to filter resources.
|
215
|
+
subject (Subject): The subject to filter resources.
|
216
|
+
|
217
|
+
Raises:
|
218
|
+
PangeaAPIException: If an API Error happens.
|
219
|
+
|
220
|
+
Returns:
|
221
|
+
Pangea Response with a list of resource IDs.
|
222
|
+
Available response fields can be found in our
|
223
|
+
[API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/list-resources).
|
224
|
+
|
225
|
+
Examples:
|
226
|
+
await authz.list_resources(
|
227
|
+
namespace="file",
|
228
|
+
action="update",
|
229
|
+
subject=Subject(namespace="user", id="user_1"),
|
230
|
+
)
|
231
|
+
"""
|
232
|
+
|
233
|
+
input_data = ListResourcesRequest(namespace=namespace, action=action, subject=subject)
|
234
|
+
return await self.request.post(
|
235
|
+
"v1beta/list-resources", ListResourcesResult, data=input_data.dict(exclude_none=True)
|
236
|
+
)
|
237
|
+
|
238
|
+
async def list_subjects(self, resource: Resource, action: str) -> PangeaResponse[ListSubjectsResult]:
|
239
|
+
"""List subjects. (Beta)
|
240
|
+
|
241
|
+
Given a resource and an action, return the list of subjects who have
|
242
|
+
access to the action for the given resource.
|
243
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
244
|
+
|
245
|
+
Args:
|
246
|
+
resource (Resource): The resource to filter subjects.
|
247
|
+
action (str): The action to filter subjects.
|
248
|
+
|
249
|
+
Raises:
|
250
|
+
PangeaAPIException: If an API Error happens.
|
251
|
+
|
252
|
+
Returns:
|
253
|
+
Pangea Response with a list of subjects.
|
254
|
+
Available response fields can be found in our
|
255
|
+
[API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/list-subjects).
|
256
|
+
|
257
|
+
Examples:
|
258
|
+
await authz.list_subjects(
|
259
|
+
resource=Resource(namespace="file", id="file_1"),
|
260
|
+
action="update",
|
261
|
+
)
|
262
|
+
"""
|
263
|
+
|
264
|
+
input_data = ListSubjectsRequest(resource=resource, action=action)
|
265
|
+
return await self.request.post(
|
266
|
+
"v1beta/list-subjects", ListSubjectsResult, data=input_data.dict(exclude_none=True)
|
267
|
+
)
|
@@ -0,0 +1,185 @@
|
|
1
|
+
# Copyright 2022 Pangea Cyber Corporation
|
2
|
+
# Author: Pangea Cyber Corporation
|
3
|
+
import io
|
4
|
+
from typing import List, Optional, Tuple
|
5
|
+
|
6
|
+
import pangea.services.sanitize as m
|
7
|
+
from pangea.asyncio.services.base import ServiceBaseAsync
|
8
|
+
from pangea.response import PangeaResponse, TransferMethod
|
9
|
+
from pangea.utils import FileUploadParams, get_file_upload_params
|
10
|
+
|
11
|
+
|
12
|
+
class SanitizeAsync(ServiceBaseAsync):
|
13
|
+
"""Sanitize service client.
|
14
|
+
|
15
|
+
Examples:
|
16
|
+
import os
|
17
|
+
|
18
|
+
# Pangea SDK
|
19
|
+
from pangea.config import PangeaConfig
|
20
|
+
from pangea.asyncio.services import Sanitize
|
21
|
+
|
22
|
+
PANGEA_SANITIZE_TOKEN = os.getenv("PANGEA_SANITIZE_TOKEN")
|
23
|
+
config = PangeaConfig(domain="pangea.cloud")
|
24
|
+
|
25
|
+
sanitize = Sanitize(token=PANGEA_SANITIZE_TOKEN, config=config)
|
26
|
+
"""
|
27
|
+
|
28
|
+
service_name = "sanitize"
|
29
|
+
|
30
|
+
async def sanitize(
|
31
|
+
self,
|
32
|
+
transfer_method: TransferMethod = TransferMethod.POST_URL,
|
33
|
+
file_path: Optional[str] = None,
|
34
|
+
file: Optional[io.BufferedReader] = None,
|
35
|
+
source_url: Optional[str] = None,
|
36
|
+
share_id: Optional[str] = None,
|
37
|
+
file_scan: Optional[m.SanitizeFile] = None,
|
38
|
+
content: Optional[m.SanitizeContent] = None,
|
39
|
+
share_output: Optional[m.SanitizeShareOutput] = None,
|
40
|
+
size: Optional[int] = None,
|
41
|
+
crc32c: Optional[str] = None,
|
42
|
+
sha256: Optional[str] = None,
|
43
|
+
uploaded_file_name: Optional[str] = None,
|
44
|
+
sync_call: bool = True,
|
45
|
+
) -> PangeaResponse[m.SanitizeResult]:
|
46
|
+
"""
|
47
|
+
Sanitize (Beta)
|
48
|
+
|
49
|
+
Apply file sanitization actions according to specified rules.
|
50
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
51
|
+
|
52
|
+
OperationId: sanitize_post_v1beta_sanitize
|
53
|
+
|
54
|
+
Args:
|
55
|
+
transfer_method: The transfer method used to upload the file data.
|
56
|
+
file_path: Path to file to sanitize.
|
57
|
+
file: File to sanitize.
|
58
|
+
source_url: A URL where the file to be sanitized can be downloaded.
|
59
|
+
share_id: A Pangea Secure Share ID where the file to be sanitized is stored.
|
60
|
+
file_scan: Options for File Scan.
|
61
|
+
content: Options for how the file should be sanitized.
|
62
|
+
share_output: Integration with Secure Share.
|
63
|
+
size: The size (in bytes) of the file. If the upload doesn't match, the call will fail.
|
64
|
+
crc32c: The CRC32C hash of the file data, which will be verified by the server if provided.
|
65
|
+
sha256: The hexadecimal-encoded SHA256 hash of the file data, which will be verified by the server if provided.
|
66
|
+
uploaded_file_name: Name of the user-uploaded file, required for `TransferMethod.PUT_URL` and `TransferMethod.POST_URL`.
|
67
|
+
sync_call: Whether or not to poll on HTTP/202.
|
68
|
+
|
69
|
+
Raises:
|
70
|
+
PangeaAPIException: If an API error happens.
|
71
|
+
|
72
|
+
Returns:
|
73
|
+
The sanitized file and information on the sanitization that was
|
74
|
+
performed.
|
75
|
+
|
76
|
+
Examples:
|
77
|
+
with open("/path/to/file.pdf", "rb") as f:
|
78
|
+
response = await sanitize.sanitize(
|
79
|
+
file=f,
|
80
|
+
transfer_method=TransferMethod.POST_URL,
|
81
|
+
uploaded_file_name="uploaded_file",
|
82
|
+
)
|
83
|
+
"""
|
84
|
+
|
85
|
+
if file or file_path:
|
86
|
+
if file_path:
|
87
|
+
file = open(file_path, "rb")
|
88
|
+
if transfer_method == TransferMethod.POST_URL and (sha256 is None or crc32c is None or size is None):
|
89
|
+
params = get_file_upload_params(file) # type: ignore[arg-type]
|
90
|
+
crc32c = params.crc_hex if crc32c is None else crc32c
|
91
|
+
sha256 = params.sha256_hex if sha256 is None else sha256
|
92
|
+
size = params.size if size is None else size
|
93
|
+
else:
|
94
|
+
crc32c, sha256, size = None, None, None
|
95
|
+
files: List[Tuple] = [("upload", ("filename", file, "application/octet-stream"))]
|
96
|
+
else:
|
97
|
+
raise ValueError("Need to set file_path or file arguments")
|
98
|
+
|
99
|
+
input = m.SanitizeRequest(
|
100
|
+
transfer_method=transfer_method,
|
101
|
+
source_url=source_url,
|
102
|
+
share_id=share_id,
|
103
|
+
file=file_scan,
|
104
|
+
content=content,
|
105
|
+
share_output=share_output,
|
106
|
+
crc32c=crc32c,
|
107
|
+
sha256=sha256,
|
108
|
+
size=size,
|
109
|
+
uploaded_file_name=uploaded_file_name,
|
110
|
+
)
|
111
|
+
data = input.dict(exclude_none=True)
|
112
|
+
response = await self.request.post(
|
113
|
+
"v1beta/sanitize", m.SanitizeResult, data=data, files=files, poll_result=sync_call
|
114
|
+
)
|
115
|
+
if file_path and file is not None:
|
116
|
+
file.close()
|
117
|
+
return response
|
118
|
+
|
119
|
+
async def request_upload_url(
|
120
|
+
self,
|
121
|
+
transfer_method: TransferMethod = TransferMethod.PUT_URL,
|
122
|
+
params: Optional[FileUploadParams] = None,
|
123
|
+
file_scan: Optional[m.SanitizeFile] = None,
|
124
|
+
content: Optional[m.SanitizeContent] = None,
|
125
|
+
share_output: Optional[m.SanitizeShareOutput] = None,
|
126
|
+
size: Optional[int] = None,
|
127
|
+
crc32c: Optional[str] = None,
|
128
|
+
sha256: Optional[str] = None,
|
129
|
+
uploaded_file_name: Optional[str] = None,
|
130
|
+
) -> PangeaResponse[m.SanitizeResult]:
|
131
|
+
"""
|
132
|
+
Sanitize via presigned URL (Beta)
|
133
|
+
|
134
|
+
Apply file sanitization actions according to specified rules via a
|
135
|
+
[presigned URL](https://pangea.cloud/docs/api/presigned-urls).
|
136
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
137
|
+
|
138
|
+
OperationId: sanitize_post_v1beta_sanitize 2
|
139
|
+
|
140
|
+
Args:
|
141
|
+
transfer_method: The transfer method used to upload the file data.
|
142
|
+
params: File upload parameters.
|
143
|
+
file_scan: Options for File Scan.
|
144
|
+
content: Options for how the file should be sanitized.
|
145
|
+
share_output: Integration with Secure Share.
|
146
|
+
size: The size (in bytes) of the file. If the upload doesn't match, the call will fail.
|
147
|
+
crc32c: The CRC32C hash of the file data, which will be verified by the server if provided.
|
148
|
+
sha256: The hexadecimal-encoded SHA256 hash of the file data, which will be verified by the server if provided.
|
149
|
+
uploaded_file_name: Name of the user-uploaded file, required for `TransferMethod.PUT_URL` and `TransferMethod.POST_URL`.
|
150
|
+
|
151
|
+
Raises:
|
152
|
+
PangeaAPIException: If an API error happens.
|
153
|
+
|
154
|
+
Returns:
|
155
|
+
A presigned URL.
|
156
|
+
|
157
|
+
Examples:
|
158
|
+
presignedUrl = await sanitize.request_upload_url(
|
159
|
+
transfer_method=TransferMethod.PUT_URL,
|
160
|
+
uploaded_file_name="uploaded_file",
|
161
|
+
)
|
162
|
+
|
163
|
+
# Upload file to `presignedUrl.accepted_result.put_url`.
|
164
|
+
|
165
|
+
# Poll for Sanitize's result.
|
166
|
+
response: PangeaResponse[SanitizeResult] = await sanitize.poll_result(response=presignedUrl)
|
167
|
+
"""
|
168
|
+
|
169
|
+
input = m.SanitizeRequest(
|
170
|
+
transfer_method=transfer_method,
|
171
|
+
file=file_scan,
|
172
|
+
content=content,
|
173
|
+
share_output=share_output,
|
174
|
+
crc32c=crc32c,
|
175
|
+
sha256=sha256,
|
176
|
+
size=size,
|
177
|
+
uploaded_file_name=uploaded_file_name,
|
178
|
+
)
|
179
|
+
if params is not None and (transfer_method == TransferMethod.POST_URL):
|
180
|
+
input.crc32c = params.crc_hex
|
181
|
+
input.sha256 = params.sha256_hex
|
182
|
+
input.size = params.size
|
183
|
+
|
184
|
+
data = input.dict(exclude_none=True)
|
185
|
+
return await self.request.request_presigned_url("v1beta/sanitize", m.SanitizeResult, data=data)
|
pangea/asyncio/services/share.py
CHANGED
@@ -19,10 +19,11 @@ class ShareAsync(ServiceBaseAsync):
|
|
19
19
|
self, id: Optional[str] = None, path: Optional[str] = None, force: Optional[bool] = None
|
20
20
|
) -> PangeaResponse[m.DeleteResult]:
|
21
21
|
"""
|
22
|
-
Delete
|
22
|
+
Delete (Beta)
|
23
23
|
|
24
24
|
Delete object by ID or path. If both are supplied, the path must match
|
25
|
-
that of the object represented by the ID.
|
25
|
+
that of the object represented by the ID.
|
26
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
26
27
|
|
27
28
|
OperationId: share_post_v1beta_delete
|
28
29
|
|
@@ -50,9 +51,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
50
51
|
tags: Optional[m.Tags] = None,
|
51
52
|
) -> PangeaResponse[m.FolderCreateResult]:
|
52
53
|
"""
|
53
|
-
Create a folder
|
54
|
+
Create a folder (Beta)
|
54
55
|
|
55
|
-
Create a folder, either by name or path and parent_id.
|
56
|
+
Create a folder, either by name or path and parent_id.
|
57
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
56
58
|
|
57
59
|
OperationId: share_post_v1beta_folder_create
|
58
60
|
|
@@ -85,10 +87,11 @@ class ShareAsync(ServiceBaseAsync):
|
|
85
87
|
self, id: Optional[str] = None, path: Optional[str] = None, transfer_method: Optional[TransferMethod] = None
|
86
88
|
) -> PangeaResponse[m.GetResult]:
|
87
89
|
"""
|
88
|
-
Get an object
|
90
|
+
Get an object (Beta)
|
89
91
|
|
90
92
|
Get object. If both ID and Path are supplied, the call will fail if the
|
91
|
-
target object doesn't match both properties.
|
93
|
+
target object doesn't match both properties.
|
94
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
92
95
|
|
93
96
|
OperationId: share_post_v1beta_get
|
94
97
|
|
@@ -121,9 +124,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
121
124
|
transfer_method: Optional[TransferMethod] = None,
|
122
125
|
) -> PangeaResponse[m.GetArchiveResult]:
|
123
126
|
"""
|
124
|
-
Get archive
|
127
|
+
Get archive (Beta)
|
125
128
|
|
126
|
-
Get an archive file of multiple objects.
|
129
|
+
Get an archive file of multiple objects.
|
130
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
127
131
|
|
128
132
|
OperationId: share_post_v1beta_get_archive
|
129
133
|
|
@@ -160,9 +164,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
160
164
|
size: Optional[int] = None,
|
161
165
|
) -> PangeaResponse[m.ListResult]:
|
162
166
|
"""
|
163
|
-
List
|
167
|
+
List (Beta)
|
164
168
|
|
165
|
-
List or filter/search records.
|
169
|
+
List or filter/search records.
|
170
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
166
171
|
|
167
172
|
OperationId: share_post_v1beta_list
|
168
173
|
|
@@ -202,9 +207,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
202
207
|
size: Optional[int] = None,
|
203
208
|
) -> PangeaResponse[m.PutResult]:
|
204
209
|
"""
|
205
|
-
Upload a file
|
210
|
+
Upload a file (Beta)
|
206
211
|
|
207
|
-
Upload a file.
|
212
|
+
Upload a file.
|
213
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
208
214
|
|
209
215
|
OperationId: share_post_v1beta_put
|
210
216
|
|
@@ -287,9 +293,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
287
293
|
size: Optional[int] = None,
|
288
294
|
) -> PangeaResponse[m.PutResult]:
|
289
295
|
"""
|
290
|
-
Request upload URL
|
296
|
+
Request upload URL (Beta)
|
291
297
|
|
292
|
-
Request an upload URL.
|
298
|
+
Request an upload URL.
|
299
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
293
300
|
|
294
301
|
OperationId: share_post_v1beta_put 2
|
295
302
|
|
@@ -362,9 +369,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
362
369
|
updated_at: Optional[str] = None,
|
363
370
|
) -> PangeaResponse[m.UpdateResult]:
|
364
371
|
"""
|
365
|
-
Update a file
|
372
|
+
Update a file (Beta)
|
366
373
|
|
367
|
-
Update a file.
|
374
|
+
Update a file.
|
375
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
368
376
|
|
369
377
|
OperationId: share_post_v1beta_update
|
370
378
|
|
@@ -410,9 +418,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
410
418
|
|
411
419
|
async def share_link_create(self, links: List[m.ShareLinkCreateItem]) -> PangeaResponse[m.ShareLinkCreateResult]:
|
412
420
|
"""
|
413
|
-
Create share links
|
421
|
+
Create share links (Beta)
|
414
422
|
|
415
|
-
Create a share link.
|
423
|
+
Create a share link.
|
424
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
416
425
|
|
417
426
|
OperationId: share_post_v1beta_share_link_create
|
418
427
|
|
@@ -446,9 +455,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
446
455
|
|
447
456
|
async def share_link_get(self, id: str) -> PangeaResponse[m.ShareLinkGetResult]:
|
448
457
|
"""
|
449
|
-
Get share link
|
458
|
+
Get share link (Beta)
|
450
459
|
|
451
|
-
Get a share link.
|
460
|
+
Get a share link.
|
461
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
452
462
|
|
453
463
|
OperationId: share_post_v1beta_share_link_get
|
454
464
|
|
@@ -478,9 +488,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
478
488
|
size: Optional[int] = None,
|
479
489
|
) -> PangeaResponse[m.ShareLinkListResult]:
|
480
490
|
"""
|
481
|
-
List share links
|
491
|
+
List share links (Beta)
|
482
492
|
|
483
|
-
Look up share links by filter options.
|
493
|
+
Look up share links by filter options.
|
494
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
484
495
|
|
485
496
|
OperationId: share_post_v1beta_share_link_list
|
486
497
|
|
@@ -505,9 +516,10 @@ class ShareAsync(ServiceBaseAsync):
|
|
505
516
|
|
506
517
|
async def share_link_delete(self, ids: List[str]) -> PangeaResponse[m.ShareLinkDeleteResult]:
|
507
518
|
"""
|
508
|
-
Delete share links
|
519
|
+
Delete share links (Beta)
|
509
520
|
|
510
|
-
Delete share links.
|
521
|
+
Delete share links.
|
522
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
511
523
|
|
512
524
|
OperationId: share_post_v1beta_share_link_delete
|
513
525
|
|
@@ -532,12 +544,13 @@ class ShareAsync(ServiceBaseAsync):
|
|
532
544
|
self, links: List[m.ShareLinkSendItem], sender_email: str, sender_name: Optional[str] = None
|
533
545
|
) -> PangeaResponse[m.ShareLinkSendResult]:
|
534
546
|
"""
|
535
|
-
Send share links
|
547
|
+
Send share links (Beta)
|
536
548
|
|
537
549
|
Send a secure share-link notification to a set of email addresses. The
|
538
550
|
notification email will contain an Open button that the recipient can
|
539
551
|
use to follow the secured share-link to authenticate and then access the
|
540
|
-
shared content.
|
552
|
+
shared content.
|
553
|
+
How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
|
541
554
|
|
542
555
|
OperationId: share_post_v1beta_share_link_send
|
543
556
|
|
pangea/services/__init__.py
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
from .audit.audit import Audit
|
2
2
|
from .authn.authn import AuthN
|
3
|
+
from .authz import AuthZ
|
3
4
|
from .embargo import Embargo
|
4
5
|
from .file_scan import FileScan
|
5
6
|
from .intel import DomainIntel, FileIntel, IpIntel, UrlIntel, UserIntel
|
6
7
|
from .redact import Redact
|
8
|
+
from .sanitize import Sanitize
|
7
9
|
from .share.share import Share
|
8
10
|
from .vault.vault import Vault
|