curious-pyapi 0.1.4__tar.gz → 0.1.6__tar.gz
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.
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/.github/workflows/publish_to_pypi.yaml +2 -2
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/.pre-commit-config.yaml +1 -1
- curious_pyapi-0.1.6/.python-version +1 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/CHANGELOG.md +6 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/PKG-INFO +6 -4
- curious_pyapi-0.1.6/S0-CuriousAccountCreation.ipynb +287 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/pyproject.toml +10 -8
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/uv.lock +38 -3
- curious_pyapi-0.1.4/.python-version +0 -1
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/.github/dependabot.yaml +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/.gitignore +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/.markdownlint.yaml +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/.vscode/settings.json +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/LICENSE +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/README.md +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/__init__.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/api/__init__.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/api/curious.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/exceptions/__init__.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/exceptions/exceptions.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/py.typed +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/schema/__init__.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/schema/curious.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/schema/pyapi.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/schema/regex.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/utils/__init__.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/utils/data.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/utils/defaults.py +0 -0
- {curious_pyapi-0.1.4 → curious_pyapi-0.1.6}/src/curious_pyapi/utils/logging.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.1.6]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Support for Python 3.12, 3.13
|
|
13
|
+
|
|
8
14
|
## [0.1.4]
|
|
9
15
|
|
|
10
16
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: curious-pyapi
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: Python interface for Curious API.
|
|
5
5
|
Project-URL: Repository, https://github.com/childmindresearch/curious-pyapi
|
|
6
6
|
Project-URL: Issues, https://github.com/childmindresearch/curious-pyapi/issues
|
|
@@ -14,14 +14,16 @@ Classifier: Intended Audience :: Science/Research
|
|
|
14
14
|
Classifier: License :: OSI Approved :: MIT License
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
16
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
19
|
Classifier: Programming Language :: Python :: 3.14
|
|
18
20
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
21
|
Classifier: Typing :: Typed
|
|
20
|
-
Requires-Python: >=3.
|
|
22
|
+
Requires-Python: >=3.12
|
|
21
23
|
Requires-Dist: fastexcel>=0.21.0
|
|
22
24
|
Requires-Dist: httpx>=0.28.1
|
|
23
|
-
Requires-Dist: polars>=1.44.
|
|
24
|
-
Requires-Dist: pydantic[email]>=2.13.
|
|
25
|
+
Requires-Dist: polars>=1.44.1
|
|
26
|
+
Requires-Dist: pydantic[email]>=2.13.5
|
|
25
27
|
Description-Content-Type: text/markdown
|
|
26
28
|
|
|
27
29
|
# Curious-PyAPI
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "markdown",
|
|
5
|
+
"id": "f06b51dd-6552-4b22-91b9-e6d68880186c",
|
|
6
|
+
"metadata": {
|
|
7
|
+
"microsoft": {
|
|
8
|
+
"language": "python",
|
|
9
|
+
"language_group": "synapse_pyspark"
|
|
10
|
+
},
|
|
11
|
+
"nteract": {
|
|
12
|
+
"transient": {
|
|
13
|
+
"deleting": false
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"source": [
|
|
18
|
+
"# Curious Account Creation\n",
|
|
19
|
+
"\n",
|
|
20
|
+
"1. Load file of IDs and passwords.\n",
|
|
21
|
+
"2. Invite each ID to applet.\n",
|
|
22
|
+
"3. Create an account for each ID using password from file.\n",
|
|
23
|
+
"4. As each account, log in and accept invitation."
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"cell_type": "code",
|
|
28
|
+
"execution_count": null,
|
|
29
|
+
"id": "a7500f61-2e8c-4f08-ba11-6a2749fc4000",
|
|
30
|
+
"metadata": {
|
|
31
|
+
"microsoft": {
|
|
32
|
+
"language": "python",
|
|
33
|
+
"language_group": "jupyter_python"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"outputs": [],
|
|
37
|
+
"source": [
|
|
38
|
+
"from pathlib import Path\n",
|
|
39
|
+
"\n",
|
|
40
|
+
"from azure.identity import DefaultAzureCredential\n",
|
|
41
|
+
"from azure.keyvault.secrets import SecretClient\n",
|
|
42
|
+
"import httpx\n",
|
|
43
|
+
"import notebookutils\n",
|
|
44
|
+
"import polars as pl\n",
|
|
45
|
+
"\n",
|
|
46
|
+
"from curious_pyapi.api.curious import CuriousApiClient\n",
|
|
47
|
+
"from curious_pyapi.exceptions.exceptions import allow_existing\n",
|
|
48
|
+
"from curious_pyapi.schema.curious import CuriousId\n",
|
|
49
|
+
"from curious_pyapi.schema.pyapi import CuriousAuth\n",
|
|
50
|
+
"from curious_pyapi.utils.logging import get_logger\n",
|
|
51
|
+
"\n",
|
|
52
|
+
"conf = notebookutils.variableLibrary.getLibrary(\"ConfigurationVariables\")\n",
|
|
53
|
+
"\n",
|
|
54
|
+
"LOGGER = get_logger(__name__)\n",
|
|
55
|
+
"\n",
|
|
56
|
+
"APPLET_ID = conf.getVariable(\"AppletIdProlificMentalStateModelingStudy\")\n",
|
|
57
|
+
"EMAIL_FORMAT = \"msm+Z{}@childmind.org\"\n",
|
|
58
|
+
"TEMPORARY_NAME_FORMAT = \"_{}\"\n",
|
|
59
|
+
"\n",
|
|
60
|
+
"\n",
|
|
61
|
+
"def map_prolific_to_curious(df: pl.DataFrame, pl_namespace: str) -> pl.DataFrame:\n",
|
|
62
|
+
" \"\"\"Transform a username-password DataFrame into a CuriousAccount DataFrame.\"\"\"\n",
|
|
63
|
+
" record_id_str = pl.col(\"record_id\").cast(pl.String).str.zfill(6)\n",
|
|
64
|
+
" match pl_namespace:\n",
|
|
65
|
+
" case \"new_curious_user\":\n",
|
|
66
|
+
" _name_expr = pl.format(TEMPORARY_NAME_FORMAT, record_id_str)\n",
|
|
67
|
+
" case _:\n",
|
|
68
|
+
" _name_expr = pl.lit(\"\")\n",
|
|
69
|
+
"\n",
|
|
70
|
+
" return getattr(\n",
|
|
71
|
+
" df.with_columns(\n",
|
|
72
|
+
" email=pl.format(EMAIL_FORMAT, record_id_str),\n",
|
|
73
|
+
" password=pl.col(\"password\").cast(pl.String),\n",
|
|
74
|
+
" firstName=_name_expr,\n",
|
|
75
|
+
" lastName=_name_expr,\n",
|
|
76
|
+
" language=pl.lit(\"en\"),\n",
|
|
77
|
+
" secretUserId=pl.col(\"record_id\").cast(pl.String),\n",
|
|
78
|
+
" nickname=pl.col(\"record_id\").cast(pl.String),\n",
|
|
79
|
+
" tag=pl.lit(\"Prolific\"),\n",
|
|
80
|
+
" ),\n",
|
|
81
|
+
" pl_namespace,\n",
|
|
82
|
+
" ).enforce_schema()\n",
|
|
83
|
+
"\n",
|
|
84
|
+
"\n",
|
|
85
|
+
"def create_accounts_from_df(\n",
|
|
86
|
+
" client: CuriousApiClient,\n",
|
|
87
|
+
" df: pl.DataFrame,\n",
|
|
88
|
+
" applet_id: CuriousId,\n",
|
|
89
|
+
" user_type: str = \"respondent\",\n",
|
|
90
|
+
" *,\n",
|
|
91
|
+
" limit=None,\n",
|
|
92
|
+
") -> None:\n",
|
|
93
|
+
" \"\"\"For each row in DataFrame, create an account in Curious.\"\"\"\n",
|
|
94
|
+
" invitations: dict[str, CuriousId] = {}\n",
|
|
95
|
+
" api_df = map_prolific_to_curious(df, \"curious_account\")\n",
|
|
96
|
+
" if limit:\n",
|
|
97
|
+
" api_df = api_df.head(limit)\n",
|
|
98
|
+
" for record in api_df.to_dicts():\n",
|
|
99
|
+
" invitation = allow_existing(\n",
|
|
100
|
+
" client.invite_user(applet_id=applet_id, user_type=user_type).post,\n",
|
|
101
|
+
" json=record,\n",
|
|
102
|
+
" )\n",
|
|
103
|
+
" if invitation:\n",
|
|
104
|
+
" invitation = invitation.json().get(\"result\")\n",
|
|
105
|
+
" if not invitation:\n",
|
|
106
|
+
" all_invitations = (\n",
|
|
107
|
+
" client.invitations()\n",
|
|
108
|
+
" .get(params={\"appletId\": applet_id, \"userType\": \"respondent\"})\n",
|
|
109
|
+
" .json()\n",
|
|
110
|
+
" .get(\"result\", [])\n",
|
|
111
|
+
" )\n",
|
|
112
|
+
" this_user_invitations = [\n",
|
|
113
|
+
" i\n",
|
|
114
|
+
" for i in all_invitations\n",
|
|
115
|
+
" if all(\n",
|
|
116
|
+
" [\n",
|
|
117
|
+
" i.get(\"appletId\") == applet_id,\n",
|
|
118
|
+
" i.get(\"secretUserId\") == record[\"secretUserId\"],\n",
|
|
119
|
+
" ]\n",
|
|
120
|
+
" )\n",
|
|
121
|
+
" ]\n",
|
|
122
|
+
" if this_user_invitations:\n",
|
|
123
|
+
" invitation = this_user_invitations[0]\n",
|
|
124
|
+
" if invitation and \"key\" in invitation:\n",
|
|
125
|
+
" invitations[record[\"secretUserId\"]] = invitation[\"key\"]\n",
|
|
126
|
+
" new_user_df = map_prolific_to_curious(df, \"new_curious_user\")\n",
|
|
127
|
+
" for user in new_user_df.head(limit).to_dicts():\n",
|
|
128
|
+
" response = allow_existing(client.user_create.post, json=user)\n",
|
|
129
|
+
" secret_id = user[\"firstName\"][1:]\n",
|
|
130
|
+
" if secret_id in invitations:\n",
|
|
131
|
+
" user_client = CuriousApiClient(\n",
|
|
132
|
+
" auth=CuriousAuth(\n",
|
|
133
|
+
" curious_email=user[\"email\"], curious_password=user[\"password\"]\n",
|
|
134
|
+
" )\n",
|
|
135
|
+
" )\n",
|
|
136
|
+
" response = user_client.invitation_accept(key=invitations[secret_id]).post()\n",
|
|
137
|
+
" if not httpx.codes.is_success(response.status_code):\n",
|
|
138
|
+
" response.raise_for_status()\n",
|
|
139
|
+
" del user_client"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"cell_type": "code",
|
|
144
|
+
"execution_count": null,
|
|
145
|
+
"id": "23eee694-1869-4893-9afe-6ef54c259090",
|
|
146
|
+
"metadata": {
|
|
147
|
+
"microsoft": {
|
|
148
|
+
"language": "python",
|
|
149
|
+
"language_group": "jupyter_python"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"outputs": [],
|
|
153
|
+
"source": [
|
|
154
|
+
"secret_client = SecretClient(\n",
|
|
155
|
+
" vault_url=conf.getVariable(\"KeyVaultUri\"),\n",
|
|
156
|
+
" credential=DefaultAzureCredential(),\n",
|
|
157
|
+
")\n",
|
|
158
|
+
"admin_credentials = CuriousAuth(\n",
|
|
159
|
+
" curious_email=secret_client.get_secret(\"CuriousEmail\").value,\n",
|
|
160
|
+
" curious_password=secret_client.get_secret(\"CuriousPassword\").value,\n",
|
|
161
|
+
" applet_id=APPLET_ID,\n",
|
|
162
|
+
" applet_password=secret_client.get_secret(\"MsmProlificAppletPassword\").value,\n",
|
|
163
|
+
")"
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"cell_type": "markdown",
|
|
168
|
+
"id": "426252e6-31f2-4091-b6a7-7fe5d7fa3c37",
|
|
169
|
+
"metadata": {
|
|
170
|
+
"microsoft": {
|
|
171
|
+
"language": "python",
|
|
172
|
+
"language_group": "synapse_pyspark"
|
|
173
|
+
},
|
|
174
|
+
"nteract": {
|
|
175
|
+
"transient": {
|
|
176
|
+
"deleting": false
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
"source": [
|
|
181
|
+
"## 1. Load file of IDs and passwords"
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"cell_type": "code",
|
|
186
|
+
"execution_count": null,
|
|
187
|
+
"id": "1a55d086-9f84-491d-aeb5-d997df3557a9",
|
|
188
|
+
"metadata": {
|
|
189
|
+
"microsoft": {
|
|
190
|
+
"language": "python",
|
|
191
|
+
"language_group": "jupyter_python"
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
"outputs": [],
|
|
195
|
+
"source": [
|
|
196
|
+
"df = pl.read_excel(Path(\"Files/study_passwords.xlsx\"))\n",
|
|
197
|
+
"\"\"\"Raw DataFrame of IDs and passwords.\"\"\""
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"cell_type": "markdown",
|
|
202
|
+
"id": "0f3b308c-dabc-42fa-9d6e-b11494dcc59a",
|
|
203
|
+
"metadata": {
|
|
204
|
+
"microsoft": {
|
|
205
|
+
"language": "python",
|
|
206
|
+
"language_group": "jupyter_python"
|
|
207
|
+
},
|
|
208
|
+
"nteract": {
|
|
209
|
+
"transient": {
|
|
210
|
+
"deleting": false
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"source": [
|
|
215
|
+
"## 2‒4\n",
|
|
216
|
+
"### 2. Invite each ID to applet\n",
|
|
217
|
+
"### 3. Create an account for each ID using password from file.\n",
|
|
218
|
+
"### 4. As each account, log in and accept invitation."
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"cell_type": "code",
|
|
223
|
+
"execution_count": null,
|
|
224
|
+
"id": "73f61305-9847-493f-af33-04787d3afecb",
|
|
225
|
+
"metadata": {
|
|
226
|
+
"microsoft": {
|
|
227
|
+
"language": "python",
|
|
228
|
+
"language_group": "jupyter_python"
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
"outputs": [],
|
|
232
|
+
"source": [
|
|
233
|
+
"admin_client = CuriousApiClient(auth=admin_credentials)\n",
|
|
234
|
+
"create_accounts_from_df(admin_client, df, applet_id=APPLET_ID)"
|
|
235
|
+
]
|
|
236
|
+
}
|
|
237
|
+
],
|
|
238
|
+
"metadata": {
|
|
239
|
+
"dependencies": {
|
|
240
|
+
"environment": {
|
|
241
|
+
"environmentId": "e11945f7-786a-451b-aeee-5ddebde287a4",
|
|
242
|
+
"workspaceId": "ea346909-a97e-43b1-b6ad-0670fd81ece4"
|
|
243
|
+
},
|
|
244
|
+
"lakehouse": {
|
|
245
|
+
"default_lakehouse": "cbe8c20b-e1f4-4b58-a6fa-f40541aade33",
|
|
246
|
+
"default_lakehouse_name": "MsmDevBronze",
|
|
247
|
+
"default_lakehouse_workspace_id": "879f45c2-2a52-471e-ab5b-abf825258afb",
|
|
248
|
+
"known_lakehouses": [
|
|
249
|
+
{
|
|
250
|
+
"id": "cbe8c20b-e1f4-4b58-a6fa-f40541aade33"
|
|
251
|
+
}
|
|
252
|
+
]
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
"kernel_info": {
|
|
256
|
+
"jupyter_kernel_name": "python3.12",
|
|
257
|
+
"name": "jupyter"
|
|
258
|
+
},
|
|
259
|
+
"kernelspec": {
|
|
260
|
+
"display_name": "Jupyter",
|
|
261
|
+
"name": "jupyter"
|
|
262
|
+
},
|
|
263
|
+
"language_info": {
|
|
264
|
+
"name": "python"
|
|
265
|
+
},
|
|
266
|
+
"microsoft": {
|
|
267
|
+
"language": "python",
|
|
268
|
+
"language_group": "jupyter_python",
|
|
269
|
+
"ms_spell_check": {
|
|
270
|
+
"ms_spell_check_language": "en"
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
"nteract": {
|
|
274
|
+
"version": "nteract-front-end@1.0.0"
|
|
275
|
+
},
|
|
276
|
+
"spark_compute": {
|
|
277
|
+
"compute_id": "/trident/default",
|
|
278
|
+
"session_options": {
|
|
279
|
+
"conf": {
|
|
280
|
+
"spark.synapse.nbs.session.timeout": "1200000"
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
"nbformat": 4,
|
|
286
|
+
"nbformat_minor": 5
|
|
287
|
+
}
|
|
@@ -10,13 +10,7 @@ readme = "README.md"
|
|
|
10
10
|
authors = [
|
|
11
11
|
{ name = "Jon Cluce", email = "jon.clucas@childmind.org" }
|
|
12
12
|
]
|
|
13
|
-
requires-python = ">=3.
|
|
14
|
-
dependencies = [
|
|
15
|
-
"fastexcel>=0.21.0",
|
|
16
|
-
"httpx>=0.28.1",
|
|
17
|
-
"polars>=1.44.0",
|
|
18
|
-
"pydantic[email]>=2.13.4",
|
|
19
|
-
]
|
|
13
|
+
requires-python = ">=3.12"
|
|
20
14
|
license-files = ["LICENSE"]
|
|
21
15
|
license = "MIT"
|
|
22
16
|
classifiers = [
|
|
@@ -26,10 +20,18 @@ classifiers = [
|
|
|
26
20
|
"License :: OSI Approved :: MIT License",
|
|
27
21
|
"Programming Language :: Python :: 3",
|
|
28
22
|
"Programming Language :: Python :: 3 :: Only",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Programming Language :: Python :: 3.13",
|
|
29
25
|
"Programming Language :: Python :: 3.14",
|
|
30
26
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
31
27
|
"Typing :: Typed",
|
|
32
28
|
]
|
|
29
|
+
dependencies = [
|
|
30
|
+
"fastexcel>=0.21.0",
|
|
31
|
+
"httpx>=0.28.1",
|
|
32
|
+
"polars>=1.44.1",
|
|
33
|
+
"pydantic[email]>=2.13.5",
|
|
34
|
+
]
|
|
33
35
|
|
|
34
36
|
[project.urls]
|
|
35
37
|
Repository = "https://github.com/childmindresearch/curious-pyapi"
|
|
@@ -44,7 +46,7 @@ reportUnknownMemberType = false
|
|
|
44
46
|
|
|
45
47
|
[tool.ruff]
|
|
46
48
|
line-length = 88
|
|
47
|
-
target-version = "
|
|
49
|
+
target-version = "py312"
|
|
48
50
|
|
|
49
51
|
[tool.ruff.lint]
|
|
50
52
|
extend-select = ["A", "B904", "C4", "D", "E", "EM", "F541", "G", "I", "ICN", "LOG007", "N", "NPY", "PL", "RET", "RSE", "RUF", "Q", "T20", "TRY002", "TRY201", "TRY400", "TRY401", "UP032", "W"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
version = 1
|
|
2
2
|
revision = 3
|
|
3
|
-
requires-python = ">=3.
|
|
3
|
+
requires-python = ">=3.12"
|
|
4
4
|
|
|
5
5
|
[[package]]
|
|
6
6
|
name = "annotated-types"
|
|
@@ -17,6 +17,7 @@ version = "4.14.2"
|
|
|
17
17
|
source = { registry = "https://pypi.org/simple" }
|
|
18
18
|
dependencies = [
|
|
19
19
|
{ name = "idna" },
|
|
20
|
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
|
20
21
|
]
|
|
21
22
|
sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" }
|
|
22
23
|
wheels = [
|
|
@@ -46,8 +47,8 @@ dependencies = [
|
|
|
46
47
|
requires-dist = [
|
|
47
48
|
{ name = "fastexcel", specifier = ">=0.21.0" },
|
|
48
49
|
{ name = "httpx", specifier = ">=0.28.1" },
|
|
49
|
-
{ name = "polars", specifier = ">=1.44.
|
|
50
|
-
{ name = "pydantic", extras = ["email"], specifier = ">=2.13.
|
|
50
|
+
{ name = "polars", specifier = ">=1.44.1" },
|
|
51
|
+
{ name = "pydantic", extras = ["email"], specifier = ">=2.13.5" },
|
|
51
52
|
]
|
|
52
53
|
|
|
53
54
|
[[package]]
|
|
@@ -198,6 +199,36 @@ dependencies = [
|
|
|
198
199
|
]
|
|
199
200
|
sdist = { url = "https://files.pythonhosted.org/packages/af/f9/8a06bea35ef8daf588f707784c973a7046e0034c8d8cfb08828eeffb8b75/pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc", size = 472262, upload-time = "2026-08-28T10:01:31.677Z" }
|
|
200
201
|
wheels = [
|
|
202
|
+
{ url = "https://files.pythonhosted.org/packages/82/3f/76358795aa7a8c6d4f36e2cb828ad1c90ee118e1393a9281664f5aade9d4/pydantic_core-2.46.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d", size = 2076516, upload-time = "2026-08-28T09:58:21.576Z" },
|
|
203
|
+
{ url = "https://files.pythonhosted.org/packages/db/50/26b091836076ce4cb2fac264186936acc069e0595772cfd02a563bc4761a/pydantic_core-2.46.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e", size = 1922874, upload-time = "2026-08-28T09:58:23.766Z" },
|
|
204
|
+
{ url = "https://files.pythonhosted.org/packages/09/f0/2a8ce3849e299d44e2d2c196b6082643a3235565a735cb51db7a6261f614/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29", size = 1951772, upload-time = "2026-08-28T09:58:25.435Z" },
|
|
205
|
+
{ url = "https://files.pythonhosted.org/packages/87/46/ac0dc8bdd9e6048183a14eb127764e7ad9240021c17513074a4711b0e31e/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4", size = 2031832, upload-time = "2026-08-28T09:58:27.102Z" },
|
|
206
|
+
{ url = "https://files.pythonhosted.org/packages/c4/c2/339de5bef7be36301a2231eaa52e62163742c2281f11b5f4892bc79785cd/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a", size = 2208645, upload-time = "2026-08-28T09:58:28.948Z" },
|
|
207
|
+
{ url = "https://files.pythonhosted.org/packages/7b/a0/9ff22b797724262da14427abaed4dd1d864a139693fc5e7809114376a716/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62", size = 2265935, upload-time = "2026-08-28T09:58:30.625Z" },
|
|
208
|
+
{ url = "https://files.pythonhosted.org/packages/c0/a4/eb9409ec0736e50aa70a412f16c204ed149516846912f7e6724d4c73ee53/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2", size = 2066284, upload-time = "2026-08-28T09:58:32.289Z" },
|
|
209
|
+
{ url = "https://files.pythonhosted.org/packages/c0/02/7f6156ffc926857f1c37c07d9a388682865a81830ab6a1b637082c25e399/pydantic_core-2.46.5-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869", size = 2105889, upload-time = "2026-08-28T09:58:33.986Z" },
|
|
210
|
+
{ url = "https://files.pythonhosted.org/packages/92/b1/e781d357ebe09fc929f995700f1b3503e8897f1cece183ecb1300d4d67e9/pydantic_core-2.46.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5", size = 2158006, upload-time = "2026-08-28T09:58:35.647Z" },
|
|
211
|
+
{ url = "https://files.pythonhosted.org/packages/70/0a/644597d84ab400e50609c192120b85c9681c22d3a20461b9060a79be0a7a/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3", size = 2158408, upload-time = "2026-08-28T09:58:37.38Z" },
|
|
212
|
+
{ url = "https://files.pythonhosted.org/packages/1e/ee/ca3b7b3a4b3769ffe9ce9432a7c9be755de9593a46d3b0d54d0409323e44/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b", size = 2309609, upload-time = "2026-08-28T09:58:39.22Z" },
|
|
213
|
+
{ url = "https://files.pythonhosted.org/packages/ce/52/39fa1f451486019524ca685020390e7ca351832fd874530ba30c8628e6dc/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0", size = 2342618, upload-time = "2026-08-28T09:58:40.89Z" },
|
|
214
|
+
{ url = "https://files.pythonhosted.org/packages/81/5e/468fc630568c61dcef3cd47ad32ffbeed9af643f49208d1ea86ab4f890c4/pydantic_core-2.46.5-cp312-cp312-win32.whl", hash = "sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b", size = 1939475, upload-time = "2026-08-28T09:58:42.591Z" },
|
|
215
|
+
{ url = "https://files.pythonhosted.org/packages/cf/c9/4c19f41b84cf6b622a72fbeed7665b25d47a187d68d47d0d430c07f23268/pydantic_core-2.46.5-cp312-cp312-win_amd64.whl", hash = "sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8", size = 2043140, upload-time = "2026-08-28T09:58:44.272Z" },
|
|
216
|
+
{ url = "https://files.pythonhosted.org/packages/af/dd/0c1a050299147c746e5256db16d645ab5efd4f78c59937d581a0524e74a2/pydantic_core-2.46.5-cp312-cp312-win_arm64.whl", hash = "sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084", size = 1997729, upload-time = "2026-08-28T09:58:46.13Z" },
|
|
217
|
+
{ url = "https://files.pythonhosted.org/packages/f5/37/5abe39a8372a61d3dc3c1338fc504281c01b32fdb3169cd7187153b56d3e/pydantic_core-2.46.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0", size = 2075885, upload-time = "2026-08-28T09:58:47.856Z" },
|
|
218
|
+
{ url = "https://files.pythonhosted.org/packages/21/43/6323b1f8b217780454c61304bcd2b38ae4762f50754414124603ccc90bb2/pydantic_core-2.46.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff", size = 1922768, upload-time = "2026-08-28T09:58:49.58Z" },
|
|
219
|
+
{ url = "https://files.pythonhosted.org/packages/0f/a3/c05ca796e1197618a774b01e596aeedfefc2f7d8c01ae3054e910b120e8a/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931", size = 1951241, upload-time = "2026-08-28T09:58:51.511Z" },
|
|
220
|
+
{ url = "https://files.pythonhosted.org/packages/68/32/33bc39ac705c52cffc908e8389f9754fdb208aea5c69cceddf4eb3ce99af/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f", size = 2031975, upload-time = "2026-08-28T09:58:53.166Z" },
|
|
221
|
+
{ url = "https://files.pythonhosted.org/packages/b0/70/2333e885c0f6a67bc105c5916965dac9b57f2718ee20d81d1a06a4ebdc13/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038", size = 2208542, upload-time = "2026-08-28T09:58:55.017Z" },
|
|
222
|
+
{ url = "https://files.pythonhosted.org/packages/f7/ea/296debfb4264207bbda5936133892e027c0a58875ad53ebd512fba8ec3a2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f", size = 2264692, upload-time = "2026-08-28T09:58:56.767Z" },
|
|
223
|
+
{ url = "https://files.pythonhosted.org/packages/d3/f2/9e4de77a6271e07a76d2d58b11c091a979c191ed2939bf80067568b369d2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1", size = 2066633, upload-time = "2026-08-28T09:58:58.531Z" },
|
|
224
|
+
{ url = "https://files.pythonhosted.org/packages/8d/db/f9e9d0c97445987b2084823d5c240de88087338f04fc2cfaa2df186b8049/pydantic_core-2.46.5-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761", size = 2105235, upload-time = "2026-08-28T09:59:00.421Z" },
|
|
225
|
+
{ url = "https://files.pythonhosted.org/packages/07/c5/79169b047b3b2c3e99e04bc76372af9637e0bf6db638274fa927df96369e/pydantic_core-2.46.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5", size = 2157367, upload-time = "2026-08-28T09:59:02.442Z" },
|
|
226
|
+
{ url = "https://files.pythonhosted.org/packages/26/b5/ba6057afb7c291bd449f51b867f95aef2072941c4ce4e5c31d6ffd132d3b/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e", size = 2158420, upload-time = "2026-08-28T09:59:04.2Z" },
|
|
227
|
+
{ url = "https://files.pythonhosted.org/packages/6e/28/2057abecaafdc22912afa819603a51f0a62d40643b7c4871c51721fea9be/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed", size = 2309588, upload-time = "2026-08-28T09:59:06.048Z" },
|
|
228
|
+
{ url = "https://files.pythonhosted.org/packages/71/9d/881156dc404e27479c4246128d73538464cab4a239bec61995e227644c30/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519", size = 2341866, upload-time = "2026-08-28T09:59:08.539Z" },
|
|
229
|
+
{ url = "https://files.pythonhosted.org/packages/5a/38/d66f443a259f84d13babdceae568e572b0ed26da17ca5d0a649ebb110a67/pydantic_core-2.46.5-cp313-cp313-win32.whl", hash = "sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea", size = 1938580, upload-time = "2026-08-28T09:59:10.402Z" },
|
|
230
|
+
{ url = "https://files.pythonhosted.org/packages/2c/1e/1d5371213f4cc9a7ed70c0bfcc7911de22311ee99a662a56077d7292d2ac/pydantic_core-2.46.5-cp313-cp313-win_amd64.whl", hash = "sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5", size = 2041980, upload-time = "2026-08-28T09:59:12.396Z" },
|
|
231
|
+
{ url = "https://files.pythonhosted.org/packages/5a/48/4222d90b1c67568bace4dec6dca6271449c66de3595d72b6d098f5fde597/pydantic_core-2.46.5-cp313-cp313-win_arm64.whl", hash = "sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575", size = 1997213, upload-time = "2026-08-28T09:59:14.245Z" },
|
|
201
232
|
{ url = "https://files.pythonhosted.org/packages/8e/8a/14596f2a8367da50cf7cbac48169ee5d9c8e11d486a3b527082384630c72/pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355", size = 2074081, upload-time = "2026-08-28T09:59:16.141Z" },
|
|
202
233
|
{ url = "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e", size = 1920497, upload-time = "2026-08-28T09:59:18.065Z" },
|
|
203
234
|
{ url = "https://files.pythonhosted.org/packages/8e/26/092079428f86e927e030b2c0ced87df69dbb1c875cdeaa67bf42ea2be746/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3", size = 1952130, upload-time = "2026-08-28T09:59:20.476Z" },
|
|
@@ -228,6 +259,10 @@ wheels = [
|
|
|
228
259
|
{ url = "https://files.pythonhosted.org/packages/5a/9f/5d685c2693b972d1a59c998586e8823712b66603aeff47ee60a4bdaafd37/pydantic_core-2.46.5-cp314-cp314t-win32.whl", hash = "sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9", size = 1921180, upload-time = "2026-08-28T10:00:12.35Z" },
|
|
229
260
|
{ url = "https://files.pythonhosted.org/packages/70/12/5c94ee16d65a37a15f9e869f5e6256df111154491173801a4c5e800ab548/pydantic_core-2.46.5-cp314-cp314t-win_amd64.whl", hash = "sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290", size = 2020515, upload-time = "2026-08-28T10:00:14.774Z" },
|
|
230
261
|
{ url = "https://files.pythonhosted.org/packages/63/19/67830dda664e6bdf9285ee2e40f355d0d7d6b92aa0c42e8d217bb8d33d36/pydantic_core-2.46.5-cp314-cp314t-win_arm64.whl", hash = "sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f", size = 1989276, upload-time = "2026-08-28T10:00:16.984Z" },
|
|
262
|
+
{ url = "https://files.pythonhosted.org/packages/df/dd/053c2e4303f791f3b8f8a14ab0b22008e8eb21d868c0c90b4f9be705b76a/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942", size = 2062540, upload-time = "2026-08-28T10:01:00.318Z" },
|
|
263
|
+
{ url = "https://files.pythonhosted.org/packages/d7/dd/a18df751a5e37dd51bfad7f68e766999125bebe68c9e1d10a493ad01bd63/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f", size = 1902040, upload-time = "2026-08-28T10:01:02.529Z" },
|
|
264
|
+
{ url = "https://files.pythonhosted.org/packages/b7/13/01d40f9d07ce8a779fd6e0bd8ad4fba91309500dd67b869e2e219d261a6d/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433", size = 1967479, upload-time = "2026-08-28T10:01:05.004Z" },
|
|
265
|
+
{ url = "https://files.pythonhosted.org/packages/fa/04/c81d4841331c2178b6fb09ae225425e110ed72d990c9fe556c4ec03d1013/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c", size = 2111034, upload-time = "2026-08-28T10:01:07.345Z" },
|
|
231
266
|
]
|
|
232
267
|
|
|
233
268
|
[[package]]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3.14
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|