pangea-sdk 3.8.0b2__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 CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "3.8.0beta2"
1
+ __version__ = "3.8.0beta3"
2
2
 
3
3
  from pangea.asyncio.request import PangeaRequestAsync
4
4
  from pangea.config import PangeaConfig
@@ -1,9 +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
7
- from .share import ShareAsync
8
8
  from .sanitize import SanitizeAsync
9
+ from .share import ShareAsync
9
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
+ )
@@ -44,10 +44,10 @@ class SanitizeAsync(ServiceBaseAsync):
44
44
  sync_call: bool = True,
45
45
  ) -> PangeaResponse[m.SanitizeResult]:
46
46
  """
47
- Sanitize
47
+ Sanitize (Beta)
48
48
 
49
49
  Apply file sanitization actions according to specified rules.
50
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
50
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
51
51
 
52
52
  OperationId: sanitize_post_v1beta_sanitize
53
53
 
@@ -129,11 +129,11 @@ class SanitizeAsync(ServiceBaseAsync):
129
129
  uploaded_file_name: Optional[str] = None,
130
130
  ) -> PangeaResponse[m.SanitizeResult]:
131
131
  """
132
- Sanitize via presigned URL
132
+ Sanitize via presigned URL (Beta)
133
133
 
134
134
  Apply file sanitization actions according to specified rules via a
135
135
  [presigned URL](https://pangea.cloud/docs/api/presigned-urls).
136
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
136
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
137
137
 
138
138
  OperationId: sanitize_post_v1beta_sanitize 2
139
139
 
@@ -19,11 +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
25
  that of the object represented by the ID.
26
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
26
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
27
27
 
28
28
  OperationId: share_post_v1beta_delete
29
29
 
@@ -51,10 +51,10 @@ class ShareAsync(ServiceBaseAsync):
51
51
  tags: Optional[m.Tags] = None,
52
52
  ) -> PangeaResponse[m.FolderCreateResult]:
53
53
  """
54
- Create a folder
54
+ Create a folder (Beta)
55
55
 
56
56
  Create a folder, either by name or path and parent_id.
57
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
57
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
58
58
 
59
59
  OperationId: share_post_v1beta_folder_create
60
60
 
@@ -87,11 +87,11 @@ class ShareAsync(ServiceBaseAsync):
87
87
  self, id: Optional[str] = None, path: Optional[str] = None, transfer_method: Optional[TransferMethod] = None
88
88
  ) -> PangeaResponse[m.GetResult]:
89
89
  """
90
- Get an object
90
+ Get an object (Beta)
91
91
 
92
92
  Get object. If both ID and Path are supplied, the call will fail if the
93
93
  target object doesn't match both properties.
94
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
94
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
95
95
 
96
96
  OperationId: share_post_v1beta_get
97
97
 
@@ -124,10 +124,10 @@ class ShareAsync(ServiceBaseAsync):
124
124
  transfer_method: Optional[TransferMethod] = None,
125
125
  ) -> PangeaResponse[m.GetArchiveResult]:
126
126
  """
127
- Get archive
127
+ Get archive (Beta)
128
128
 
129
129
  Get an archive file of multiple objects.
130
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
130
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
131
131
 
132
132
  OperationId: share_post_v1beta_get_archive
133
133
 
@@ -164,10 +164,10 @@ class ShareAsync(ServiceBaseAsync):
164
164
  size: Optional[int] = None,
165
165
  ) -> PangeaResponse[m.ListResult]:
166
166
  """
167
- List
167
+ List (Beta)
168
168
 
169
169
  List or filter/search records.
170
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
170
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
171
171
 
172
172
  OperationId: share_post_v1beta_list
173
173
 
@@ -207,10 +207,10 @@ class ShareAsync(ServiceBaseAsync):
207
207
  size: Optional[int] = None,
208
208
  ) -> PangeaResponse[m.PutResult]:
209
209
  """
210
- Upload a file
210
+ Upload a file (Beta)
211
211
 
212
212
  Upload a file.
213
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
213
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
214
214
 
215
215
  OperationId: share_post_v1beta_put
216
216
 
@@ -293,10 +293,10 @@ class ShareAsync(ServiceBaseAsync):
293
293
  size: Optional[int] = None,
294
294
  ) -> PangeaResponse[m.PutResult]:
295
295
  """
296
- Request upload URL
296
+ Request upload URL (Beta)
297
297
 
298
298
  Request an upload URL.
299
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
299
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
300
300
 
301
301
  OperationId: share_post_v1beta_put 2
302
302
 
@@ -369,10 +369,10 @@ class ShareAsync(ServiceBaseAsync):
369
369
  updated_at: Optional[str] = None,
370
370
  ) -> PangeaResponse[m.UpdateResult]:
371
371
  """
372
- Update a file
372
+ Update a file (Beta)
373
373
 
374
374
  Update a file.
375
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
375
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
376
376
 
377
377
  OperationId: share_post_v1beta_update
378
378
 
@@ -418,10 +418,10 @@ class ShareAsync(ServiceBaseAsync):
418
418
 
419
419
  async def share_link_create(self, links: List[m.ShareLinkCreateItem]) -> PangeaResponse[m.ShareLinkCreateResult]:
420
420
  """
421
- Create share links
421
+ Create share links (Beta)
422
422
 
423
423
  Create a share link.
424
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
424
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
425
425
 
426
426
  OperationId: share_post_v1beta_share_link_create
427
427
 
@@ -455,10 +455,10 @@ class ShareAsync(ServiceBaseAsync):
455
455
 
456
456
  async def share_link_get(self, id: str) -> PangeaResponse[m.ShareLinkGetResult]:
457
457
  """
458
- Get share link
458
+ Get share link (Beta)
459
459
 
460
460
  Get a share link.
461
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
461
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
462
462
 
463
463
  OperationId: share_post_v1beta_share_link_get
464
464
 
@@ -488,10 +488,10 @@ class ShareAsync(ServiceBaseAsync):
488
488
  size: Optional[int] = None,
489
489
  ) -> PangeaResponse[m.ShareLinkListResult]:
490
490
  """
491
- List share links
491
+ List share links (Beta)
492
492
 
493
493
  Look up share links by filter options.
494
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
494
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
495
495
 
496
496
  OperationId: share_post_v1beta_share_link_list
497
497
 
@@ -516,10 +516,10 @@ class ShareAsync(ServiceBaseAsync):
516
516
 
517
517
  async def share_link_delete(self, ids: List[str]) -> PangeaResponse[m.ShareLinkDeleteResult]:
518
518
  """
519
- Delete share links
519
+ Delete share links (Beta)
520
520
 
521
521
  Delete share links.
522
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
522
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
523
523
 
524
524
  OperationId: share_post_v1beta_share_link_delete
525
525
 
@@ -544,13 +544,13 @@ class ShareAsync(ServiceBaseAsync):
544
544
  self, links: List[m.ShareLinkSendItem], sender_email: str, sender_name: Optional[str] = None
545
545
  ) -> PangeaResponse[m.ShareLinkSendResult]:
546
546
  """
547
- Send share links
547
+ Send share links (Beta)
548
548
 
549
549
  Send a secure share-link notification to a set of email addresses. The
550
550
  notification email will contain an Open button that the recipient can
551
551
  use to follow the secured share-link to authenticate and then access the
552
552
  shared content.
553
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
553
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
554
554
 
555
555
  OperationId: share_post_v1beta_share_link_send
556
556
 
@@ -1,9 +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
7
- from .share.share import Share
8
8
  from .sanitize import Sanitize
9
+ from .share.share import Share
9
10
  from .vault.vault import Vault
@@ -0,0 +1,377 @@
1
+ # Copyright 2022 Pangea Cyber Corporation
2
+ # Author: Pangea Cyber Corporation
3
+
4
+ import enum
5
+ from typing import Any, Dict, List, Optional, Union
6
+
7
+ from pangea.response import APIRequestModel, APIResponseModel, PangeaResponse, PangeaResponseResult
8
+ from pangea.services.base import ServiceBase
9
+
10
+
11
+ class ItemOrder(str, enum.Enum):
12
+ ASC = "asc"
13
+ DESC = "desc"
14
+
15
+ def __str__(self):
16
+ return str(self.value)
17
+
18
+ def __repr__(self):
19
+ return str(self.value)
20
+
21
+
22
+ class TupleOrderBy(str, enum.Enum):
23
+ RESOURCE_NAMESPACE = "resource_namespace"
24
+ RESOURCE_ID = "resource_id"
25
+ RELATION = "relation"
26
+ SUBJECT_NAMESPACE = "subject_namespace"
27
+ SUBJECT_ID = "subject_id"
28
+ SUBJECT_ACTION = "subject_action"
29
+
30
+ def __str__(self):
31
+ return str(self.value)
32
+
33
+ def __repr__(self):
34
+ return str(self.value)
35
+
36
+
37
+ class Resource(PangeaResponseResult):
38
+ namespace: str
39
+ id: Optional[str] = None
40
+
41
+
42
+ class Subject(PangeaResponseResult):
43
+ namespace: str
44
+ id: Optional[str] = None
45
+ action: Optional[str] = None
46
+
47
+
48
+ class Tuple(PangeaResponseResult):
49
+ resource: Resource
50
+ relation: str
51
+ subject: Subject
52
+
53
+
54
+ class TupleCreateRequest(APIRequestModel):
55
+ tuples: List[Tuple]
56
+
57
+
58
+ class TupleCreateResult(PangeaResponseResult):
59
+ pass
60
+
61
+
62
+ class TupleListFilter(APIRequestModel):
63
+ resource_namespace: Optional[str] = None
64
+ resource_namespace__contains: Optional[List[str]] = None
65
+ resource_namespace__in: Optional[List[str]] = None
66
+ resource_id: Optional[str] = None
67
+ resource_id__contains: Optional[List[str]] = None
68
+ resource_id__in: Optional[List[str]] = None
69
+ relation: Optional[str] = None
70
+ relation__contains: Optional[List[str]] = None
71
+ relation__in: Optional[List[str]] = None
72
+ subject_namespace: Optional[str] = None
73
+ subject_namespace__contains: Optional[List[str]] = None
74
+ subject_namespace__in: Optional[List[str]] = None
75
+ subject_id: Optional[str] = None
76
+ subject_id__contains: Optional[List[str]] = None
77
+ subject_id__in: Optional[List[str]] = None
78
+ subject_action: Optional[str] = None
79
+ subject_action__contains: Optional[List[str]] = None
80
+ subject_action__in: Optional[List[str]] = None
81
+
82
+
83
+ class TupleListRequest(APIRequestModel):
84
+ filter: Optional[Union[Dict, TupleListFilter]] = None
85
+ size: Optional[int] = None
86
+ last: Optional[str] = None
87
+ order: Optional[ItemOrder] = None
88
+ order_by: Optional[TupleOrderBy] = None
89
+
90
+
91
+ class TupleListResult(PangeaResponseResult):
92
+ tuples: List[Tuple]
93
+ last: str
94
+ count: int
95
+
96
+
97
+ class TupleDeleteRequest(APIRequestModel):
98
+ tuples: List[Tuple]
99
+
100
+
101
+ class TupleDeleteResult(PangeaResponseResult):
102
+ pass
103
+
104
+
105
+ class CheckRequest(APIRequestModel):
106
+ resource: Resource
107
+ action: str
108
+ subject: Subject
109
+ debug: Optional[bool] = None
110
+ attributes: Optional[Dict[str, Any]] = None
111
+
112
+
113
+ class DebugPath(APIResponseModel):
114
+ namespace: str
115
+ id: str
116
+ action: Optional[str]
117
+
118
+
119
+ class Debug(APIResponseModel):
120
+ path: List[DebugPath]
121
+
122
+
123
+ class CheckResult(PangeaResponseResult):
124
+ schema_id: str
125
+ schema_version: int
126
+ depth: int
127
+ allowed: bool
128
+ debug: Optional[Debug] = None
129
+
130
+
131
+ class ListResourcesRequest(APIRequestModel):
132
+ namespace: str
133
+ action: str
134
+ subject: Subject
135
+
136
+
137
+ class ListResourcesResult(PangeaResponseResult):
138
+ ids: List[str]
139
+
140
+
141
+ class ListSubjectsRequest(APIRequestModel):
142
+ resource: Resource
143
+ action: str
144
+
145
+
146
+ class ListSubjectsResult(PangeaResponseResult):
147
+ subjects: List[Subject]
148
+
149
+
150
+ class AuthZ(ServiceBase):
151
+ """AuthZ service client. (Beta)
152
+
153
+ Provides methods to interact with the Pangea AuthZ Service.
154
+ Documentation for the AuthZ Service API can be found at
155
+ <https://pangea.cloud/docs/api/authz>. Note that this service is in Beta and
156
+ is subject to change.
157
+
158
+ Examples:
159
+ import os
160
+ from pangea.config import PangeaConfig
161
+ from pangea.services import AuthZ
162
+
163
+ PANGEA_TOKEN = os.getenv("PANGEA_AUTHZ_TOKEN")
164
+
165
+ authz_config = PangeaConfig(domain="aws.us.pangea.cloud")
166
+
167
+ # Setup Pangea AuthZ service client
168
+ authz = AuthZ(token=PANGEA_TOKEN, config=authz_config)
169
+ """
170
+
171
+ service_name = "authz"
172
+
173
+ def __init__(self, token: str, config=None, logger_name="pangea", config_id: Optional[str] = None):
174
+ super().__init__(token, config, logger_name, config_id=config_id)
175
+
176
+ def tuple_create(self, tuples: List[Tuple]) -> PangeaResponse[TupleCreateResult]:
177
+ """Create tuples. (Beta)
178
+
179
+ Create tuples in the AuthZ Service. The request will fail if there is no schema
180
+ or the tuples do not validate against the schema.
181
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
182
+
183
+ Args:
184
+ tuples (List[Tuple]): List of tuples to be created.
185
+
186
+ Raises:
187
+ PangeaAPIException: If an API Error happens.
188
+
189
+ Returns:
190
+ Pangea Response with empty result.
191
+ Available response fields can be found in our
192
+ [API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/tuple/create).
193
+
194
+ Examples:
195
+ response = authz.tuple_create(
196
+ tuples=[
197
+ Tuple(
198
+ resource=Resource(namespace="file", id="file_1"),
199
+ relation="owner",
200
+ subject=Subject(namespace="user", id="user_1"),
201
+ )
202
+ ]
203
+ )
204
+ """
205
+
206
+ input_data = TupleCreateRequest(tuples=tuples)
207
+ return self.request.post("v1beta/tuple/create", TupleCreateResult, data=input_data.dict(exclude_none=True))
208
+
209
+ def tuple_list(
210
+ self,
211
+ filter: TupleListFilter,
212
+ size: Optional[int] = None,
213
+ last: Optional[str] = None,
214
+ order: Optional[ItemOrder] = None,
215
+ order_by: Optional[TupleOrderBy] = None,
216
+ ) -> PangeaResponse[TupleListResult]:
217
+ """List tuples. (Beta)
218
+
219
+ Return a paginated list of filtered tuples. The filter is given in terms
220
+ of a tuple. Fill out the fields that you want to filter. If the filter
221
+ is empty it will return all the tuples.
222
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
223
+
224
+ Args:
225
+ filter (TupleListFilter): The filter for listing tuples.
226
+ size (Optional[int]): The size of the result set. Default is None.
227
+ last (Optional[str]): The last token from a previous response. Default is None.
228
+ order (Optional[ItemOrder]): Order results asc(ending) or desc(ending).
229
+ order_by (Optional[TupleOrderBy]): Which field to order results by.
230
+
231
+ Raises:
232
+ PangeaAPIException: If an API Error happens.
233
+
234
+ Returns:
235
+ Pangea Response with a list of tuples and the last token.
236
+ Available response fields can be found in our
237
+ [API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/tuple/list).
238
+
239
+ Examples:
240
+ authz.tuple_list(TupleListFilter(subject_namespace="user", subject_id="user_1"))
241
+ """
242
+ input_data = TupleListRequest(
243
+ filter=filter.dict(exclude_none=True), size=size, last=last, order=order, order_by=order_by
244
+ )
245
+ return self.request.post("v1beta/tuple/list", TupleListResult, data=input_data.dict(exclude_none=True))
246
+
247
+ def tuple_delete(self, tuples: List[Tuple]) -> PangeaResponse[TupleDeleteResult]:
248
+ """Delete tuples. (Beta)
249
+
250
+ Delete tuples in the AuthZ Service.
251
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
252
+
253
+ Args:
254
+ tuples (List[Tuple]): List of tuples to be deleted.
255
+
256
+ Raises:
257
+ PangeaAPIException: If an API Error happens.
258
+
259
+ Returns:
260
+ Pangea Response with empty result.
261
+ Available response fields can be found in our
262
+ [API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/tuple/delete).
263
+
264
+ Examples:
265
+ response = authz.tuple_delete(
266
+ tuples=[
267
+ Tuple(
268
+ resource=Resource(namespace="file", id="file_1"),
269
+ relation="owner",
270
+ subject=Subject(namespace="user", id="user_1"),
271
+ )
272
+ ]
273
+ )
274
+ """
275
+
276
+ input_data = TupleDeleteRequest(tuples=tuples)
277
+ return self.request.post("v1beta/tuple/delete", TupleDeleteResult, data=input_data.dict(exclude_none=True))
278
+
279
+ def check(
280
+ self,
281
+ resource: Resource,
282
+ action: str,
283
+ subject: Subject,
284
+ debug: Optional[bool] = None,
285
+ attributes: Optional[Dict[str, Union[int, str]]] = None,
286
+ ) -> PangeaResponse[CheckResult]:
287
+ """Perform a check request. (Beta)
288
+
289
+ Check if a subject has permission to perform an action on the resource.
290
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
291
+
292
+ Args:
293
+ resource (Resource): The resource to check.
294
+ action (str): The action to check.
295
+ subject (Subject): The subject to check.
296
+ debug (Optional[bool]): Setting this value to True will provide a detailed analysis of the check.
297
+ attributes (Optional[Dict[str, Union[int, str]]]): Additional attributes for the check.
298
+
299
+ Raises:
300
+ PangeaAPIException: If an API Error happens.
301
+
302
+ Returns:
303
+ Pangea Response with the result of the check.
304
+ Available response fields can be found in our
305
+ [API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/check).
306
+
307
+ Examples:
308
+ response = authz.check(
309
+ resource=Resource(namespace="file", id="file_1"),
310
+ action="update",
311
+ subject=Subject(namespace="user", id="user_1"),
312
+ debug=True,
313
+ )
314
+ """
315
+
316
+ input_data = CheckRequest(resource=resource, action=action, subject=subject, debug=debug, attributes=attributes)
317
+ return self.request.post("v1beta/check", CheckResult, data=input_data.dict(exclude_none=True))
318
+
319
+ def list_resources(self, namespace: str, action: str, subject: Subject) -> PangeaResponse[ListResourcesResult]:
320
+ """List resources. (Beta)
321
+
322
+ Given a namespace, action, and subject, list all the resources in the
323
+ namespace that the subject has access to the action with.
324
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
325
+
326
+ Args:
327
+ namespace (str): The namespace to filter resources.
328
+ action (str): The action to filter resources.
329
+ subject (Subject): The subject to filter resources.
330
+
331
+ Raises:
332
+ PangeaAPIException: If an API Error happens.
333
+
334
+ Returns:
335
+ Pangea Response with a list of resource IDs.
336
+ Available response fields can be found in our
337
+ [API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/list-resources).
338
+
339
+ Examples:
340
+ authz.list_resources(
341
+ namespace="file",
342
+ action="update",
343
+ subject=Subject(namespace="user", id="user_1"),
344
+ )
345
+ """
346
+
347
+ input_data = ListResourcesRequest(namespace=namespace, action=action, subject=subject)
348
+ return self.request.post("v1beta/list-resources", ListResourcesResult, data=input_data.dict(exclude_none=True))
349
+
350
+ def list_subjects(self, resource: Resource, action: str) -> PangeaResponse[ListSubjectsResult]:
351
+ """List subjects. (Beta)
352
+
353
+ Given a resource and an action, return the list of subjects who have
354
+ access to the action for the given resource.
355
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
356
+
357
+ Args:
358
+ resource (Resource): The resource to filter subjects.
359
+ action (str): The action to filter subjects.
360
+
361
+ Raises:
362
+ PangeaAPIException: If an API Error happens.
363
+
364
+ Returns:
365
+ Pangea Response with a list of subjects.
366
+ Available response fields can be found in our
367
+ [API Documentation](https://pangea.cloud/docs/api/authz#/v1beta/list-subjects).
368
+
369
+ Examples:
370
+ response = authz.list_subjects(
371
+ resource=Resource(namespace="file", id="file_1"),
372
+ action="update",
373
+ )
374
+ """
375
+
376
+ input_data = ListSubjectsRequest(resource=resource, action=action)
377
+ return self.request.post("v1beta/list-subjects", ListSubjectsResult, data=input_data.dict(exclude_none=True))
@@ -136,10 +136,10 @@ class Sanitize(ServiceBase):
136
136
  sync_call: bool = True,
137
137
  ) -> PangeaResponse[SanitizeResult]:
138
138
  """
139
- Sanitize
139
+ Sanitize (Beta)
140
140
 
141
141
  Apply file sanitization actions according to specified rules.
142
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
142
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
143
143
 
144
144
  OperationId: sanitize_post_v1beta_sanitize
145
145
 
@@ -219,11 +219,11 @@ class Sanitize(ServiceBase):
219
219
  uploaded_file_name: Optional[str] = None,
220
220
  ) -> PangeaResponse[SanitizeResult]:
221
221
  """
222
- Sanitize via presigned URL
222
+ Sanitize via presigned URL (Beta)
223
223
 
224
224
  Apply file sanitization actions according to specified rules via a
225
225
  [presigned URL](https://pangea.cloud/docs/api/presigned-urls).
226
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
226
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
227
227
 
228
228
  OperationId: sanitize_post_v1beta_sanitize 2
229
229
 
@@ -345,11 +345,11 @@ class Share(ServiceBase):
345
345
  self, id: Optional[str] = None, path: Optional[str] = None, force: Optional[bool] = None
346
346
  ) -> PangeaResponse[DeleteResult]:
347
347
  """
348
- Delete
348
+ Delete (Beta)
349
349
 
350
350
  Delete object by ID or path. If both are supplied, the path must match
351
351
  that of the object represented by the ID.
352
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
352
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
353
353
 
354
354
  OperationId: share_post_v1beta_delete
355
355
 
@@ -376,10 +376,10 @@ class Share(ServiceBase):
376
376
  tags: Optional[Tags] = None,
377
377
  ) -> PangeaResponse[FolderCreateResult]:
378
378
  """
379
- Create a folder
379
+ Create a folder (Beta)
380
380
 
381
381
  Create a folder, either by name or path and parent_id.
382
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
382
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
383
383
 
384
384
  OperationId: share_post_v1beta_folder_create
385
385
 
@@ -411,11 +411,11 @@ class Share(ServiceBase):
411
411
  self, id: Optional[str] = None, path: Optional[str] = None, transfer_method: Optional[TransferMethod] = None
412
412
  ) -> PangeaResponse[GetResult]:
413
413
  """
414
- Get an object
414
+ Get an object (Beta)
415
415
 
416
416
  Get object. If both ID and Path are supplied, the call will fail if the
417
417
  target object doesn't match both properties.
418
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
418
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
419
419
 
420
420
  OperationId: share_post_v1beta_get
421
421
 
@@ -447,10 +447,10 @@ class Share(ServiceBase):
447
447
  transfer_method: Optional[TransferMethod] = None,
448
448
  ) -> PangeaResponse[GetArchiveResult]:
449
449
  """
450
- Get archive
450
+ Get archive (Beta)
451
451
 
452
452
  Get an archive file of multiple objects.
453
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
453
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
454
454
 
455
455
  OperationId: share_post_v1beta_get_archive
456
456
 
@@ -486,10 +486,10 @@ class Share(ServiceBase):
486
486
  size: Optional[int] = None,
487
487
  ) -> PangeaResponse[ListResult]:
488
488
  """
489
- List
489
+ List (Beta)
490
490
 
491
491
  List or filter/search records.
492
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
492
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
493
493
 
494
494
  OperationId: share_post_v1beta_list
495
495
 
@@ -528,10 +528,10 @@ class Share(ServiceBase):
528
528
  size: Optional[int] = None,
529
529
  ) -> PangeaResponse[PutResult]:
530
530
  """
531
- Upload a file
531
+ Upload a file (Beta)
532
532
 
533
533
  Upload a file.
534
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
534
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
535
535
 
536
536
  OperationId: share_post_v1beta_put
537
537
 
@@ -613,10 +613,10 @@ class Share(ServiceBase):
613
613
  size: Optional[int] = None,
614
614
  ) -> PangeaResponse[PutResult]:
615
615
  """
616
- Request upload URL
616
+ Request upload URL (Beta)
617
617
 
618
618
  Request an upload URL.
619
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
619
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
620
620
 
621
621
  OperationId: share_post_v1beta_put 2
622
622
 
@@ -688,10 +688,10 @@ class Share(ServiceBase):
688
688
  updated_at: Optional[str] = None,
689
689
  ) -> PangeaResponse[UpdateResult]:
690
690
  """
691
- Update a file
691
+ Update a file (Beta)
692
692
 
693
693
  Update a file.
694
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
694
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
695
695
 
696
696
  OperationId: share_post_v1beta_update
697
697
 
@@ -736,10 +736,10 @@ class Share(ServiceBase):
736
736
 
737
737
  def share_link_create(self, links: List[ShareLinkCreateItem]) -> PangeaResponse[ShareLinkCreateResult]:
738
738
  """
739
- Create share links
739
+ Create share links (Beta)
740
740
 
741
741
  Create a share link.
742
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
742
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
743
743
 
744
744
  OperationId: share_post_v1beta_share_link_create
745
745
 
@@ -770,10 +770,10 @@ class Share(ServiceBase):
770
770
 
771
771
  def share_link_get(self, id: str) -> PangeaResponse[ShareLinkGetResult]:
772
772
  """
773
- Get share link
773
+ Get share link (Beta)
774
774
 
775
775
  Get a share link.
776
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
776
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
777
777
 
778
778
  OperationId: share_post_v1beta_share_link_get
779
779
 
@@ -800,10 +800,10 @@ class Share(ServiceBase):
800
800
  size: Optional[int] = None,
801
801
  ) -> PangeaResponse[ShareLinkListResult]:
802
802
  """
803
- List share links
803
+ List share links (Beta)
804
804
 
805
805
  Look up share links by filter options.
806
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
806
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
807
807
 
808
808
  OperationId: share_post_v1beta_share_link_list
809
809
 
@@ -825,10 +825,10 @@ class Share(ServiceBase):
825
825
 
826
826
  def share_link_delete(self, ids: List[str]) -> PangeaResponse[ShareLinkDeleteResult]:
827
827
  """
828
- Delete share links
828
+ Delete share links (Beta)
829
829
 
830
830
  Delete share links.
831
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
831
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
832
832
 
833
833
  OperationId: share_post_v1beta_share_link_delete
834
834
 
@@ -850,13 +850,13 @@ class Share(ServiceBase):
850
850
  self, links: List[ShareLinkSendItem], sender_email: str, sender_name: Optional[str] = None
851
851
  ) -> PangeaResponse[ShareLinkSendResult]:
852
852
  """
853
- Send share links
853
+ Send share links (Beta)
854
854
 
855
855
  Send a secure share-link notification to a set of email addresses. The
856
856
  notification email will contain an Open button that the recipient can
857
857
  use to follow the secured share-link to authenticate and then access the
858
858
  shared content.
859
- [**Beta API**](https://pangea.cloud/docs/sdk/python/#beta-releases).
859
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
860
860
 
861
861
  OperationId: share_post_v1beta_share_link_send
862
862
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pangea-sdk
3
- Version: 3.8.0b2
3
+ Version: 3.8.0b3
4
4
  Summary: Pangea API SDK
5
5
  Home-page: https://pangea.cloud/docs/sdk/python/
6
6
  License: MIT
@@ -44,6 +44,8 @@ above.
44
44
 
45
45
  ## Installation
46
46
 
47
+ #### GA releases
48
+
47
49
  Via pip:
48
50
 
49
51
  ```bash
@@ -56,10 +58,32 @@ Via poetry:
56
58
  $ poetry add pangea-sdk
57
59
  ```
58
60
 
61
+ <a name="beta-releases"></a>
62
+
63
+ #### Beta releases
64
+
65
+ Pre-release versions may be available with the `b` (beta) denotation in the
66
+ version number. These releases serve to preview beta services and APIs. Per
67
+ Semantic Versioning, they are considered unstable and do not carry the same
68
+ compatibility guarantees as stable releases. [Beta changelog](https://github.com/pangeacyber/pangea-python/blob/beta/CHANGELOG.md).
69
+
70
+ Via pip:
71
+
72
+ ```bash
73
+ $ pip3 install pangea-sdk==3.8.0b3
74
+ ```
75
+
76
+ Via poetry:
77
+
78
+ ```bash
79
+ $ poetry add pangea-sdk==3.8.0b3
80
+ ```
81
+
59
82
  ## Usage
60
83
 
61
84
  - [Documentation][]
62
- - [Examples][]
85
+ - [GA Examples][]
86
+ - [Beta Examples][]
63
87
 
64
88
  General usage would be to create a token for a service through the
65
89
  [Pangea Console][] and then construct an API client for that respective service.
@@ -213,7 +237,8 @@ It accepts multiple file formats:
213
237
 
214
238
 
215
239
  [Documentation]: https://pangea.cloud/docs/sdk/python/
216
- [Examples]: https://github.com/pangeacyber/pangea-python/tree/main/examples
240
+ [GA Examples]: https://github.com/pangeacyber/pangea-python/tree/main/examples
241
+ [Beta Examples]: https://github.com/pangeacyber/pangea-python/tree/beta/examples
217
242
  [Pangea Console]: https://console.pangea.cloud/
218
243
  [Slack]: https://pangea.cloud/join-slack/
219
244
  [Secure Audit Log]: https://pangea.cloud/docs/audit
@@ -1,17 +1,18 @@
1
- pangea/__init__.py,sha256=frHRs4xf9u9kfWJlrcNwltqXeWYjDCjJ3uDZaT12Fx0,251
1
+ pangea/__init__.py,sha256=CmArwx2RgBaktP0hoxzHwv8oVS_WqKkzHmTxzpRPpQk,251
2
2
  pangea/asyncio/__init__.py,sha256=kjEMkqMQ521LlMSu5jn3_WgweyArwVZ2C-s3x7mR6Pk,45
3
3
  pangea/asyncio/file_uploader.py,sha256=nIBDNvZPwl-iA95OdwgEPeqUizvaBVsOc66Wkfux_6A,1462
4
4
  pangea/asyncio/request.py,sha256=ceFLWZ9MONt40PETarh1DSSDhA2rrDGgLrVz7u4xduQ,17272
5
- pangea/asyncio/services/__init__.py,sha256=XZyaFnvcA9fmYuKXXZi3ksjad6fssUa-8zqszW7ZZaY,356
5
+ pangea/asyncio/services/__init__.py,sha256=3IkiTqY_RtFndI7aoDTrb1yLv8xos_cKhmGS1TULcmw,386
6
6
  pangea/asyncio/services/audit.py,sha256=FJzSQSRhzQ0MNuhvMvziGyfGhcFb_HHeJ11NkPS_DBU,19594
7
7
  pangea/asyncio/services/authn.py,sha256=njuhg0SMLkke4Bmqe0C75BybjnmsC1ruAv6ariNbFwY,43812
8
+ pangea/asyncio/services/authz.py,sha256=kflRVbaZISpkRZTdFKf2xr8Oviu6Vo3Rsux8kI1NqmA,9958
8
9
  pangea/asyncio/services/base.py,sha256=4FtKtlq74NmE9myrgIt9HMA6JDnP4mPZ6krafWr286o,2663
9
10
  pangea/asyncio/services/embargo.py,sha256=8WguyWZUaGVwGpNzic5h8QzLueirA9WpBBik4mpCTeA,3056
10
11
  pangea/asyncio/services/file_scan.py,sha256=WIKYjUNCIx6jF0vQ-KnsKYBcZh53Q5rmccTlsTPP_rY,6301
11
12
  pangea/asyncio/services/intel.py,sha256=SSOBkD1vE0laQ2qWIDi5tHuYphQ8gFM_ikxr6VyoEp4,37665
12
13
  pangea/asyncio/services/redact.py,sha256=Crs8fpPG3gMgxR5uRT22qaS85yorUzec-PY1lYK4FzI,5174
13
- pangea/asyncio/services/sanitize.py,sha256=FaT2Zp9vMSs61poyMFPxduO4DwIdVl2pOl0BZnlsi34,7528
14
- pangea/asyncio/services/share.py,sha256=qB2yBS_66iSgBFsYMTrNcrTWu-UfRDZFQ3Os8KjmFVo,24447
14
+ pangea/asyncio/services/sanitize.py,sha256=eW0Vlf8-xjeUdJKgb5NXJGIJCyYjZJBaXcpcujVCfxI,7576
15
+ pangea/asyncio/services/share.py,sha256=GM8f_WS5nr5sjwVLqmanZn7T0WZzpYggouwPwqdgFzo,24759
15
16
  pangea/asyncio/services/vault.py,sha256=i8LGfZT5MQ_PFcOSA-zM3aRqlwkGHOu1WJ8U0VJaekc,47360
16
17
  pangea/audit_logger.py,sha256=gRkCfUUT5LDNaycwxkhZUySgY47jDfn1ZeKOul4XCQI,3842
17
18
  pangea/config.py,sha256=mQUu8GX_6weIuv3vjNdG5plppXskXYASmxMWtFQh-hc,1662
@@ -23,7 +24,7 @@ pangea/file_uploader.py,sha256=4RQ44xt-faApC61nn2PlwHT7XYrJ4GeQA8Ug4tySEAg,1227
23
24
  pangea/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
25
  pangea/request.py,sha256=eJBojjqVkIweNgf-MeHU9JqmuRXAZ-jFx2Rk25vKgIA,24346
25
26
  pangea/response.py,sha256=wKHFCZBkv27PvMG5Z5pa4FYqzmMl_Pp8e_nfmNeed3k,7042
26
- pangea/services/__init__.py,sha256=F6mTQ0oU2g21GUIJeNBFXWuye8SWxl2Z5FFEv6fyWsc,315
27
+ pangea/services/__init__.py,sha256=-QsZxRzRq_V1x1lmS_mu4310MNm0DkM4r6g6rfVGnOc,340
27
28
  pangea/services/audit/audit.py,sha256=NFpAz_a8JoI89HqGsBTqJgjSbTP0yflNQYY6McU6rek,32834
28
29
  pangea/services/audit/exceptions.py,sha256=bhVuYe4ammacOVxwg98CChxvwZf5FKgR2DcgqILOcwc,471
29
30
  pangea/services/audit/models.py,sha256=zKx-CozUSv0dem4sWxqUs_By0CcQQtNUFtXYg6IAwtI,12644
@@ -31,14 +32,15 @@ pangea/services/audit/signing.py,sha256=pOjw60BIYDcg3_5YKDCMWZUaapsEZpCHaFhyFu7T
31
32
  pangea/services/audit/util.py,sha256=C6KAdu6qhValmNrIMUPLdAW0SCiLwcDd5euXti_63Og,7596
32
33
  pangea/services/authn/authn.py,sha256=pjx8CybKhkf0Q9jNpcYUwAPL0KYr1ULg-mhdb0TbQbE,43280
33
34
  pangea/services/authn/models.py,sha256=FZ5kRBZQ-Pr2YD3jFZ4HvJI22ObbXaBb6HStjcN7-D0,18104
35
+ pangea/services/authz.py,sha256=Ds3Tbg8ZpkM31IpeGdAucV3C0e_Jhmj4UiPDY2GWm48,12627
34
36
  pangea/services/base.py,sha256=60FuZkACFGDDQFZfx9vzspPTtZU0pFqNKM_ViatXejc,3012
35
37
  pangea/services/embargo.py,sha256=WFqBreGU1FPgOSabIIkWCrXBvquYN958Un7h9P1aHSI,3885
36
38
  pangea/services/file_scan.py,sha256=loceEPhHTG4fKxUXk0Qut-ztGm4N-FaSMl2QBy2x20U,6923
37
39
  pangea/services/intel.py,sha256=r-MRWuyo5wPNi69M2PGb3G2TlA4e77ZR2RlSVSmT8as,51637
38
40
  pangea/services/redact.py,sha256=9LSVDyQsL_RBWioMXVq6-6Hf7Tr2bqBZo3ydbDw92Bg,7772
39
- pangea/services/sanitize.py,sha256=8Y0Wnmt3qHCc3jCIa2dryDagmAPKduJNGygsW1Fb-H4,10044
41
+ pangea/services/sanitize.py,sha256=sh_wsMDX2v-OWg57RNdmlZs633N8ZsTc2v4IuevZVgQ,10092
40
42
  pangea/services/share/file_format.py,sha256=1svO1ee_aenA9zoO_AaU-Rk5Ulp7kcPOc_KwNoluyQE,2797
41
- pangea/services/share/share.py,sha256=WOqthaDSx1GAbjqJ2y-7kHXIl0-jFLWK2HQ7qjfOHio,32185
43
+ pangea/services/share/share.py,sha256=KLWI4RMDUQqZO9-2ovtwL6H4Zmb6VkprKizSpCcejoo,32497
42
44
  pangea/services/vault/models/asymmetric.py,sha256=ac2Exc66elXxO-HxBqtvLPQWNI7y_00kb6SVqBPKecA,1450
43
45
  pangea/services/vault/models/common.py,sha256=Ks6reIlWx3PU1lD0UlorcAlZV8U9T3j711iOsb6qp3o,11120
44
46
  pangea/services/vault/models/secret.py,sha256=cLgEj-_BeGkB4-pmSeTkWVyasFbaJwcEltIEcOyf1U8,481
@@ -47,6 +49,6 @@ pangea/services/vault/vault.py,sha256=5islfGG4QLXHaZDwv7dEIPxpmpV8swFIYwCMz6-iBw
47
49
  pangea/tools.py,sha256=sa2pSz-L8tB6GcZg6lghsmm8w0qMQAIkzqcv7dilU6Q,6429
48
50
  pangea/utils.py,sha256=LTWkm7AZO95PITY1w7zbt6N3jWK1OPgzwy69FOKljCY,5289
49
51
  pangea/verify_audit.py,sha256=QthhKzFlIQwoEyjBLojcX4uHGaN3EEGomx-IC5e3L0E,10756
50
- pangea_sdk-3.8.0b2.dist-info/METADATA,sha256=7D25G-WgyaP5HQUc88Vo9To2sx66y8sl41YpoVr1Yn8,7079
51
- pangea_sdk-3.8.0b2.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
52
- pangea_sdk-3.8.0b2.dist-info/RECORD,,
52
+ pangea_sdk-3.8.0b3.dist-info/METADATA,sha256=ZFeMGPhmzJgl7JSVoQR3mwW-0JozKurmeAQHZ_MHnaQ,7735
53
+ pangea_sdk-3.8.0b3.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
54
+ pangea_sdk-3.8.0b3.dist-info/RECORD,,