geotypes-py 0.1.0__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.
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,9 @@
1
+ Metadata-Version: 2.4
2
+ Name: geotypes-py
3
+ Version: 0.1.0
4
+ Summary: Add your description here
5
+ Author-email: Kevin Hill <kivo360@gmail.com>
6
+ Requires-Python: >=3.12
7
+ Requires-Dist: datamodel-code-generator>=0.27.2
8
+ Requires-Dist: email-validator>=2.2.0
9
+ Requires-Dist: pendulum>=3.0.0
File without changes
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ This script converts all JSON schema files from the 'schemas/json' folder
4
+ into Pydantic model files in the 'src/geodexes_schemas' directory using
5
+ datamodel-codegen and the following options:
6
+
7
+ --snake-case-field
8
+ --use-double-quotes
9
+ --wrap-string-literal
10
+ --use-standard-collections
11
+ --target-python-version 3.12
12
+ --default-null
13
+ --default-factory
14
+ --reuse-model
15
+ --force-optional
16
+ --use-pendulum
17
+ --use-title-as-name
18
+ --use-subclass-enum
19
+
20
+ These options ensure that your generated code adheres to modern Python
21
+ coding standards and best practices.
22
+ """
23
+
24
+ import os
25
+ import glob
26
+ import subprocess
27
+ from pathlib import Path
28
+ def generate_models():
29
+ # Define the input directory containing JSON schema files
30
+ input_dir = Path("schemas/json")
31
+ # Define the output directory where the generated code will be placed
32
+ output_dir = Path("src/geodexes_schemas")
33
+
34
+ # Ensure the output directory exists
35
+ os.makedirs(output_dir, exist_ok=True)
36
+
37
+ # Base command options for datamodel-codegen
38
+ base_command = [
39
+ "uv", "run", "datamodel-codegen",
40
+ "--snake-case-field",
41
+ "--use-double-quotes",
42
+ "--wrap-string-literal",
43
+ "--use-standard-collections",
44
+ "--target-python-version", "3.12",
45
+ # "--default-null",
46
+ # "--default-factory",
47
+ "--reuse-model",
48
+ "--force-optional",
49
+ "--use-pendulum",
50
+ "--use-title-as-name",
51
+ "--use-subclass-enum"
52
+ ]
53
+
54
+ # Use glob to list all JSON files in the input directory
55
+ json_files = glob.glob(os.path.join(input_dir, "*.json"))
56
+
57
+ if not json_files:
58
+ print(f"No JSON files found in {input_dir}.")
59
+ return
60
+
61
+ for json_file in json_files:
62
+ # Determine the base filename (e.g., company.json -> company.py)
63
+ basename = os.path.basename(json_file)
64
+ module_name, _ = os.path.splitext(basename)
65
+ output_file = os.path.join(output_dir, f"{module_name}.py")
66
+
67
+ # Build the complete command by adding input and output file arguments
68
+ command = base_command + [
69
+ "--input", json_file,
70
+ "--output", output_file
71
+ ]
72
+
73
+ print(f"Processing {json_file} -> {output_file}")
74
+ try:
75
+ subprocess.check_call(command)
76
+ except subprocess.CalledProcessError as e:
77
+ print(f"Error processing {json_file}: {e}")
78
+
79
+ def main():
80
+ generate_models()
81
+
82
+ if __name__ == "__main__":
83
+ main()
@@ -0,0 +1,18 @@
1
+ [project]
2
+ name = "geotypes-py"
3
+ version = "0.1.0"
4
+ description = "Add your description here"
5
+ readme = "README.md"
6
+ authors = [
7
+ { name = "Kevin Hill", email = "kivo360@gmail.com" }
8
+ ]
9
+ requires-python = ">=3.12"
10
+ dependencies = [
11
+ "datamodel-code-generator>=0.27.2",
12
+ "email-validator>=2.2.0",
13
+ "pendulum>=3.0.0",
14
+ ]
15
+
16
+ [build-system]
17
+ requires = ["hatchling"]
18
+ build-backend = "hatchling.build"
@@ -0,0 +1,102 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Company",
4
+ "type": "object",
5
+ "properties": {
6
+ "name": { "type": "string" },
7
+ "url": { "type": "string", "format": "uri" },
8
+ "logo": { "type": "string", "format": "uri" },
9
+ "description": { "type": "string" },
10
+ "foundingDate": { "type": "string", "format": "date" },
11
+ "industry": { "type": "string" },
12
+ "isPublic": { "type": "boolean" },
13
+ "tickerSymbol": { "type": "string" },
14
+ "contact": {
15
+ "type": "object",
16
+ "properties": {
17
+ "phone": { "type": "string" },
18
+ "contactType": { "type": "string" },
19
+ "email": { "type": "string", "format": "email" }
20
+ },
21
+ "required": [
22
+ "phone",
23
+ "contactType",
24
+ "email"
25
+ ]
26
+ },
27
+ "headquarters": {
28
+ "type": "object",
29
+ "properties": {
30
+ "street": { "type": "string" },
31
+ "city": { "type": "string" },
32
+ "region": { "type": "string" },
33
+ "postal": { "type": "string" },
34
+ "country": { "type": "string" },
35
+ "countryCode": { "type": "string" }
36
+ },
37
+ "required": [
38
+ "street",
39
+ "city",
40
+ "region",
41
+ "postal",
42
+ "country",
43
+ "countryCode"
44
+ ]
45
+ },
46
+ "socialProfiles": {
47
+ "type": "array",
48
+ "items": {
49
+ "type": "object",
50
+ "properties": {
51
+ "platform": { "type": "string" },
52
+ "profileUrl": { "type": "string", "format": "uri" },
53
+ "username": { "type": "string" },
54
+ "followerCount": { "type": "integer" },
55
+ "bio": { "type": "string" },
56
+ "profileImage": { "type": "string", "format": "uri" }
57
+ },
58
+ "required": [
59
+ "platform",
60
+ "profileUrl",
61
+ "username",
62
+ "followerCount",
63
+ "bio",
64
+ "profileImage"
65
+ ]
66
+ }
67
+ },
68
+ "duns": { "type": "string" },
69
+ "lei": { "type": "string" },
70
+ "employeeCount": {
71
+ "type": "object",
72
+ "properties": {
73
+ "min": { "type": "integer" },
74
+ "max": { "type": "integer" }
75
+ },
76
+ "required": [
77
+ "min",
78
+ "max"
79
+ ]
80
+ },
81
+ "mission": { "type": "string" },
82
+ "vision": { "type": "string" }
83
+ },
84
+ "required": [
85
+ "name",
86
+ "url",
87
+ "logo",
88
+ "description",
89
+ "foundingDate",
90
+ "industry",
91
+ "isPublic",
92
+ "tickerSymbol",
93
+ "contact",
94
+ "headquarters",
95
+ "socialProfiles",
96
+ "duns",
97
+ "lei",
98
+ "employeeCount",
99
+ "mission",
100
+ "vision"
101
+ ]
102
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "JobPosting",
4
+ "type": "object",
5
+ "properties": {
6
+ "title": { "type": "string" },
7
+ "company": { "type": "string" },
8
+ "type": { "type": "string" },
9
+ "date": { "type": "string" },
10
+ "description": { "type": "string" },
11
+ "location": {
12
+ "type": "object",
13
+ "properties": {
14
+ "address": { "type": "string" },
15
+ "postalCode": { "type": "string" },
16
+ "city": { "type": "string" },
17
+ "countryCode": { "type": "string" },
18
+ "region": { "type": "string" }
19
+ },
20
+ "required": [
21
+ "address",
22
+ "postalCode",
23
+ "city",
24
+ "countryCode",
25
+ "region"
26
+ ]
27
+ },
28
+ "remote": { "type": "string" },
29
+ "salary": { "type": "string" },
30
+ "experience": { "type": "string" },
31
+ "responsibilities": {
32
+ "type": "array",
33
+ "items": { "type": "string" }
34
+ },
35
+ "qualifications": {
36
+ "type": "array",
37
+ "items": { "type": "string" }
38
+ },
39
+ "skills": {
40
+ "type": "array",
41
+ "items": {
42
+ "type": "object",
43
+ "properties": {
44
+ "name": { "type": "string" },
45
+ "level": { "type": "string" },
46
+ "keywords": {
47
+ "type": "array",
48
+ "items": { "type": "string" }
49
+ }
50
+ },
51
+ "required": [
52
+ "name",
53
+ "level",
54
+ "keywords"
55
+ ]
56
+ }
57
+ }
58
+ },
59
+ "required": [
60
+ "title",
61
+ "company",
62
+ "type",
63
+ "date",
64
+ "description",
65
+ "location",
66
+ "remote",
67
+ "salary",
68
+ "experience",
69
+ "responsibilities",
70
+ "qualifications",
71
+ "skills"
72
+ ]
73
+ }
@@ -0,0 +1,304 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Resume",
4
+ "type": "object",
5
+ "properties": {
6
+ "basics": {
7
+ "type": "object",
8
+ "properties": {
9
+ "name": { "type": "string" },
10
+ "label": { "type": "string" },
11
+ "image": { "type": "string", "format": "uri" },
12
+ "email": { "type": "string", "format": "email" },
13
+ "phone": { "type": "string" },
14
+ "url": { "type": "string", "format": "uri" },
15
+ "summary": { "type": "string" },
16
+ "location": {
17
+ "type": "object",
18
+ "properties": {
19
+ "address": { "type": "string" },
20
+ "postalCode": { "type": "string" },
21
+ "city": { "type": "string" },
22
+ "countryCode": { "type": "string" },
23
+ "region": { "type": "string" }
24
+ },
25
+ "required": [
26
+ "address",
27
+ "postalCode",
28
+ "city",
29
+ "countryCode",
30
+ "region"
31
+ ]
32
+ },
33
+ "profiles": {
34
+ "type": "array",
35
+ "items": {
36
+ "type": "object",
37
+ "properties": {
38
+ "network": { "type": "string" },
39
+ "username": { "type": "string" },
40
+ "url": { "type": "string", "format": "uri" }
41
+ },
42
+ "required": [
43
+ "network",
44
+ "username",
45
+ "url"
46
+ ]
47
+ }
48
+ }
49
+ },
50
+ "required": [
51
+ "name",
52
+ "label",
53
+ "email",
54
+ "phone",
55
+ "url",
56
+ "summary",
57
+ "location",
58
+ "profiles"
59
+ ]
60
+ },
61
+ "experience": {
62
+ "type": "array",
63
+ "items": {
64
+ "type": "object",
65
+ "properties": {
66
+ "name": { "type": "string" },
67
+ "position": { "type": "string" },
68
+ "url": { "type": "string", "format": "uri" },
69
+ "startDate": { "type": "string", "format": "date" },
70
+ "endDate": { "type": "string", "format": "date" },
71
+ "summary": { "type": "string" },
72
+ "highlights": {
73
+ "type": "array",
74
+ "items": { "type": "string" }
75
+ }
76
+ },
77
+ "required": [
78
+ "name",
79
+ "position",
80
+ "url",
81
+ "startDate",
82
+ "endDate",
83
+ "summary",
84
+ "highlights"
85
+ ]
86
+ }
87
+ },
88
+ "volunteer": {
89
+ "type": "array",
90
+ "items": {
91
+ "type": "object",
92
+ "properties": {
93
+ "organization": { "type": "string" },
94
+ "position": { "type": "string" },
95
+ "url": { "type": "string", "format": "uri" },
96
+ "startDate": { "type": "string", "format": "date" },
97
+ "endDate": { "type": "string", "format": "date" },
98
+ "summary": { "type": "string" },
99
+ "highlights": {
100
+ "type": "array",
101
+ "items": { "type": "string" }
102
+ }
103
+ },
104
+ "required": [
105
+ "organization",
106
+ "position",
107
+ "url",
108
+ "startDate",
109
+ "endDate",
110
+ "summary",
111
+ "highlights"
112
+ ]
113
+ }
114
+ },
115
+ "education": {
116
+ "type": "array",
117
+ "items": {
118
+ "type": "object",
119
+ "properties": {
120
+ "institution": { "type": "string" },
121
+ "url": { "type": "string", "format": "uri" },
122
+ "area": { "type": "string" },
123
+ "studyType": { "type": "string" },
124
+ "startDate": { "type": "string", "format": "date" },
125
+ "endDate": { "type": "string", "format": "date" },
126
+ "score": { "type": "string" },
127
+ "courses": {
128
+ "type": "array",
129
+ "items": { "type": "string" }
130
+ }
131
+ },
132
+ "required": [
133
+ "institution",
134
+ "url",
135
+ "area",
136
+ "studyType",
137
+ "startDate",
138
+ "endDate",
139
+ "score",
140
+ "courses"
141
+ ]
142
+ }
143
+ },
144
+ "awards": {
145
+ "type": "array",
146
+ "items": {
147
+ "type": "object",
148
+ "properties": {
149
+ "title": { "type": "string" },
150
+ "date": { "type": "string", "format": "date" },
151
+ "awarder": { "type": "string" },
152
+ "summary": { "type": "string" }
153
+ },
154
+ "required": [
155
+ "title",
156
+ "date",
157
+ "awarder",
158
+ "summary"
159
+ ]
160
+ }
161
+ },
162
+ "certificates": {
163
+ "type": "array",
164
+ "items": {
165
+ "type": "object",
166
+ "properties": {
167
+ "name": { "type": "string" },
168
+ "date": { "type": "string", "format": "date" },
169
+ "issuer": { "type": "string" },
170
+ "url": { "type": "string", "format": "uri" }
171
+ },
172
+ "required": [
173
+ "name",
174
+ "date",
175
+ "issuer",
176
+ "url"
177
+ ]
178
+ }
179
+ },
180
+ "publications": {
181
+ "type": "array",
182
+ "items": {
183
+ "type": "object",
184
+ "properties": {
185
+ "name": { "type": "string" },
186
+ "publisher": { "type": "string" },
187
+ "releaseDate": { "type": "string", "format": "date" },
188
+ "url": { "type": "string", "format": "uri" },
189
+ "summary": { "type": "string" }
190
+ },
191
+ "required": [
192
+ "name",
193
+ "publisher",
194
+ "releaseDate",
195
+ "url",
196
+ "summary"
197
+ ]
198
+ }
199
+ },
200
+ "skills": {
201
+ "type": "array",
202
+ "items": {
203
+ "type": "object",
204
+ "properties": {
205
+ "name": { "type": "string" },
206
+ "level": { "type": "string" },
207
+ "keywords": {
208
+ "type": "array",
209
+ "items": { "type": "string" }
210
+ }
211
+ },
212
+ "required": [
213
+ "name",
214
+ "level",
215
+ "keywords"
216
+ ]
217
+ }
218
+ },
219
+ "languages": {
220
+ "type": "array",
221
+ "items": {
222
+ "type": "object",
223
+ "properties": {
224
+ "language": { "type": "string" },
225
+ "fluency": { "type": "string" }
226
+ },
227
+ "required": [
228
+ "language",
229
+ "fluency"
230
+ ]
231
+ }
232
+ },
233
+ "interests": {
234
+ "type": "array",
235
+ "items": {
236
+ "type": "object",
237
+ "properties": {
238
+ "name": { "type": "string" },
239
+ "keywords": {
240
+ "type": "array",
241
+ "items": { "type": "string" }
242
+ }
243
+ },
244
+ "required": [
245
+ "name",
246
+ "keywords"
247
+ ]
248
+ }
249
+ },
250
+ "references": {
251
+ "type": "array",
252
+ "items": {
253
+ "type": "object",
254
+ "properties": {
255
+ "name": { "type": "string" },
256
+ "reference": { "type": "string" }
257
+ },
258
+ "required": [
259
+ "name",
260
+ "reference"
261
+ ]
262
+ }
263
+ },
264
+ "projects": {
265
+ "type": "array",
266
+ "items": {
267
+ "type": "object",
268
+ "properties": {
269
+ "name": { "type": "string" },
270
+ "startDate": { "type": "string", "format": "date" },
271
+ "endDate": { "type": "string", "format": "date" },
272
+ "description": { "type": "string" },
273
+ "highlights": {
274
+ "type": "array",
275
+ "items": { "type": "string" }
276
+ },
277
+ "url": { "type": "string", "format": "uri" }
278
+ },
279
+ "required": [
280
+ "name",
281
+ "startDate",
282
+ "endDate",
283
+ "description",
284
+ "highlights",
285
+ "url"
286
+ ]
287
+ }
288
+ }
289
+ },
290
+ "required": [
291
+ "basics",
292
+ "experience",
293
+ "volunteer",
294
+ "education",
295
+ "awards",
296
+ "certificates",
297
+ "publications",
298
+ "skills",
299
+ "languages",
300
+ "interests",
301
+ "references",
302
+ "projects"
303
+ ]
304
+ }
@@ -0,0 +1,6 @@
1
+ from .resume import Resume
2
+ from .job_posting import JobPosting
3
+ from .company import Company
4
+
5
+
6
+ __all__ = ["Resume", "JobPosting", "Company"]
@@ -0,0 +1,58 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: company.json
3
+ # timestamp: 2025-02-09T20:28:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Optional
8
+
9
+ from pendulum import Date
10
+ from pydantic import AnyUrl, BaseModel, EmailStr, Field
11
+
12
+
13
+ class Contact(BaseModel):
14
+ phone: Optional[str] = None
15
+ contact_type: Optional[str] = Field(None, alias="contactType")
16
+ email: Optional[EmailStr] = None
17
+
18
+
19
+ class Headquarters(BaseModel):
20
+ street: Optional[str] = None
21
+ city: Optional[str] = None
22
+ region: Optional[str] = None
23
+ postal: Optional[str] = None
24
+ country: Optional[str] = None
25
+ country_code: Optional[str] = Field(None, alias="countryCode")
26
+
27
+
28
+ class SocialProfile(BaseModel):
29
+ platform: Optional[str] = None
30
+ profile_url: Optional[AnyUrl] = Field(None, alias="profileUrl")
31
+ username: Optional[str] = None
32
+ follower_count: Optional[int] = Field(None, alias="followerCount")
33
+ bio: Optional[str] = None
34
+ profile_image: Optional[AnyUrl] = Field(None, alias="profileImage")
35
+
36
+
37
+ class EmployeeCount(BaseModel):
38
+ min: Optional[int] = None
39
+ max: Optional[int] = None
40
+
41
+
42
+ class Company(BaseModel):
43
+ name: Optional[str] = None
44
+ url: Optional[AnyUrl] = None
45
+ logo: Optional[AnyUrl] = None
46
+ description: Optional[str] = None
47
+ founding_date: Optional[Date] = Field(None, alias="foundingDate")
48
+ industry: Optional[str] = None
49
+ is_public: Optional[bool] = Field(None, alias="isPublic")
50
+ ticker_symbol: Optional[str] = Field(None, alias="tickerSymbol")
51
+ contact: Optional[Contact] = None
52
+ headquarters: Optional[Headquarters] = None
53
+ social_profiles: Optional[list[SocialProfile]] = Field(None, alias="socialProfiles")
54
+ duns: Optional[str] = None
55
+ lei: Optional[str] = None
56
+ employee_count: Optional[EmployeeCount] = Field(None, alias="employeeCount")
57
+ mission: Optional[str] = None
58
+ vision: Optional[str] = None
@@ -0,0 +1,38 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: job_posting.json
3
+ # timestamp: 2025-02-09T20:28:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Optional
8
+
9
+ from pydantic import BaseModel, Field
10
+
11
+
12
+ class Location(BaseModel):
13
+ address: Optional[str] = None
14
+ postal_code: Optional[str] = Field(None, alias="postalCode")
15
+ city: Optional[str] = None
16
+ country_code: Optional[str] = Field(None, alias="countryCode")
17
+ region: Optional[str] = None
18
+
19
+
20
+ class Skill(BaseModel):
21
+ name: Optional[str] = None
22
+ level: Optional[str] = None
23
+ keywords: Optional[list[str]] = None
24
+
25
+
26
+ class JobPosting(BaseModel):
27
+ title: Optional[str] = None
28
+ company: Optional[str] = None
29
+ type: Optional[str] = None
30
+ date: Optional[str] = None
31
+ description: Optional[str] = None
32
+ location: Optional[Location] = None
33
+ remote: Optional[str] = None
34
+ salary: Optional[str] = None
35
+ experience: Optional[str] = None
36
+ responsibilities: Optional[list[str]] = None
37
+ qualifications: Optional[list[str]] = None
38
+ skills: Optional[list[Skill]] = None
File without changes
@@ -0,0 +1,134 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: resume.json
3
+ # timestamp: 2025-02-09T20:28:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Optional
8
+
9
+ from pendulum import Date
10
+ from pydantic import AnyUrl, BaseModel, EmailStr, Field
11
+
12
+
13
+ class Location(BaseModel):
14
+ address: Optional[str] = None
15
+ postal_code: Optional[str] = Field(None, alias="postalCode")
16
+ city: Optional[str] = None
17
+ country_code: Optional[str] = Field(None, alias="countryCode")
18
+ region: Optional[str] = None
19
+
20
+
21
+ class Profile(BaseModel):
22
+ network: Optional[str] = None
23
+ username: Optional[str] = None
24
+ url: Optional[AnyUrl] = None
25
+
26
+
27
+ class Basics(BaseModel):
28
+ name: Optional[str] = None
29
+ label: Optional[str] = None
30
+ image: Optional[AnyUrl] = None
31
+ email: Optional[EmailStr] = None
32
+ phone: Optional[str] = None
33
+ url: Optional[AnyUrl] = None
34
+ summary: Optional[str] = None
35
+ location: Optional[Location] = None
36
+ profiles: Optional[list[Profile]] = None
37
+
38
+
39
+ class ExperienceItem(BaseModel):
40
+ name: Optional[str] = None
41
+ position: Optional[str] = None
42
+ url: Optional[AnyUrl] = None
43
+ start_date: Optional[Date] = Field(None, alias="startDate")
44
+ end_date: Optional[Date] = Field(None, alias="endDate")
45
+ summary: Optional[str] = None
46
+ highlights: Optional[list[str]] = None
47
+
48
+
49
+ class VolunteerItem(BaseModel):
50
+ organization: Optional[str] = None
51
+ position: Optional[str] = None
52
+ url: Optional[AnyUrl] = None
53
+ start_date: Optional[Date] = Field(None, alias="startDate")
54
+ end_date: Optional[Date] = Field(None, alias="endDate")
55
+ summary: Optional[str] = None
56
+ highlights: Optional[list[str]] = None
57
+
58
+
59
+ class EducationItem(BaseModel):
60
+ institution: Optional[str] = None
61
+ url: Optional[AnyUrl] = None
62
+ area: Optional[str] = None
63
+ study_type: Optional[str] = Field(None, alias="studyType")
64
+ start_date: Optional[Date] = Field(None, alias="startDate")
65
+ end_date: Optional[Date] = Field(None, alias="endDate")
66
+ score: Optional[str] = None
67
+ courses: Optional[list[str]] = None
68
+
69
+
70
+ class Award(BaseModel):
71
+ title: Optional[str] = None
72
+ date: Optional[Date] = None
73
+ awarder: Optional[str] = None
74
+ summary: Optional[str] = None
75
+
76
+
77
+ class Certificate(BaseModel):
78
+ name: Optional[str] = None
79
+ date: Optional[Date] = None
80
+ issuer: Optional[str] = None
81
+ url: Optional[AnyUrl] = None
82
+
83
+
84
+ class Publication(BaseModel):
85
+ name: Optional[str] = None
86
+ publisher: Optional[str] = None
87
+ release_date: Optional[Date] = Field(None, alias="releaseDate")
88
+ url: Optional[AnyUrl] = None
89
+ summary: Optional[str] = None
90
+
91
+
92
+ class Skill(BaseModel):
93
+ name: Optional[str] = None
94
+ level: Optional[str] = None
95
+ keywords: Optional[list[str]] = None
96
+
97
+
98
+ class Language(BaseModel):
99
+ language: Optional[str] = None
100
+ fluency: Optional[str] = None
101
+
102
+
103
+ class Interest(BaseModel):
104
+ name: Optional[str] = None
105
+ keywords: Optional[list[str]] = None
106
+
107
+
108
+ class Reference(BaseModel):
109
+ name: Optional[str] = None
110
+ reference: Optional[str] = None
111
+
112
+
113
+ class Project(BaseModel):
114
+ name: Optional[str] = None
115
+ start_date: Optional[Date] = Field(None, alias="startDate")
116
+ end_date: Optional[Date] = Field(None, alias="endDate")
117
+ description: Optional[str] = None
118
+ highlights: Optional[list[str]] = None
119
+ url: Optional[AnyUrl] = None
120
+
121
+
122
+ class Resume(BaseModel):
123
+ basics: Optional[Basics] = None
124
+ experience: Optional[list[ExperienceItem]] = None
125
+ volunteer: Optional[list[VolunteerItem]] = None
126
+ education: Optional[list[EducationItem]] = None
127
+ awards: Optional[list[Award]] = None
128
+ certificates: Optional[list[Certificate]] = None
129
+ publications: Optional[list[Publication]] = None
130
+ skills: Optional[list[Skill]] = None
131
+ languages: Optional[list[Language]] = None
132
+ interests: Optional[list[Interest]] = None
133
+ references: Optional[list[Reference]] = None
134
+ projects: Optional[list[Project]] = None
@@ -0,0 +1,420 @@
1
+ version = 1
2
+ requires-python = ">=3.12"
3
+
4
+ [[package]]
5
+ name = "annotated-types"
6
+ version = "0.7.0"
7
+ source = { registry = "https://pypi.org/simple" }
8
+ sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
9
+ wheels = [
10
+ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
11
+ ]
12
+
13
+ [[package]]
14
+ name = "argcomplete"
15
+ version = "3.5.3"
16
+ source = { registry = "https://pypi.org/simple" }
17
+ sdist = { url = "https://files.pythonhosted.org/packages/0c/be/6c23d80cb966fb8f83fb1ebfb988351ae6b0554d0c3a613ee4531c026597/argcomplete-3.5.3.tar.gz", hash = "sha256:c12bf50eded8aebb298c7b7da7a5ff3ee24dffd9f5281867dfe1424b58c55392", size = 72999 }
18
+ wheels = [
19
+ { url = "https://files.pythonhosted.org/packages/c4/08/2a4db06ec3d203124c967fc89295e85a202e5cbbcdc08fd6a64b65217d1e/argcomplete-3.5.3-py3-none-any.whl", hash = "sha256:2ab2c4a215c59fd6caaff41a869480a23e8f6a5f910b266c1808037f4e375b61", size = 43569 },
20
+ ]
21
+
22
+ [[package]]
23
+ name = "black"
24
+ version = "25.1.0"
25
+ source = { registry = "https://pypi.org/simple" }
26
+ dependencies = [
27
+ { name = "click" },
28
+ { name = "mypy-extensions" },
29
+ { name = "packaging" },
30
+ { name = "pathspec" },
31
+ { name = "platformdirs" },
32
+ ]
33
+ sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449 }
34
+ wheels = [
35
+ { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988 },
36
+ { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985 },
37
+ { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816 },
38
+ { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860 },
39
+ { url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673 },
40
+ { url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190 },
41
+ { url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926 },
42
+ { url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613 },
43
+ { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646 },
44
+ ]
45
+
46
+ [[package]]
47
+ name = "click"
48
+ version = "8.1.8"
49
+ source = { registry = "https://pypi.org/simple" }
50
+ dependencies = [
51
+ { name = "colorama", marker = "sys_platform == 'win32'" },
52
+ ]
53
+ sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
54
+ wheels = [
55
+ { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 },
56
+ ]
57
+
58
+ [[package]]
59
+ name = "colorama"
60
+ version = "0.4.6"
61
+ source = { registry = "https://pypi.org/simple" }
62
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
63
+ wheels = [
64
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
65
+ ]
66
+
67
+ [[package]]
68
+ name = "datamodel-code-generator"
69
+ version = "0.27.2"
70
+ source = { registry = "https://pypi.org/simple" }
71
+ dependencies = [
72
+ { name = "argcomplete" },
73
+ { name = "black" },
74
+ { name = "genson" },
75
+ { name = "inflect" },
76
+ { name = "isort" },
77
+ { name = "jinja2" },
78
+ { name = "packaging" },
79
+ { name = "pydantic" },
80
+ { name = "pyyaml" },
81
+ ]
82
+ sdist = { url = "https://files.pythonhosted.org/packages/8c/49/9cb4f868856304dd4e2fc0795d848889a7c9c6f2539165ad24977cef0da3/datamodel_code_generator-0.27.2.tar.gz", hash = "sha256:1a7655f5fd3a61329b57534904f5c40dd850850e420696fd946ec7a4f59c32b8", size = 436345 }
83
+ wheels = [
84
+ { url = "https://files.pythonhosted.org/packages/73/a0/678f10ecc40f1cce3c170246c3dd1b86735867d2844eb9f4596abf187dac/datamodel_code_generator-0.27.2-py3-none-any.whl", hash = "sha256:efcbfbe6a1488d3411fc588b1ce1af5f854f5107810b1cc9026a6d6333a7c4d8", size = 115483 },
85
+ ]
86
+
87
+ [[package]]
88
+ name = "dnspython"
89
+ version = "2.7.0"
90
+ source = { registry = "https://pypi.org/simple" }
91
+ sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197 }
92
+ wheels = [
93
+ { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632 },
94
+ ]
95
+
96
+ [[package]]
97
+ name = "email-validator"
98
+ version = "2.2.0"
99
+ source = { registry = "https://pypi.org/simple" }
100
+ dependencies = [
101
+ { name = "dnspython" },
102
+ { name = "idna" },
103
+ ]
104
+ sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967 }
105
+ wheels = [
106
+ { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521 },
107
+ ]
108
+
109
+ [[package]]
110
+ name = "genson"
111
+ version = "1.3.0"
112
+ source = { registry = "https://pypi.org/simple" }
113
+ sdist = { url = "https://files.pythonhosted.org/packages/c5/cf/2303c8ad276dcf5ee2ad6cf69c4338fd86ef0f471a5207b069adf7a393cf/genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37", size = 34919 }
114
+ wheels = [
115
+ { url = "https://files.pythonhosted.org/packages/f8/5c/e226de133afd8bb267ec27eead9ae3d784b95b39a287ed404caab39a5f50/genson-1.3.0-py3-none-any.whl", hash = "sha256:468feccd00274cc7e4c09e84b08704270ba8d95232aa280f65b986139cec67f7", size = 21470 },
116
+ ]
117
+
118
+ [[package]]
119
+ name = "geotypes-py"
120
+ version = "0.1.0"
121
+ source = { editable = "." }
122
+ dependencies = [
123
+ { name = "datamodel-code-generator" },
124
+ { name = "email-validator" },
125
+ { name = "pendulum" },
126
+ ]
127
+
128
+ [package.metadata]
129
+ requires-dist = [
130
+ { name = "datamodel-code-generator", specifier = ">=0.27.2" },
131
+ { name = "email-validator", specifier = ">=2.2.0" },
132
+ { name = "pendulum", specifier = ">=3.0.0" },
133
+ ]
134
+
135
+ [[package]]
136
+ name = "idna"
137
+ version = "3.10"
138
+ source = { registry = "https://pypi.org/simple" }
139
+ sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
140
+ wheels = [
141
+ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
142
+ ]
143
+
144
+ [[package]]
145
+ name = "inflect"
146
+ version = "5.6.2"
147
+ source = { registry = "https://pypi.org/simple" }
148
+ sdist = { url = "https://files.pythonhosted.org/packages/cb/db/cae5d8524c4b5e574c281895b212062f3b06d0e14186904ed71c538b4e90/inflect-5.6.2.tar.gz", hash = "sha256:aadc7ed73928f5e014129794bbac03058cca35d0a973a5fc4eb45c7fa26005f9", size = 69378 }
149
+ wheels = [
150
+ { url = "https://files.pythonhosted.org/packages/df/d8/3e1a32d305215166f5c32652c473aa766bd7809cd10b34c544dbc31facb5/inflect-5.6.2-py3-none-any.whl", hash = "sha256:b45d91a4a28a4e617ff1821117439b06eaa86e2a4573154af0149e9be6687238", size = 33704 },
151
+ ]
152
+
153
+ [[package]]
154
+ name = "isort"
155
+ version = "6.0.0"
156
+ source = { registry = "https://pypi.org/simple" }
157
+ sdist = { url = "https://files.pythonhosted.org/packages/1c/28/b382d1656ac0ee4cef4bf579b13f9c6c813bff8a5cb5996669592c8c75fa/isort-6.0.0.tar.gz", hash = "sha256:75d9d8a1438a9432a7d7b54f2d3b45cad9a4a0fdba43617d9873379704a8bdf1", size = 828356 }
158
+ wheels = [
159
+ { url = "https://files.pythonhosted.org/packages/76/c7/d6017f09ae5b1206fbe531f7af3b6dac1f67aedcbd2e79f3b386c27955d6/isort-6.0.0-py3-none-any.whl", hash = "sha256:567954102bb47bb12e0fae62606570faacddd441e45683968c8d1734fb1af892", size = 94053 },
160
+ ]
161
+
162
+ [[package]]
163
+ name = "jinja2"
164
+ version = "3.1.5"
165
+ source = { registry = "https://pypi.org/simple" }
166
+ dependencies = [
167
+ { name = "markupsafe" },
168
+ ]
169
+ sdist = { url = "https://files.pythonhosted.org/packages/af/92/b3130cbbf5591acf9ade8708c365f3238046ac7cb8ccba6e81abccb0ccff/jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", size = 244674 }
170
+ wheels = [
171
+ { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596 },
172
+ ]
173
+
174
+ [[package]]
175
+ name = "markupsafe"
176
+ version = "3.0.2"
177
+ source = { registry = "https://pypi.org/simple" }
178
+ sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 }
179
+ wheels = [
180
+ { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 },
181
+ { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 },
182
+ { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 },
183
+ { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 },
184
+ { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 },
185
+ { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 },
186
+ { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 },
187
+ { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 },
188
+ { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 },
189
+ { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 },
190
+ { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 },
191
+ { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 },
192
+ { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 },
193
+ { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 },
194
+ { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 },
195
+ { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 },
196
+ { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 },
197
+ { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 },
198
+ { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 },
199
+ { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 },
200
+ { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 },
201
+ { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 },
202
+ { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 },
203
+ { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 },
204
+ { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 },
205
+ { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 },
206
+ { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 },
207
+ { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 },
208
+ { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 },
209
+ { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 },
210
+ ]
211
+
212
+ [[package]]
213
+ name = "mypy-extensions"
214
+ version = "1.0.0"
215
+ source = { registry = "https://pypi.org/simple" }
216
+ sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 }
217
+ wheels = [
218
+ { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 },
219
+ ]
220
+
221
+ [[package]]
222
+ name = "packaging"
223
+ version = "24.2"
224
+ source = { registry = "https://pypi.org/simple" }
225
+ sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 }
226
+ wheels = [
227
+ { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
228
+ ]
229
+
230
+ [[package]]
231
+ name = "pathspec"
232
+ version = "0.12.1"
233
+ source = { registry = "https://pypi.org/simple" }
234
+ sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 }
235
+ wheels = [
236
+ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 },
237
+ ]
238
+
239
+ [[package]]
240
+ name = "pendulum"
241
+ version = "3.0.0"
242
+ source = { registry = "https://pypi.org/simple" }
243
+ dependencies = [
244
+ { name = "python-dateutil" },
245
+ { name = "time-machine", marker = "implementation_name != 'pypy'" },
246
+ { name = "tzdata" },
247
+ ]
248
+ sdist = { url = "https://files.pythonhosted.org/packages/b8/fe/27c7438c6ac8b8f8bef3c6e571855602ee784b85d072efddfff0ceb1cd77/pendulum-3.0.0.tar.gz", hash = "sha256:5d034998dea404ec31fae27af6b22cff1708f830a1ed7353be4d1019bb9f584e", size = 84524 }
249
+ wheels = [
250
+ { url = "https://files.pythonhosted.org/packages/1e/37/17c8f0e7481a32f21b9002dd68912a8813f2c1d77b984e00af56eb9ae31b/pendulum-3.0.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:409e64e41418c49f973d43a28afe5df1df4f1dd87c41c7c90f1a63f61ae0f1f7", size = 362284 },
251
+ { url = "https://files.pythonhosted.org/packages/12/e6/08f462f6ea87e2159f19b43ff88231d26e02bda31c10bcb29290a617ace4/pendulum-3.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a38ad2121c5ec7c4c190c7334e789c3b4624798859156b138fcc4d92295835dc", size = 352964 },
252
+ { url = "https://files.pythonhosted.org/packages/47/29/b6877f6b53b91356c2c56d19ddab17b165ca994ad1e57b32c089e79f3fb5/pendulum-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fde4d0b2024b9785f66b7f30ed59281bd60d63d9213cda0eb0910ead777f6d37", size = 335848 },
253
+ { url = "https://files.pythonhosted.org/packages/2b/77/62ca666f30b2558342deadda26290a575459a7b59248ea1e978b84175227/pendulum-3.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2c5675769fb6d4c11238132962939b960fcb365436b6d623c5864287faa319", size = 362215 },
254
+ { url = "https://files.pythonhosted.org/packages/e0/29/ce37593f5ea51862c60dadf4e863d604f954478b3abbcc60a14dc05e242c/pendulum-3.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8af95e03e066826f0f4c65811cbee1b3123d4a45a1c3a2b4fc23c4b0dff893b5", size = 448673 },
255
+ { url = "https://files.pythonhosted.org/packages/72/6a/68a8c7b8f1977d89aabfd0e2becb0921e5515dfb365097e98a522334a151/pendulum-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2165a8f33cb15e06c67070b8afc87a62b85c5a273e3aaa6bc9d15c93a4920d6f", size = 384891 },
256
+ { url = "https://files.pythonhosted.org/packages/30/e6/edd699300f47a3c53c0d8ed26e905b9a31057c3646211e58cc540716a440/pendulum-3.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ad5e65b874b5e56bd942546ea7ba9dd1d6a25121db1c517700f1c9de91b28518", size = 559558 },
257
+ { url = "https://files.pythonhosted.org/packages/d4/97/95a44aa5e1763d3a966551ed0e12f56508d8dfcc60e1f0395909b6a08626/pendulum-3.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17fe4b2c844bbf5f0ece69cfd959fa02957c61317b2161763950d88fed8e13b9", size = 558240 },
258
+ { url = "https://files.pythonhosted.org/packages/9a/91/fcd992eb36b77ab43f2cf44307b72c01a6fbb27f55c1bb2d4af30e9a6cb7/pendulum-3.0.0-cp312-none-win_amd64.whl", hash = "sha256:78f8f4e7efe5066aca24a7a57511b9c2119f5c2b5eb81c46ff9222ce11e0a7a5", size = 293456 },
259
+ { url = "https://files.pythonhosted.org/packages/3b/60/ba8aa296ca6d76603d58146b4a222cd99e7da33831158b8c00240a896a56/pendulum-3.0.0-cp312-none-win_arm64.whl", hash = "sha256:28f49d8d1e32aae9c284a90b6bb3873eee15ec6e1d9042edd611b22a94ac462f", size = 288054 },
260
+ ]
261
+
262
+ [[package]]
263
+ name = "platformdirs"
264
+ version = "4.3.6"
265
+ source = { registry = "https://pypi.org/simple" }
266
+ sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 }
267
+ wheels = [
268
+ { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 },
269
+ ]
270
+
271
+ [[package]]
272
+ name = "pydantic"
273
+ version = "2.10.6"
274
+ source = { registry = "https://pypi.org/simple" }
275
+ dependencies = [
276
+ { name = "annotated-types" },
277
+ { name = "pydantic-core" },
278
+ { name = "typing-extensions" },
279
+ ]
280
+ sdist = { url = "https://files.pythonhosted.org/packages/b7/ae/d5220c5c52b158b1de7ca89fc5edb72f304a70a4c540c84c8844bf4008de/pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236", size = 761681 }
281
+ wheels = [
282
+ { url = "https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", size = 431696 },
283
+ ]
284
+
285
+ [[package]]
286
+ name = "pydantic-core"
287
+ version = "2.27.2"
288
+ source = { registry = "https://pypi.org/simple" }
289
+ dependencies = [
290
+ { name = "typing-extensions" },
291
+ ]
292
+ sdist = { url = "https://files.pythonhosted.org/packages/fc/01/f3e5ac5e7c25833db5eb555f7b7ab24cd6f8c322d3a3ad2d67a952dc0abc/pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", size = 413443 }
293
+ wheels = [
294
+ { url = "https://files.pythonhosted.org/packages/d6/74/51c8a5482ca447871c93e142d9d4a92ead74de6c8dc5e66733e22c9bba89/pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", size = 1893127 },
295
+ { url = "https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", size = 1811340 },
296
+ { url = "https://files.pythonhosted.org/packages/9e/91/840ec1375e686dbae1bd80a9e46c26a1e0083e1186abc610efa3d9a36180/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", size = 1822900 },
297
+ { url = "https://files.pythonhosted.org/packages/f6/31/4240bc96025035500c18adc149aa6ffdf1a0062a4b525c932065ceb4d868/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", size = 1869177 },
298
+ { url = "https://files.pythonhosted.org/packages/fa/20/02fbaadb7808be578317015c462655c317a77a7c8f0ef274bc016a784c54/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", size = 2038046 },
299
+ { url = "https://files.pythonhosted.org/packages/06/86/7f306b904e6c9eccf0668248b3f272090e49c275bc488a7b88b0823444a4/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", size = 2685386 },
300
+ { url = "https://files.pythonhosted.org/packages/8d/f0/49129b27c43396581a635d8710dae54a791b17dfc50c70164866bbf865e3/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", size = 1997060 },
301
+ { url = "https://files.pythonhosted.org/packages/0d/0f/943b4af7cd416c477fd40b187036c4f89b416a33d3cc0ab7b82708a667aa/pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", size = 2004870 },
302
+ { url = "https://files.pythonhosted.org/packages/35/40/aea70b5b1a63911c53a4c8117c0a828d6790483f858041f47bab0b779f44/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", size = 1999822 },
303
+ { url = "https://files.pythonhosted.org/packages/f2/b3/807b94fd337d58effc5498fd1a7a4d9d59af4133e83e32ae39a96fddec9d/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", size = 2130364 },
304
+ { url = "https://files.pythonhosted.org/packages/fc/df/791c827cd4ee6efd59248dca9369fb35e80a9484462c33c6649a8d02b565/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", size = 2158303 },
305
+ { url = "https://files.pythonhosted.org/packages/9b/67/4e197c300976af185b7cef4c02203e175fb127e414125916bf1128b639a9/pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", size = 1834064 },
306
+ { url = "https://files.pythonhosted.org/packages/1f/ea/cd7209a889163b8dcca139fe32b9687dd05249161a3edda62860430457a5/pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", size = 1989046 },
307
+ { url = "https://files.pythonhosted.org/packages/bc/49/c54baab2f4658c26ac633d798dab66b4c3a9bbf47cff5284e9c182f4137a/pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", size = 1885092 },
308
+ { url = "https://files.pythonhosted.org/packages/41/b1/9bc383f48f8002f99104e3acff6cba1231b29ef76cfa45d1506a5cad1f84/pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", size = 1892709 },
309
+ { url = "https://files.pythonhosted.org/packages/10/6c/e62b8657b834f3eb2961b49ec8e301eb99946245e70bf42c8817350cbefc/pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", size = 1811273 },
310
+ { url = "https://files.pythonhosted.org/packages/ba/15/52cfe49c8c986e081b863b102d6b859d9defc63446b642ccbbb3742bf371/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", size = 1823027 },
311
+ { url = "https://files.pythonhosted.org/packages/b1/1c/b6f402cfc18ec0024120602bdbcebc7bdd5b856528c013bd4d13865ca473/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", size = 1868888 },
312
+ { url = "https://files.pythonhosted.org/packages/bd/7b/8cb75b66ac37bc2975a3b7de99f3c6f355fcc4d89820b61dffa8f1e81677/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", size = 2037738 },
313
+ { url = "https://files.pythonhosted.org/packages/c8/f1/786d8fe78970a06f61df22cba58e365ce304bf9b9f46cc71c8c424e0c334/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", size = 2685138 },
314
+ { url = "https://files.pythonhosted.org/packages/a6/74/d12b2cd841d8724dc8ffb13fc5cef86566a53ed358103150209ecd5d1999/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", size = 1997025 },
315
+ { url = "https://files.pythonhosted.org/packages/a0/6e/940bcd631bc4d9a06c9539b51f070b66e8f370ed0933f392db6ff350d873/pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", size = 2004633 },
316
+ { url = "https://files.pythonhosted.org/packages/50/cc/a46b34f1708d82498c227d5d80ce615b2dd502ddcfd8376fc14a36655af1/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", size = 1999404 },
317
+ { url = "https://files.pythonhosted.org/packages/ca/2d/c365cfa930ed23bc58c41463bae347d1005537dc8db79e998af8ba28d35e/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", size = 2130130 },
318
+ { url = "https://files.pythonhosted.org/packages/f4/d7/eb64d015c350b7cdb371145b54d96c919d4db516817f31cd1c650cae3b21/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", size = 2157946 },
319
+ { url = "https://files.pythonhosted.org/packages/a4/99/bddde3ddde76c03b65dfd5a66ab436c4e58ffc42927d4ff1198ffbf96f5f/pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", size = 1834387 },
320
+ { url = "https://files.pythonhosted.org/packages/71/47/82b5e846e01b26ac6f1893d3c5f9f3a2eb6ba79be26eef0b759b4fe72946/pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", size = 1990453 },
321
+ { url = "https://files.pythonhosted.org/packages/51/b2/b2b50d5ecf21acf870190ae5d093602d95f66c9c31f9d5de6062eb329ad1/pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", size = 1885186 },
322
+ ]
323
+
324
+ [[package]]
325
+ name = "python-dateutil"
326
+ version = "2.9.0.post0"
327
+ source = { registry = "https://pypi.org/simple" }
328
+ dependencies = [
329
+ { name = "six" },
330
+ ]
331
+ sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 }
332
+ wheels = [
333
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
334
+ ]
335
+
336
+ [[package]]
337
+ name = "pyyaml"
338
+ version = "6.0.2"
339
+ source = { registry = "https://pypi.org/simple" }
340
+ sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 }
341
+ wheels = [
342
+ { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 },
343
+ { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 },
344
+ { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 },
345
+ { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 },
346
+ { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 },
347
+ { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 },
348
+ { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 },
349
+ { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 },
350
+ { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 },
351
+ { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 },
352
+ { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 },
353
+ { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 },
354
+ { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 },
355
+ { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 },
356
+ { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 },
357
+ { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 },
358
+ { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 },
359
+ { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 },
360
+ ]
361
+
362
+ [[package]]
363
+ name = "six"
364
+ version = "1.17.0"
365
+ source = { registry = "https://pypi.org/simple" }
366
+ sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
367
+ wheels = [
368
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
369
+ ]
370
+
371
+ [[package]]
372
+ name = "time-machine"
373
+ version = "2.16.0"
374
+ source = { registry = "https://pypi.org/simple" }
375
+ dependencies = [
376
+ { name = "python-dateutil" },
377
+ ]
378
+ sdist = { url = "https://files.pythonhosted.org/packages/fb/dd/5022939b9cadefe3af04f4012186c29b8afbe858b1ec2cfa38baeec94dab/time_machine-2.16.0.tar.gz", hash = "sha256:4a99acc273d2f98add23a89b94d4dd9e14969c01214c8514bfa78e4e9364c7e2", size = 24626 }
379
+ wheels = [
380
+ { url = "https://files.pythonhosted.org/packages/4a/f4/603a84e7ae6427a53953db9f61b689dc6adf233e03c5f5ca907a901452fd/time_machine-2.16.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:84788f4d62a8b1bf5e499bb9b0e23ceceea21c415ad6030be6267ce3d639842f", size = 20155 },
381
+ { url = "https://files.pythonhosted.org/packages/d8/94/dbe69aecb4b84be52d34814e63176c5ca61f38ee9e6ecda11104653405b5/time_machine-2.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:15ec236b6571730236a193d9d6c11d472432fc6ab54e85eac1c16d98ddcd71bf", size = 16640 },
382
+ { url = "https://files.pythonhosted.org/packages/da/13/27f11be25d7bd298e033b9da93217e5b68309bf724b6e494cdadb471d00d/time_machine-2.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cedc989717c8b44a3881ac3d68ab5a95820448796c550de6a2149ed1525157f0", size = 33721 },
383
+ { url = "https://files.pythonhosted.org/packages/e6/9d/70e4640fed1fd8122204ae825c688d0ef8c04f515ec6bf3c5f3086d6510e/time_machine-2.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d26d79de1c63a8c6586c75967e09b0ff306aa7e944a1eaddb74595c9b1839ca", size = 31646 },
384
+ { url = "https://files.pythonhosted.org/packages/a1/cb/93bc0e51bea4e171a85151dbba3c3b3f612b50b953cd3076f5b4f0db9e14/time_machine-2.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:317b68b56a9c3731e0cf8886e0f94230727159e375988b36c60edce0ddbcb44a", size = 33403 },
385
+ { url = "https://files.pythonhosted.org/packages/89/71/2c6a63ad4fbce3d62d46bbd9ac4433f30bade7f25978ce00815b905bcfcf/time_machine-2.16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:43e1e18279759897be3293a255d53e6b1cb0364b69d9591d0b80c51e461c94b0", size = 33327 },
386
+ { url = "https://files.pythonhosted.org/packages/68/4e/205c2b26763b8817cd6b8868242843800a1fbf275f2af35f5ba35ff2b01a/time_machine-2.16.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e43adb22def972a29d2b147999b56897116085777a0fea182fd93ee45730611e", size = 31454 },
387
+ { url = "https://files.pythonhosted.org/packages/d7/95/44c1aa3994919f93534244c40cfd2fb9416d7686dc0c8b9b262c751b5118/time_machine-2.16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0c766bea27a0600e36806d628ebc4b47178b12fcdfb6c24dc0a566a9c06bfe7f", size = 32972 },
388
+ { url = "https://files.pythonhosted.org/packages/d4/ee/75243df9c7cf30f108758e887141a58e6544baaa46e2e647b9ccc56db819/time_machine-2.16.0-cp312-cp312-win32.whl", hash = "sha256:6dae82ab647d107817e013db82223e20a9853fa88543fec853ae326382d03c2e", size = 19078 },
389
+ { url = "https://files.pythonhosted.org/packages/d4/7c/d4e67cc031f9653c92167ccf87d241e3208653d191c96ac79281c273ab92/time_machine-2.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:265462c77dc9576267c3c7f20707780a171a9fdbac93ac22e608c309efd68c33", size = 19923 },
390
+ { url = "https://files.pythonhosted.org/packages/aa/b6/7047226fcb9afefe47fc80f605530535bf71ad99b6797f057abbfa4cd9a5/time_machine-2.16.0-cp312-cp312-win_arm64.whl", hash = "sha256:ef768e14768eebe3bb1196c0dece8e14c1c6991605721214a0c3c68cf77eb216", size = 18003 },
391
+ { url = "https://files.pythonhosted.org/packages/a6/18/3087d0eb185cedbc82385f46bf16032ec7102a0e070205a2c88c4ecf9952/time_machine-2.16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7751bf745d54e9e8b358c0afa332815da9b8a6194b26d0fd62876ab6c4d5c9c0", size = 20209 },
392
+ { url = "https://files.pythonhosted.org/packages/03/a3/fcc3eaf69390402ecf491d718e533b6d0e06d944d77fc8d87be3a2839102/time_machine-2.16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1784edf173ca840ba154de6eed000b5727f65ab92972c2f88cec5c4d6349c5f2", size = 16681 },
393
+ { url = "https://files.pythonhosted.org/packages/a2/96/8b76d264014bf9dc21873218de50d67223c71736f87fe6c65e582f7c29ac/time_machine-2.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f5876a5682ce1f517e55d7ace2383432627889f6f7e338b961f99d684fd9e8d", size = 33768 },
394
+ { url = "https://files.pythonhosted.org/packages/5c/13/59ae8259be02b6c657ef6e3b6952bf274b43849f6f35cc61a576c68ce301/time_machine-2.16.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:806672529a2e255cd901f244c9033767dc1fa53466d0d3e3e49565a1572a64fe", size = 31685 },
395
+ { url = "https://files.pythonhosted.org/packages/3e/c1/9f142beb4d373a2a01ebb58d5117289315baa5131d880ec804db49e94bf7/time_machine-2.16.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:667b150fedb54acdca2a4bea5bf6da837b43e6dd12857301b48191f8803ba93f", size = 33447 },
396
+ { url = "https://files.pythonhosted.org/packages/95/f7/ed9ecd93c2d38dca77d0a28e070020f3ce0fb23e0d4a6edb14bcfffa5526/time_machine-2.16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:da3ae1028af240c0c46c79adf9c1acffecc6ed1701f2863b8132f5ceae6ae4b5", size = 33408 },
397
+ { url = "https://files.pythonhosted.org/packages/91/40/d0d274d70fa2c4cad531745deb8c81346365beb0a2736be05a3acde8b94a/time_machine-2.16.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:520a814ea1b2706c89ab260a54023033d3015abef25c77873b83e3d7c1fafbb2", size = 31526 },
398
+ { url = "https://files.pythonhosted.org/packages/1d/ba/a27cdbb324d9a6d779cde0d514d47b696b5a6a653705d4b511fd65ef1514/time_machine-2.16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8243664438bb468408b29c6865958662d75e51f79c91842d2794fa22629eb697", size = 33042 },
399
+ { url = "https://files.pythonhosted.org/packages/72/63/64e9156c9e38c18720d0cc41378168635241de44013ffe3dd5b099447eb0/time_machine-2.16.0-cp313-cp313-win32.whl", hash = "sha256:32d445ce20d25c60ab92153c073942b0bac9815bfbfd152ce3dcc225d15ce988", size = 19108 },
400
+ { url = "https://files.pythonhosted.org/packages/3d/40/27f5738fbd50b78dcc0682c14417eac5a49ccf430525dd0c5a058be125a2/time_machine-2.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:f6927dda86425f97ffda36131f297b1a601c64a6ee6838bfa0e6d3149c2f0d9f", size = 19935 },
401
+ { url = "https://files.pythonhosted.org/packages/35/75/c4d8b2f0fe7dac22854d88a9c509d428e78ac4bf284bc54cfe83f75cc13b/time_machine-2.16.0-cp313-cp313-win_arm64.whl", hash = "sha256:4d3843143c46dddca6491a954bbd0abfd435681512ac343169560e9bab504129", size = 18047 },
402
+ ]
403
+
404
+ [[package]]
405
+ name = "typing-extensions"
406
+ version = "4.12.2"
407
+ source = { registry = "https://pypi.org/simple" }
408
+ sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 }
409
+ wheels = [
410
+ { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 },
411
+ ]
412
+
413
+ [[package]]
414
+ name = "tzdata"
415
+ version = "2025.1"
416
+ source = { registry = "https://pypi.org/simple" }
417
+ sdist = { url = "https://files.pythonhosted.org/packages/43/0f/fa4723f22942480be4ca9527bbde8d43f6c3f2fe8412f00e7f5f6746bc8b/tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", size = 194950 }
418
+ wheels = [
419
+ { url = "https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639", size = 346762 },
420
+ ]