fmtr.tools 1.3.70__tar.gz → 1.3.72__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.
Potentially problematic release.
This version of fmtr.tools might be problematic. Click here for more details.
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/PKG-INFO +50 -50
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/data_modelling_tools.py +26 -17
- fmtr_tools-1.3.72/fmtr/tools/version +1 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/PKG-INFO +50 -50
- fmtr_tools-1.3.70/fmtr/tools/version +0 -1
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/LICENSE +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/README.md +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/constants.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/context_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/database_tools/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/database_tools/document.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/datetime_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/client.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/dm.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/proxy.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/server.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/docker_tools/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/ep_test.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/shell_debug.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/google_api_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/inherit_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/interface_tools/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/interface_tools/context.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/interface_tools/controls.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/interface_tools/interface_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/settings_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/setup_tools/setup_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/version_tools/__init__.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/version_tools/version_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/webhook_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/SOURCES.txt +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/requires.txt +49 -49
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/pyproject.toml +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/setup.cfg +0 -0
- {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.72
|
|
4
4
|
Summary: Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML
|
|
5
5
|
Home-page: https://github.com/fmtr/fmtr.tools
|
|
6
6
|
Author: Frontmatter
|
|
@@ -168,68 +168,68 @@ Provides-Extra: db-document
|
|
|
168
168
|
Requires-Dist: beanie[odm]; extra == "db-document"
|
|
169
169
|
Requires-Dist: motor; extra == "db-document"
|
|
170
170
|
Provides-Extra: all
|
|
171
|
-
Requires-Dist:
|
|
172
|
-
Requires-Dist:
|
|
173
|
-
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
174
|
-
Requires-Dist: openai; extra == "all"
|
|
175
|
-
Requires-Dist: filetype; extra == "all"
|
|
176
|
-
Requires-Dist: httpx_retries; extra == "all"
|
|
177
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
178
|
-
Requires-Dist: ollama; extra == "all"
|
|
179
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
180
|
-
Requires-Dist: json_repair; extra == "all"
|
|
181
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
171
|
+
Requires-Dist: pytest-cov; extra == "all"
|
|
172
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
182
173
|
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
183
|
-
Requires-Dist:
|
|
184
|
-
Requires-Dist:
|
|
185
|
-
Requires-Dist:
|
|
186
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
187
|
-
Requires-Dist: huggingface_hub; extra == "all"
|
|
174
|
+
Requires-Dist: tabulate; extra == "all"
|
|
175
|
+
Requires-Dist: httpx; extra == "all"
|
|
176
|
+
Requires-Dist: playwright; extra == "all"
|
|
188
177
|
Requires-Dist: pydantic; extra == "all"
|
|
189
|
-
Requires-Dist:
|
|
190
|
-
Requires-Dist:
|
|
191
|
-
Requires-Dist:
|
|
192
|
-
Requires-Dist:
|
|
193
|
-
Requires-Dist:
|
|
178
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
179
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
180
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
181
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
182
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
194
183
|
Requires-Dist: openpyxl; extra == "all"
|
|
195
|
-
Requires-Dist:
|
|
196
|
-
Requires-Dist:
|
|
197
|
-
Requires-Dist:
|
|
198
|
-
Requires-Dist:
|
|
184
|
+
Requires-Dist: torchaudio; extra == "all"
|
|
185
|
+
Requires-Dist: flet-video; extra == "all"
|
|
186
|
+
Requires-Dist: logfire; extra == "all"
|
|
187
|
+
Requires-Dist: openai; extra == "all"
|
|
188
|
+
Requires-Dist: ollama; extra == "all"
|
|
189
|
+
Requires-Dist: google-auth; extra == "all"
|
|
190
|
+
Requires-Dist: appdirs; extra == "all"
|
|
199
191
|
Requires-Dist: logfire[httpx]; extra == "all"
|
|
200
|
-
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
201
|
-
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
202
192
|
Requires-Dist: bokeh; extra == "all"
|
|
203
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
204
193
|
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
205
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
206
|
-
Requires-Dist: setuptools; extra == "all"
|
|
207
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
208
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
209
194
|
Requires-Dist: pydantic-settings; extra == "all"
|
|
210
195
|
Requires-Dist: flet-webview; extra == "all"
|
|
211
|
-
Requires-Dist:
|
|
196
|
+
Requires-Dist: regex; extra == "all"
|
|
197
|
+
Requires-Dist: pandas; extra == "all"
|
|
198
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
212
199
|
Requires-Dist: contexttimer; extra == "all"
|
|
213
|
-
Requires-Dist: tokenizers; extra == "all"
|
|
214
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
215
|
-
Requires-Dist: faker; extra == "all"
|
|
216
200
|
Requires-Dist: semver; extra == "all"
|
|
217
|
-
Requires-Dist: torchaudio; extra == "all"
|
|
218
|
-
Requires-Dist: pytest-cov; extra == "all"
|
|
219
|
-
Requires-Dist: python-on-whales; extra == "all"
|
|
220
|
-
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
221
|
-
Requires-Dist: motor; extra == "all"
|
|
222
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
223
201
|
Requires-Dist: pycountry; extra == "all"
|
|
202
|
+
Requires-Dist: peft; extra == "all"
|
|
203
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
204
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
205
|
+
Requires-Dist: faker; extra == "all"
|
|
206
|
+
Requires-Dist: setuptools; extra == "all"
|
|
207
|
+
Requires-Dist: motor; extra == "all"
|
|
208
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
209
|
+
Requires-Dist: diskcache; extra == "all"
|
|
210
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
211
|
+
Requires-Dist: python-on-whales; extra == "all"
|
|
212
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
213
|
+
Requires-Dist: flet[all]; extra == "all"
|
|
214
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
215
|
+
Requires-Dist: filetype; extra == "all"
|
|
224
216
|
Requires-Dist: fastapi; extra == "all"
|
|
217
|
+
Requires-Dist: cachetools; extra == "all"
|
|
218
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
219
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
220
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
225
221
|
Requires-Dist: sre_yield; extra == "all"
|
|
226
|
-
Requires-Dist:
|
|
227
|
-
Requires-Dist:
|
|
228
|
-
Requires-Dist:
|
|
229
|
-
Requires-Dist:
|
|
230
|
-
Requires-Dist: google-
|
|
231
|
-
Requires-Dist:
|
|
232
|
-
Requires-Dist:
|
|
222
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
223
|
+
Requires-Dist: torchvision; extra == "all"
|
|
224
|
+
Requires-Dist: html2text; extra == "all"
|
|
225
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
226
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
227
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
228
|
+
Requires-Dist: odfpy; extra == "all"
|
|
229
|
+
Requires-Dist: distributed; extra == "all"
|
|
230
|
+
Requires-Dist: json_repair; extra == "all"
|
|
231
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
232
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
233
233
|
Dynamic: author
|
|
234
234
|
Dynamic: author-email
|
|
235
235
|
Dynamic: description
|
|
@@ -5,9 +5,10 @@ from typing import ClassVar, List, Any, Dict
|
|
|
5
5
|
from pydantic import BaseModel
|
|
6
6
|
from pydantic import RootModel, ConfigDict
|
|
7
7
|
from pydantic.fields import FieldInfo
|
|
8
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
8
9
|
from pydantic_core import PydanticUndefined, PydanticUndefinedType
|
|
9
10
|
|
|
10
|
-
from fmtr.tools.datatype_tools import is_optional
|
|
11
|
+
from fmtr.tools.datatype_tools import is_optional, none_else
|
|
11
12
|
from fmtr.tools.iterator_tools import get_class_lookup
|
|
12
13
|
from fmtr.tools.string_tools import camel_to_snake
|
|
13
14
|
from fmtr.tools.tools import Auto, Required, Empty
|
|
@@ -21,14 +22,14 @@ class Field(FieldInfo):
|
|
|
21
22
|
"""
|
|
22
23
|
NAME = Auto
|
|
23
24
|
ANNOTATION = Empty
|
|
24
|
-
EXCLUDE = False
|
|
25
25
|
DEFAULT = Auto
|
|
26
26
|
FILLS = None
|
|
27
27
|
DESCRIPTION = None
|
|
28
28
|
TITLE = Auto
|
|
29
|
+
SKIP_SCHEMA = False
|
|
29
30
|
CONFIG = None
|
|
30
31
|
|
|
31
|
-
def __init__(self, annotation=Empty, default=Empty, description=None, title=None, fills=None,
|
|
32
|
+
def __init__(self, annotation=Empty, default=Empty, description=None, title=None, fills=None, skip_schema=None, **kwargs):
|
|
32
33
|
"""
|
|
33
34
|
|
|
34
35
|
Infer default from type annotation, if enabled, use class/argument fills to create titles/descriptions, etc.
|
|
@@ -38,12 +39,15 @@ class Field(FieldInfo):
|
|
|
38
39
|
fills_super = getattr(super(), 'FILLS', None)
|
|
39
40
|
self.fills = (fills_super or {}) | (self.FILLS or {}) | (fills or {})
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
skip_schema = none_else(skip_schema, self.SKIP_SCHEMA)
|
|
42
43
|
|
|
43
44
|
self.annotation = self.ANNOTATION if annotation is Empty else annotation
|
|
44
45
|
if self.annotation is Empty:
|
|
45
46
|
raise ValueError("Annotation must be specified.")
|
|
46
47
|
|
|
48
|
+
if skip_schema:
|
|
49
|
+
self.annotation = SkipJsonSchema[self.annotation]
|
|
50
|
+
|
|
47
51
|
default = self.get_default_auto(default)
|
|
48
52
|
if default is Required:
|
|
49
53
|
default = PydanticUndefined
|
|
@@ -52,7 +56,7 @@ class Field(FieldInfo):
|
|
|
52
56
|
title = self.get_title_auto(title)
|
|
53
57
|
kwargs |= (self.CONFIG or {})
|
|
54
58
|
|
|
55
|
-
super().__init__(annotation=self.annotation, default=default, title=title, description=description,
|
|
59
|
+
super().__init__(annotation=self.annotation, default=default, title=title, description=description, **kwargs)
|
|
56
60
|
|
|
57
61
|
@classmethod
|
|
58
62
|
def get_name_auto(cls) -> str:
|
|
@@ -220,21 +224,16 @@ class Base(BaseModel, MixinFromJson):
|
|
|
220
224
|
setattr(cls, name, field)
|
|
221
225
|
cls.__annotations__[name] = field.annotation
|
|
222
226
|
|
|
223
|
-
def to_df(self,
|
|
227
|
+
def to_df(self, **kwargs):
|
|
224
228
|
"""
|
|
225
229
|
|
|
226
|
-
DataFrame representation
|
|
230
|
+
DataFrame representation of Data Model.
|
|
227
231
|
|
|
228
232
|
"""
|
|
233
|
+
from fmtr.tools import tabular
|
|
229
234
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
val = getattr(self, name)
|
|
233
|
-
objs.append(val)
|
|
234
|
-
|
|
235
|
-
df = to_df(*objs, name_value=name_value)
|
|
236
|
-
df['id'] = list(self.model_fields.keys())
|
|
237
|
-
df = df.set_index('id', drop=True)
|
|
235
|
+
data = self.model_dump(**kwargs)
|
|
236
|
+
df = tabular.pd.json_normalize(data, sep='_')
|
|
238
237
|
return df
|
|
239
238
|
|
|
240
239
|
|
|
@@ -245,11 +244,21 @@ class Root(RootModel, MixinFromJson):
|
|
|
245
244
|
|
|
246
245
|
"""
|
|
247
246
|
|
|
248
|
-
def to_df(self):
|
|
247
|
+
def to_df(self, **kwargs):
|
|
249
248
|
"""
|
|
250
249
|
|
|
251
250
|
DataFrame representation with items as rows.
|
|
252
251
|
|
|
253
252
|
"""
|
|
254
253
|
|
|
255
|
-
|
|
254
|
+
"""
|
|
255
|
+
|
|
256
|
+
DataFrame representation of Data Model.
|
|
257
|
+
|
|
258
|
+
"""
|
|
259
|
+
from fmtr.tools import tabular
|
|
260
|
+
|
|
261
|
+
data = [item.model_dump(**kwargs) for item in self.items]
|
|
262
|
+
dfs = [tabular.pd.json_normalize(datum, sep='_') for datum in data]
|
|
263
|
+
df = tabular.pd.concat(dfs, axis=tabular.CONCAT_VERTICALLY)
|
|
264
|
+
return df
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.3.72
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.72
|
|
4
4
|
Summary: Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML
|
|
5
5
|
Home-page: https://github.com/fmtr/fmtr.tools
|
|
6
6
|
Author: Frontmatter
|
|
@@ -168,68 +168,68 @@ Provides-Extra: db-document
|
|
|
168
168
|
Requires-Dist: beanie[odm]; extra == "db-document"
|
|
169
169
|
Requires-Dist: motor; extra == "db-document"
|
|
170
170
|
Provides-Extra: all
|
|
171
|
-
Requires-Dist:
|
|
172
|
-
Requires-Dist:
|
|
173
|
-
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
174
|
-
Requires-Dist: openai; extra == "all"
|
|
175
|
-
Requires-Dist: filetype; extra == "all"
|
|
176
|
-
Requires-Dist: httpx_retries; extra == "all"
|
|
177
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
178
|
-
Requires-Dist: ollama; extra == "all"
|
|
179
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
180
|
-
Requires-Dist: json_repair; extra == "all"
|
|
181
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
171
|
+
Requires-Dist: pytest-cov; extra == "all"
|
|
172
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
182
173
|
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
183
|
-
Requires-Dist:
|
|
184
|
-
Requires-Dist:
|
|
185
|
-
Requires-Dist:
|
|
186
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
187
|
-
Requires-Dist: huggingface_hub; extra == "all"
|
|
174
|
+
Requires-Dist: tabulate; extra == "all"
|
|
175
|
+
Requires-Dist: httpx; extra == "all"
|
|
176
|
+
Requires-Dist: playwright; extra == "all"
|
|
188
177
|
Requires-Dist: pydantic; extra == "all"
|
|
189
|
-
Requires-Dist:
|
|
190
|
-
Requires-Dist:
|
|
191
|
-
Requires-Dist:
|
|
192
|
-
Requires-Dist:
|
|
193
|
-
Requires-Dist:
|
|
178
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
179
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
180
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
181
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
182
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
194
183
|
Requires-Dist: openpyxl; extra == "all"
|
|
195
|
-
Requires-Dist:
|
|
196
|
-
Requires-Dist:
|
|
197
|
-
Requires-Dist:
|
|
198
|
-
Requires-Dist:
|
|
184
|
+
Requires-Dist: torchaudio; extra == "all"
|
|
185
|
+
Requires-Dist: flet-video; extra == "all"
|
|
186
|
+
Requires-Dist: logfire; extra == "all"
|
|
187
|
+
Requires-Dist: openai; extra == "all"
|
|
188
|
+
Requires-Dist: ollama; extra == "all"
|
|
189
|
+
Requires-Dist: google-auth; extra == "all"
|
|
190
|
+
Requires-Dist: appdirs; extra == "all"
|
|
199
191
|
Requires-Dist: logfire[httpx]; extra == "all"
|
|
200
|
-
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
201
|
-
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
202
192
|
Requires-Dist: bokeh; extra == "all"
|
|
203
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
204
193
|
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
205
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
206
|
-
Requires-Dist: setuptools; extra == "all"
|
|
207
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
208
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
209
194
|
Requires-Dist: pydantic-settings; extra == "all"
|
|
210
195
|
Requires-Dist: flet-webview; extra == "all"
|
|
211
|
-
Requires-Dist:
|
|
196
|
+
Requires-Dist: regex; extra == "all"
|
|
197
|
+
Requires-Dist: pandas; extra == "all"
|
|
198
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
212
199
|
Requires-Dist: contexttimer; extra == "all"
|
|
213
|
-
Requires-Dist: tokenizers; extra == "all"
|
|
214
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
215
|
-
Requires-Dist: faker; extra == "all"
|
|
216
200
|
Requires-Dist: semver; extra == "all"
|
|
217
|
-
Requires-Dist: torchaudio; extra == "all"
|
|
218
|
-
Requires-Dist: pytest-cov; extra == "all"
|
|
219
|
-
Requires-Dist: python-on-whales; extra == "all"
|
|
220
|
-
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
221
|
-
Requires-Dist: motor; extra == "all"
|
|
222
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
223
201
|
Requires-Dist: pycountry; extra == "all"
|
|
202
|
+
Requires-Dist: peft; extra == "all"
|
|
203
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
204
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
205
|
+
Requires-Dist: faker; extra == "all"
|
|
206
|
+
Requires-Dist: setuptools; extra == "all"
|
|
207
|
+
Requires-Dist: motor; extra == "all"
|
|
208
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
209
|
+
Requires-Dist: diskcache; extra == "all"
|
|
210
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
211
|
+
Requires-Dist: python-on-whales; extra == "all"
|
|
212
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
213
|
+
Requires-Dist: flet[all]; extra == "all"
|
|
214
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
215
|
+
Requires-Dist: filetype; extra == "all"
|
|
224
216
|
Requires-Dist: fastapi; extra == "all"
|
|
217
|
+
Requires-Dist: cachetools; extra == "all"
|
|
218
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
219
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
220
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
225
221
|
Requires-Dist: sre_yield; extra == "all"
|
|
226
|
-
Requires-Dist:
|
|
227
|
-
Requires-Dist:
|
|
228
|
-
Requires-Dist:
|
|
229
|
-
Requires-Dist:
|
|
230
|
-
Requires-Dist: google-
|
|
231
|
-
Requires-Dist:
|
|
232
|
-
Requires-Dist:
|
|
222
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
223
|
+
Requires-Dist: torchvision; extra == "all"
|
|
224
|
+
Requires-Dist: html2text; extra == "all"
|
|
225
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
226
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
227
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
228
|
+
Requires-Dist: odfpy; extra == "all"
|
|
229
|
+
Requires-Dist: distributed; extra == "all"
|
|
230
|
+
Requires-Dist: json_repair; extra == "all"
|
|
231
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
232
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
233
233
|
Dynamic: author
|
|
234
234
|
Dynamic: author-email
|
|
235
235
|
Dynamic: description
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.3.70
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
@@ -18,68 +18,68 @@ pydantic-ai[logfire,openai]
|
|
|
18
18
|
ollama
|
|
19
19
|
|
|
20
20
|
[all]
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
pydantic-extra-types
|
|
24
|
-
openai
|
|
25
|
-
filetype
|
|
26
|
-
httpx_retries
|
|
27
|
-
pyyaml
|
|
28
|
-
ollama
|
|
29
|
-
uvicorn[standard]
|
|
30
|
-
json_repair
|
|
31
|
-
dnspython[doh]
|
|
21
|
+
pytest-cov
|
|
22
|
+
deepmerge
|
|
32
23
|
pydantic-ai[logfire,openai]
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
deepdiff
|
|
37
|
-
huggingface_hub
|
|
24
|
+
tabulate
|
|
25
|
+
httpx
|
|
26
|
+
playwright
|
|
38
27
|
pydantic
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
28
|
+
pyyaml
|
|
29
|
+
deepdiff
|
|
30
|
+
pydevd-pycharm~=251.25410.159
|
|
31
|
+
logfire[fastapi]
|
|
32
|
+
google-auth-oauthlib
|
|
44
33
|
openpyxl
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
34
|
+
torchaudio
|
|
35
|
+
flet-video
|
|
36
|
+
logfire
|
|
37
|
+
openai
|
|
38
|
+
ollama
|
|
39
|
+
google-auth
|
|
40
|
+
appdirs
|
|
49
41
|
logfire[httpx]
|
|
50
|
-
logfire[fastapi]
|
|
51
|
-
google-auth-httplib2
|
|
52
42
|
bokeh
|
|
53
|
-
deepmerge
|
|
54
43
|
transformers[sentencepiece]
|
|
55
|
-
pymupdf
|
|
56
|
-
setuptools
|
|
57
|
-
dask[bag]
|
|
58
|
-
sentence_transformers
|
|
59
44
|
pydantic-settings
|
|
60
45
|
flet-webview
|
|
61
|
-
|
|
46
|
+
regex
|
|
47
|
+
pandas
|
|
48
|
+
google-auth-httplib2
|
|
62
49
|
contexttimer
|
|
63
|
-
tokenizers
|
|
64
|
-
tinynetrc
|
|
65
|
-
faker
|
|
66
50
|
semver
|
|
67
|
-
torchaudio
|
|
68
|
-
pytest-cov
|
|
69
|
-
python-on-whales
|
|
70
|
-
pydevd-pycharm~=251.25410.159
|
|
71
|
-
motor
|
|
72
|
-
Unidecode
|
|
73
51
|
pycountry
|
|
52
|
+
peft
|
|
53
|
+
uvicorn[standard]
|
|
54
|
+
pymupdf
|
|
55
|
+
faker
|
|
56
|
+
setuptools
|
|
57
|
+
motor
|
|
58
|
+
tokenizers
|
|
59
|
+
diskcache
|
|
60
|
+
huggingface_hub
|
|
61
|
+
python-on-whales
|
|
62
|
+
sentence_transformers
|
|
63
|
+
flet[all]
|
|
64
|
+
pydantic-extra-types
|
|
65
|
+
filetype
|
|
74
66
|
fastapi
|
|
67
|
+
cachetools
|
|
68
|
+
dnspython[doh]
|
|
69
|
+
httpx_retries
|
|
70
|
+
dask[bag]
|
|
75
71
|
sre_yield
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
google-
|
|
81
|
-
|
|
82
|
-
|
|
72
|
+
Unidecode
|
|
73
|
+
torchvision
|
|
74
|
+
html2text
|
|
75
|
+
pymupdf4llm
|
|
76
|
+
google-api-python-client
|
|
77
|
+
yamlscript
|
|
78
|
+
odfpy
|
|
79
|
+
distributed
|
|
80
|
+
json_repair
|
|
81
|
+
beanie[odm]
|
|
82
|
+
tinynetrc
|
|
83
83
|
|
|
84
84
|
[api]
|
|
85
85
|
fastapi
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|