unique_sdk 0.9.28__py3-none-any.whl → 0.9.31__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.
- unique_sdk/__init__.py +1 -1
- unique_sdk/api_resources/_folder.py +270 -0
- {unique_sdk-0.9.28.dist-info → unique_sdk-0.9.31.dist-info}/METADATA +99 -1
- {unique_sdk-0.9.28.dist-info → unique_sdk-0.9.31.dist-info}/RECORD +6 -5
- {unique_sdk-0.9.28.dist-info → unique_sdk-0.9.31.dist-info}/LICENSE +0 -0
- {unique_sdk-0.9.28.dist-info → unique_sdk-0.9.31.dist-info}/WHEEL +0 -0
unique_sdk/__init__.py
CHANGED
|
@@ -80,6 +80,7 @@ from unique_sdk.api_resources._search_string import SearchString as SearchString
|
|
|
80
80
|
from unique_sdk.api_resources._short_term_memory import (
|
|
81
81
|
ShortTermMemory as ShortTermMemory,
|
|
82
82
|
)
|
|
83
|
+
from unique_sdk.api_resources._folder import Folder as Folder
|
|
83
84
|
from unique_sdk.api_resources._embedding import Embeddings as Embeddings
|
|
84
85
|
from unique_sdk.api_resources._acronyms import Acronyms as Acronyms
|
|
85
86
|
from unique_sdk.api_resources._message_assessment import (
|
|
@@ -87,6 +88,5 @@ from unique_sdk.api_resources._message_assessment import (
|
|
|
87
88
|
)
|
|
88
89
|
|
|
89
90
|
# Unique QL
|
|
90
|
-
|
|
91
91
|
from unique_sdk._unique_ql import UQLOperator as UQLOperator
|
|
92
92
|
from unique_sdk._unique_ql import UQLCombinator as UQLCombinator
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import ClassVar, List, Literal, Optional, TypedDict, Unpack, cast
|
|
3
|
+
|
|
4
|
+
from unique_sdk._api_resource import APIResource
|
|
5
|
+
from unique_sdk._request_options import RequestOptions
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Folder(APIResource["Folder"]):
|
|
9
|
+
OBJECT_NAME: ClassVar[Literal["folder"]] = "folder"
|
|
10
|
+
RESOURCE_URL = "/folder"
|
|
11
|
+
|
|
12
|
+
class ScopeAccess(TypedDict):
|
|
13
|
+
"""
|
|
14
|
+
Represents the access level of a scope.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
class ScopeAccessType(Enum):
|
|
18
|
+
"""
|
|
19
|
+
Enum for scope access levels.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
READ = "READ"
|
|
23
|
+
WRITE = "WRITE"
|
|
24
|
+
|
|
25
|
+
class ScopeAccessEntityType(Enum):
|
|
26
|
+
"""
|
|
27
|
+
Enum for scope access entity types.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
USER = "USER"
|
|
31
|
+
GROUP = "GROUP"
|
|
32
|
+
|
|
33
|
+
entityId: str
|
|
34
|
+
type: ScopeAccessType
|
|
35
|
+
entityType: ScopeAccessEntityType
|
|
36
|
+
createdAt: str | None = None
|
|
37
|
+
|
|
38
|
+
class Children(TypedDict):
|
|
39
|
+
"""
|
|
40
|
+
Represents the children of a folder.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
id: str
|
|
44
|
+
name: str
|
|
45
|
+
|
|
46
|
+
class CustomApiOptions(TypedDict):
|
|
47
|
+
apiIdentifier: str
|
|
48
|
+
apiPayload: str | None
|
|
49
|
+
customisationType: str
|
|
50
|
+
|
|
51
|
+
class VttConfig(TypedDict):
|
|
52
|
+
languageModel: str | None
|
|
53
|
+
|
|
54
|
+
class IngestionConfig(TypedDict):
|
|
55
|
+
chunkMaxTokens: int | None
|
|
56
|
+
chunkMaxTokensOnePager: int | None
|
|
57
|
+
chunkMinTokens: int | None
|
|
58
|
+
chunkStrategy: str | None
|
|
59
|
+
customApiOptions: List["Folder.CustomApiOptions"] | None
|
|
60
|
+
documentMinTokens: int | None
|
|
61
|
+
excelReadMode: str | None
|
|
62
|
+
jpgReadMode: str | None
|
|
63
|
+
pdfReadMode: str | None
|
|
64
|
+
pptReadMode: str | None
|
|
65
|
+
uniqueIngestionMode: str
|
|
66
|
+
vttConfig: Optional["Folder.VttConfig"]
|
|
67
|
+
wordReadMode: str | None
|
|
68
|
+
|
|
69
|
+
class CreatedFolder(TypedDict):
|
|
70
|
+
id: str
|
|
71
|
+
object: str
|
|
72
|
+
name: str
|
|
73
|
+
parentId: Optional[str]
|
|
74
|
+
|
|
75
|
+
class CreateFolderStructureResponse(TypedDict):
|
|
76
|
+
createdFolders: List["Folder.CreatedFolder"]
|
|
77
|
+
|
|
78
|
+
class CreateParams(RequestOptions):
|
|
79
|
+
paths: List[str]
|
|
80
|
+
|
|
81
|
+
id: str
|
|
82
|
+
name: str
|
|
83
|
+
scopeAccess: List[ScopeAccess]
|
|
84
|
+
children: List[Children]
|
|
85
|
+
|
|
86
|
+
class UpdateIngestionConfigParams(TypedDict):
|
|
87
|
+
"""
|
|
88
|
+
Parameters for updating folder ingestion config.
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
ingestionConfig: "Folder.IngestionConfig"
|
|
92
|
+
applyToSubScopes: bool
|
|
93
|
+
|
|
94
|
+
class AddAccessParams(TypedDict):
|
|
95
|
+
"""
|
|
96
|
+
Parameters for adding access to a folder.
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
scopeAccesses: List["Folder.ScopeAccess"]
|
|
100
|
+
applyToSubScopes: bool
|
|
101
|
+
|
|
102
|
+
class RemoveAccessParams(TypedDict):
|
|
103
|
+
"""
|
|
104
|
+
Parameters for removing access from a folder.
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
scopeAccesses: List["Folder.ScopeAccess"]
|
|
108
|
+
applyToSubScopes: bool
|
|
109
|
+
|
|
110
|
+
@classmethod
|
|
111
|
+
def create_paths(
|
|
112
|
+
cls, user_id: str, company_id: str, **params: Unpack["Folder.CreateParams"]
|
|
113
|
+
) -> "Folder.CreateFolderStructureResponse":
|
|
114
|
+
return cast(
|
|
115
|
+
"Folder",
|
|
116
|
+
cls._static_request(
|
|
117
|
+
"post",
|
|
118
|
+
cls.RESOURCE_URL,
|
|
119
|
+
user_id,
|
|
120
|
+
company_id=company_id,
|
|
121
|
+
params=params,
|
|
122
|
+
),
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
@classmethod
|
|
126
|
+
async def create_paths_async(
|
|
127
|
+
cls, user_id: str, company_id: str, **params: Unpack["Folder.CreateParams"]
|
|
128
|
+
) -> "Folder.CreateFolderStructureResponse":
|
|
129
|
+
return cast(
|
|
130
|
+
"Folder",
|
|
131
|
+
await cls._static_request_async(
|
|
132
|
+
"post",
|
|
133
|
+
cls.RESOURCE_URL,
|
|
134
|
+
user_id,
|
|
135
|
+
company_id=company_id,
|
|
136
|
+
params=params,
|
|
137
|
+
),
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
@classmethod
|
|
141
|
+
def update_ingestion_config(
|
|
142
|
+
cls,
|
|
143
|
+
user_id: str,
|
|
144
|
+
company_id: str,
|
|
145
|
+
scope_id: str,
|
|
146
|
+
**params: Unpack["Folder.UpdateIngestionConfigParams"],
|
|
147
|
+
) -> "Folder":
|
|
148
|
+
"""
|
|
149
|
+
Update the ingestion config of a folder.
|
|
150
|
+
"""
|
|
151
|
+
return cast(
|
|
152
|
+
"Folder",
|
|
153
|
+
cls._static_request(
|
|
154
|
+
"patch",
|
|
155
|
+
f"/folder/{scope_id}/ingestion-config",
|
|
156
|
+
user_id,
|
|
157
|
+
company_id,
|
|
158
|
+
params=params,
|
|
159
|
+
),
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
@classmethod
|
|
163
|
+
async def update_ingestion_config_async(
|
|
164
|
+
cls,
|
|
165
|
+
user_id: str,
|
|
166
|
+
company_id: str,
|
|
167
|
+
scope_id: str,
|
|
168
|
+
**params: Unpack["Folder.UpdateIngestionConfigParams"],
|
|
169
|
+
) -> "Folder":
|
|
170
|
+
"""
|
|
171
|
+
Async update the ingestion config of a folder.
|
|
172
|
+
"""
|
|
173
|
+
return cast(
|
|
174
|
+
"Folder",
|
|
175
|
+
await cls._static_request_async(
|
|
176
|
+
"patch",
|
|
177
|
+
f"/folder/{scope_id}/ingestion-config",
|
|
178
|
+
user_id,
|
|
179
|
+
company_id,
|
|
180
|
+
params=params,
|
|
181
|
+
),
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
@classmethod
|
|
185
|
+
def add_access(
|
|
186
|
+
cls,
|
|
187
|
+
user_id: str,
|
|
188
|
+
company_id: str,
|
|
189
|
+
scope_id: str,
|
|
190
|
+
**params: Unpack["Folder.AddAccessParams"],
|
|
191
|
+
) -> "Folder":
|
|
192
|
+
"""
|
|
193
|
+
Add access to a folder.
|
|
194
|
+
"""
|
|
195
|
+
return cast(
|
|
196
|
+
"Folder",
|
|
197
|
+
cls._static_request(
|
|
198
|
+
"patch",
|
|
199
|
+
f"/folder/{scope_id}/access",
|
|
200
|
+
user_id,
|
|
201
|
+
company_id,
|
|
202
|
+
params=params,
|
|
203
|
+
),
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
@classmethod
|
|
207
|
+
async def add_access_async(
|
|
208
|
+
cls,
|
|
209
|
+
user_id: str,
|
|
210
|
+
company_id: str,
|
|
211
|
+
scope_id: str,
|
|
212
|
+
**params: Unpack["Folder.AddAccessParams"],
|
|
213
|
+
) -> "Folder":
|
|
214
|
+
"""
|
|
215
|
+
Async add access to a folder.
|
|
216
|
+
"""
|
|
217
|
+
return cast(
|
|
218
|
+
"Folder",
|
|
219
|
+
await cls._static_request_async(
|
|
220
|
+
"patch",
|
|
221
|
+
f"/folder/{scope_id}/access",
|
|
222
|
+
user_id,
|
|
223
|
+
company_id,
|
|
224
|
+
params=params,
|
|
225
|
+
),
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
@classmethod
|
|
229
|
+
def remove_access(
|
|
230
|
+
cls,
|
|
231
|
+
user_id: str,
|
|
232
|
+
company_id: str,
|
|
233
|
+
scope_id: str,
|
|
234
|
+
**params: Unpack["Folder.RemoveAccessParams"],
|
|
235
|
+
) -> dict:
|
|
236
|
+
"""
|
|
237
|
+
Remove access from a folder.
|
|
238
|
+
"""
|
|
239
|
+
return cast(
|
|
240
|
+
dict,
|
|
241
|
+
cls._static_request(
|
|
242
|
+
"patch",
|
|
243
|
+
f"/folder/{scope_id}/remove-access",
|
|
244
|
+
user_id,
|
|
245
|
+
company_id,
|
|
246
|
+
params=params,
|
|
247
|
+
),
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
@classmethod
|
|
251
|
+
async def remove_access_async(
|
|
252
|
+
cls,
|
|
253
|
+
user_id: str,
|
|
254
|
+
company_id: str,
|
|
255
|
+
scope_id: str,
|
|
256
|
+
**params: Unpack["Folder.RemoveAccessParams"],
|
|
257
|
+
) -> "Folder":
|
|
258
|
+
"""
|
|
259
|
+
Async remove access from a folder.
|
|
260
|
+
"""
|
|
261
|
+
return cast(
|
|
262
|
+
"Folder",
|
|
263
|
+
await cls._static_request_async(
|
|
264
|
+
"patch",
|
|
265
|
+
f"/folder/{scope_id}/remove-access",
|
|
266
|
+
user_id,
|
|
267
|
+
company_id,
|
|
268
|
+
params=params,
|
|
269
|
+
),
|
|
270
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: unique_sdk
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.31
|
|
4
4
|
Summary:
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: Martin Fadler
|
|
@@ -28,6 +28,7 @@ The Unique Python SDK provides access to the public API of Unique FinanceGPT. It
|
|
|
28
28
|
4. [Webhook Triggers](#webhook-triggers)
|
|
29
29
|
5. [Available API Resources](#available-api-resources)
|
|
30
30
|
- [Content](#content)
|
|
31
|
+
- [Folder](#folder)
|
|
31
32
|
- [Message](#message)
|
|
32
33
|
- [Chat Completion](#chat-completion)
|
|
33
34
|
- [Embeddings](#embeddings)
|
|
@@ -36,6 +37,7 @@ The Unique Python SDK provides access to the public API of Unique FinanceGPT. It
|
|
|
36
37
|
- [Search String](#search-string)
|
|
37
38
|
- [Short Term Memory](#short-term-memory)
|
|
38
39
|
- [Message Assessment](#message-assessment)
|
|
40
|
+
- [Folder](#folder)
|
|
39
41
|
6. [UniqueQL](#uniqueql)
|
|
40
42
|
- [Query Structure](#uniqueql-query-structure)
|
|
41
43
|
- [Metadata Filtering](#metadata-filtering)
|
|
@@ -244,6 +246,7 @@ unique_sdk.Message.modify(
|
|
|
244
246
|
- [Chat Completion](#chat-completion)
|
|
245
247
|
- [Search](#search)
|
|
246
248
|
- [Search String](#search-string)
|
|
249
|
+
- [Folder](#folder)
|
|
247
250
|
|
|
248
251
|
Most of the API services provide an asynchronous version of the method. The async methods are suffixed with `_async`.
|
|
249
252
|
|
|
@@ -431,6 +434,92 @@ def upload_file(
|
|
|
431
434
|
|
|
432
435
|
```
|
|
433
436
|
|
|
437
|
+
### Folder
|
|
438
|
+
|
|
439
|
+
#### `unique_sdk.Folder.create_paths`
|
|
440
|
+
|
|
441
|
+
Create each folder in the provided list of paths if it does not already exist.
|
|
442
|
+
|
|
443
|
+
```python
|
|
444
|
+
unique_sdk.Folder.create_paths(
|
|
445
|
+
user_id=user_id,
|
|
446
|
+
company_id=company_id,
|
|
447
|
+
paths=["/unique/path1", "/unique/path2"],
|
|
448
|
+
)
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
#### `unique_sdk.Folder.update_ingestion_config`
|
|
452
|
+
|
|
453
|
+
Allows you to update the ingestion config of a folder and whether to apply to the subscopes or not: `
|
|
454
|
+
|
|
455
|
+
- `ingestionConfig`
|
|
456
|
+
- `applyToSubScopes`
|
|
457
|
+
|
|
458
|
+
Example of updating the ingestion config of a folder and its subfolders.
|
|
459
|
+
|
|
460
|
+
```python
|
|
461
|
+
unique_sdk.Folder.update_ingestion_config(
|
|
462
|
+
user_id=user_id,
|
|
463
|
+
company_id=company_id,
|
|
464
|
+
scope_id=scope_id,
|
|
465
|
+
ingestionConfig={
|
|
466
|
+
"chunkStrategy": "default",
|
|
467
|
+
"uniqueIngestionMode": "standard",
|
|
468
|
+
},
|
|
469
|
+
applyToSubScopes=True
|
|
470
|
+
)
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
#### `unique_sdk.Folder.add_access`
|
|
474
|
+
|
|
475
|
+
Allows you to add access to a folder and apply to the subfolders or not: `
|
|
476
|
+
|
|
477
|
+
- `scopeAccesses`
|
|
478
|
+
- `applyToSubScopes`
|
|
479
|
+
|
|
480
|
+
Example of adding access to a folder and its subfolders.
|
|
481
|
+
|
|
482
|
+
```python
|
|
483
|
+
unique_sdk.Folder.add_access(
|
|
484
|
+
user_id=user_id,
|
|
485
|
+
company_id=company_id,
|
|
486
|
+
scope_id=scope_id,
|
|
487
|
+
scopeAccesses=[
|
|
488
|
+
{
|
|
489
|
+
"entityId": "group_id",
|
|
490
|
+
"type": "WRITE",
|
|
491
|
+
"entityType": "GROUP",
|
|
492
|
+
}
|
|
493
|
+
],
|
|
494
|
+
applyToSubScopes=True,
|
|
495
|
+
)
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
#### `unique_sdk.Folder.remove_access`
|
|
499
|
+
|
|
500
|
+
Allows you to delete access from a folder and apply to the subfolders or not: `
|
|
501
|
+
|
|
502
|
+
- `scopeAccesses`
|
|
503
|
+
- `applyToSubScopes`
|
|
504
|
+
|
|
505
|
+
Example of deleting the access from a folder and its subfolders.
|
|
506
|
+
|
|
507
|
+
```python
|
|
508
|
+
unique_sdk.Folder.remove_access(
|
|
509
|
+
user_id=user_id,
|
|
510
|
+
company_id=company_id,
|
|
511
|
+
scope_id=scope_id,
|
|
512
|
+
scopeAccesses=[
|
|
513
|
+
{
|
|
514
|
+
"entityId": "group_id",
|
|
515
|
+
"type": "WRITE",
|
|
516
|
+
"entityType": "GROUP",
|
|
517
|
+
}
|
|
518
|
+
],
|
|
519
|
+
applyToSubScopes=True,
|
|
520
|
+
)
|
|
521
|
+
```
|
|
522
|
+
|
|
434
523
|
### Message
|
|
435
524
|
|
|
436
525
|
#### `unique_sdk.Message.list`
|
|
@@ -1023,6 +1112,15 @@ All notable changes to this project will be documented in this file.
|
|
|
1023
1112
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
1024
1113
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
1025
1114
|
|
|
1115
|
+
## [0.9.31] - 2025-05-21
|
|
1116
|
+
- Add function to update folder access (add or remove).
|
|
1117
|
+
|
|
1118
|
+
## [0.9.30] - 2025-05-21
|
|
1119
|
+
- Add function to update folder ingestion config.
|
|
1120
|
+
|
|
1121
|
+
## [0.9.29] - 2025-05-20
|
|
1122
|
+
- Add function to create folder paths if they do not exist.
|
|
1123
|
+
|
|
1026
1124
|
## [0.9.28] - 2025-05-20
|
|
1027
1125
|
- Add function to search content info. This also allows filtering content info by metadata info.
|
|
1028
1126
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
unique_sdk/__init__.py,sha256
|
|
1
|
+
unique_sdk/__init__.py,sha256=-iaWPCqxhrGmXvI9LtaHOtsxMnyeXryk9hTzxHDH2V4,3238
|
|
2
2
|
unique_sdk/_api_requestor.py,sha256=i4gCpzx8zP95sv-AhJfpQxKvWR0U-I6lclHyV55RPtg,14397
|
|
3
3
|
unique_sdk/_api_resource.py,sha256=ytjomI-IVJwsbvdPyuZCfF-bl-Abgf66bu1D34YxCu8,6244
|
|
4
4
|
unique_sdk/_api_version.py,sha256=Ku4JPdeyJtnX5eJJvRCEc1_u44UObdVrvrL1T-WwWCs,46
|
|
@@ -19,6 +19,7 @@ unique_sdk/api_resources/_chat_completion.py,sha256=hAPPHxoljcoHeTboxoJkcXgpqA2h
|
|
|
19
19
|
unique_sdk/api_resources/_content.py,sha256=GWCiJMjbiNQFvo8RZ9cnCnTbWMo4NiUxLx-WgTzssc4,7589
|
|
20
20
|
unique_sdk/api_resources/_embedding.py,sha256=C6qak7cCUBMBINfPhgH8taCJZ9n6w1MUElqDJJ8dG10,1281
|
|
21
21
|
unique_sdk/api_resources/_event.py,sha256=bpWF9vstdoAWbUzr-iiGP713ceP0zPk77GJXiImf9zg,374
|
|
22
|
+
unique_sdk/api_resources/_folder.py,sha256=E-v4JAixhtYsOZXbEOTO8gyykPzPr62MraoPPy01vn8,6900
|
|
22
23
|
unique_sdk/api_resources/_integrated.py,sha256=l1vS8kJiSLie61mqDO3KI2MNmYwFydmCIoJpP_tPhSI,2956
|
|
23
24
|
unique_sdk/api_resources/_message.py,sha256=gEDIzg3METZU2k7m69meAuf0IWmZxnYOjbBKPRMwPYE,7688
|
|
24
25
|
unique_sdk/api_resources/_message_assessment.py,sha256=SSfx6eW7zb_GKe8cFJzCqW-t-_eWEXxKP5cnIb0DhIc,2276
|
|
@@ -29,7 +30,7 @@ unique_sdk/utils/chat_history.py,sha256=5UqL9hF1O9pV7skbNOlEibF5rHdYsmG3m5-YEPUo
|
|
|
29
30
|
unique_sdk/utils/file_io.py,sha256=jR1sj1SxOvqmCoLfYkevgTktcTZId0ORoqYjmwVoyJw,4301
|
|
30
31
|
unique_sdk/utils/sources.py,sha256=wfboE-neMKa0Wuq9QzfAEFMkNLrIrmm0v-QF33sLo6k,4952
|
|
31
32
|
unique_sdk/utils/token.py,sha256=AzKuAA1AwBtnvSFxGcsHLpxXr_wWE5Mj4jYBbOz2ljA,1740
|
|
32
|
-
unique_sdk-0.9.
|
|
33
|
-
unique_sdk-0.9.
|
|
34
|
-
unique_sdk-0.9.
|
|
35
|
-
unique_sdk-0.9.
|
|
33
|
+
unique_sdk-0.9.31.dist-info/LICENSE,sha256=EJCWoHgrXVBUb47PnjeV4MFIEOR71MAdCOIgv61J-4k,1065
|
|
34
|
+
unique_sdk-0.9.31.dist-info/METADATA,sha256=v0jkEyJg5EwdcPDFfkyjKuAKBDEpiaMDJ6jkmrQ2j2g,35598
|
|
35
|
+
unique_sdk-0.9.31.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
36
|
+
unique_sdk-0.9.31.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|