fmtr.tools 1.3.74__tar.gz → 1.3.76__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.74 → fmtr_tools-1.3.76}/PKG-INFO +47 -50
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/constants.py +4 -1
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/data_modelling_tools.py +31 -1
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/database_tools/document.py +2 -2
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/interface_tools/interface_tools.py +0 -8
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/settings_tools.py +4 -2
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/setup_tools/setup_tools.py +29 -5
- fmtr_tools-1.3.76/fmtr/tools/version +1 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/PKG-INFO +47 -50
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/requires.txt +46 -49
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/setup.py +1 -1
- fmtr_tools-1.3.74/fmtr/tools/version +0 -1
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/LICENSE +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/README.md +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/context_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/database_tools/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/datetime_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/client.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/dm.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/proxy.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/server.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/docker_tools/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/ep_test.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/shell_debug.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/google_api_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/inherit_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/interface_tools/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/interface_tools/context.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/interface_tools/controls.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/version_tools/__init__.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/version_tools/version_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/webhook_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/SOURCES.txt +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/pyproject.toml +0 -0
- {fmtr_tools-1.3.74 → fmtr_tools-1.3.76}/setup.cfg +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.76
|
|
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
|
|
@@ -21,7 +21,6 @@ Requires-Dist: pyyaml; extra == "dev"
|
|
|
21
21
|
Requires-Dist: yamlscript; extra == "dev"
|
|
22
22
|
Requires-Dist: pyyaml; extra == "dev"
|
|
23
23
|
Requires-Dist: beanie[odm]; extra == "dev"
|
|
24
|
-
Requires-Dist: motor; extra == "dev"
|
|
25
24
|
Provides-Extra: test
|
|
26
25
|
Requires-Dist: pytest-cov; extra == "test"
|
|
27
26
|
Provides-Extra: yaml
|
|
@@ -166,70 +165,68 @@ Requires-Dist: playwright; extra == "browsers"
|
|
|
166
165
|
Provides-Extra: db
|
|
167
166
|
Provides-Extra: db-document
|
|
168
167
|
Requires-Dist: beanie[odm]; extra == "db-document"
|
|
169
|
-
Requires-Dist: motor; extra == "db-document"
|
|
170
168
|
Provides-Extra: all
|
|
171
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
172
|
-
Requires-Dist: cachetools; extra == "all"
|
|
173
|
-
Requires-Dist: appdirs; extra == "all"
|
|
174
169
|
Requires-Dist: json_repair; extra == "all"
|
|
170
|
+
Requires-Dist: distributed; extra == "all"
|
|
171
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
172
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
173
|
+
Requires-Dist: ollama; extra == "all"
|
|
175
174
|
Requires-Dist: openai; extra == "all"
|
|
175
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
176
176
|
Requires-Dist: logfire[httpx]; extra == "all"
|
|
177
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
177
178
|
Requires-Dist: setuptools; extra == "all"
|
|
178
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
179
|
-
Requires-Dist: pydantic; extra == "all"
|
|
180
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
181
|
-
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
182
|
-
Requires-Dist: odfpy; extra == "all"
|
|
183
|
-
Requires-Dist: httpx_retries; extra == "all"
|
|
184
|
-
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
185
|
-
Requires-Dist: python-on-whales; extra == "all"
|
|
186
|
-
Requires-Dist: peft; extra == "all"
|
|
187
|
-
Requires-Dist: logfire; extra == "all"
|
|
188
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
189
|
-
Requires-Dist: flet-video; extra == "all"
|
|
190
|
-
Requires-Dist: diskcache; extra == "all"
|
|
191
|
-
Requires-Dist: pymupdf4llm; extra == "all"
|
|
192
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
193
|
-
Requires-Dist: html2text; extra == "all"
|
|
194
|
-
Requires-Dist: pandas; extra == "all"
|
|
195
|
-
Requires-Dist: filetype; extra == "all"
|
|
196
179
|
Requires-Dist: contexttimer; extra == "all"
|
|
197
|
-
Requires-Dist:
|
|
198
|
-
Requires-Dist:
|
|
199
|
-
Requires-Dist:
|
|
200
|
-
Requires-Dist: ollama; extra == "all"
|
|
201
|
-
Requires-Dist: motor; extra == "all"
|
|
202
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
203
|
-
Requires-Dist: google-api-python-client; extra == "all"
|
|
204
|
-
Requires-Dist: regex; extra == "all"
|
|
180
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
181
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
182
|
+
Requires-Dist: logfire; extra == "all"
|
|
205
183
|
Requires-Dist: torchaudio; extra == "all"
|
|
184
|
+
Requires-Dist: playwright; extra == "all"
|
|
206
185
|
Requires-Dist: torchvision; extra == "all"
|
|
207
|
-
Requires-Dist:
|
|
208
|
-
Requires-Dist: beanie[odm]; extra == "all"
|
|
209
|
-
Requires-Dist: faker; extra == "all"
|
|
210
|
-
Requires-Dist: huggingface_hub; extra == "all"
|
|
186
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
211
187
|
Requires-Dist: tabulate; extra == "all"
|
|
212
|
-
Requires-Dist:
|
|
213
|
-
Requires-Dist: openpyxl; extra == "all"
|
|
214
|
-
Requires-Dist: google-auth; extra == "all"
|
|
215
|
-
Requires-Dist: playwright; extra == "all"
|
|
216
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
217
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
188
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
218
189
|
Requires-Dist: pycountry; extra == "all"
|
|
219
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
220
190
|
Requires-Dist: dask[bag]; extra == "all"
|
|
221
|
-
Requires-Dist:
|
|
191
|
+
Requires-Dist: html2text; extra == "all"
|
|
192
|
+
Requires-Dist: appdirs; extra == "all"
|
|
193
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
194
|
+
Requires-Dist: openpyxl; extra == "all"
|
|
195
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
196
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
197
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
198
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
199
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
200
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
201
|
+
Requires-Dist: bokeh; extra == "all"
|
|
202
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
222
203
|
Requires-Dist: flet[all]; extra == "all"
|
|
223
204
|
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
205
|
+
Requires-Dist: filetype; extra == "all"
|
|
206
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
207
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
208
|
+
Requires-Dist: fastapi; extra == "all"
|
|
209
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
210
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
211
|
+
Requires-Dist: odfpy; extra == "all"
|
|
224
212
|
Requires-Dist: pytest-cov; extra == "all"
|
|
225
|
-
Requires-Dist:
|
|
213
|
+
Requires-Dist: python-on-whales; extra == "all"
|
|
214
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
215
|
+
Requires-Dist: google-auth; extra == "all"
|
|
226
216
|
Requires-Dist: httpx; extra == "all"
|
|
227
|
-
Requires-Dist:
|
|
217
|
+
Requires-Dist: semver; extra == "all"
|
|
218
|
+
Requires-Dist: flet-video; extra == "all"
|
|
219
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
228
220
|
Requires-Dist: yamlscript; extra == "all"
|
|
229
|
-
Requires-Dist:
|
|
230
|
-
Requires-Dist:
|
|
231
|
-
Requires-Dist:
|
|
232
|
-
Requires-Dist:
|
|
221
|
+
Requires-Dist: cachetools; extra == "all"
|
|
222
|
+
Requires-Dist: diskcache; extra == "all"
|
|
223
|
+
Requires-Dist: pandas; extra == "all"
|
|
224
|
+
Requires-Dist: regex; extra == "all"
|
|
225
|
+
Requires-Dist: faker; extra == "all"
|
|
226
|
+
Requires-Dist: pydantic; extra == "all"
|
|
227
|
+
Requires-Dist: peft; extra == "all"
|
|
228
|
+
Requires-Dist: pydantic-settings; extra == "all"
|
|
229
|
+
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
233
230
|
Dynamic: author
|
|
234
231
|
Dynamic: author-email
|
|
235
232
|
Dynamic: description
|
|
@@ -46,7 +46,10 @@ class Constants:
|
|
|
46
46
|
FILENAME_VERSION = 'version'
|
|
47
47
|
DIR_NAME_HF = 'hf'
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
ENTRYPOINT = 'entrypoint'
|
|
50
|
+
ENTRYPOINTS_DIR = f'{ENTRYPOINT}s'
|
|
51
|
+
ENTRYPOINT_FILE = f'{ENTRYPOINT}.py'
|
|
52
|
+
|
|
50
53
|
PACKAGE_EXCLUDE_DIRS = {'data', 'build', 'dist', '.*', '*egg-info*'}
|
|
51
54
|
INIT_FILENAME = '__init__.py'
|
|
52
55
|
|
|
@@ -182,8 +182,38 @@ class MixinFromJson:
|
|
|
182
182
|
return self
|
|
183
183
|
|
|
184
184
|
|
|
185
|
+
class CliRunMixin:
|
|
186
|
+
"""
|
|
187
|
+
|
|
188
|
+
Mixin only so that it can also be used with Pydantic Settings.
|
|
189
|
+
|
|
190
|
+
TODO Ideally, the run method would be defined on dm.Base and the settings base would just inherit like set.Base(BaseSettings, dm.Base), but this isn't yet tested/could break Fields.
|
|
191
|
+
|
|
192
|
+
"""
|
|
193
|
+
|
|
194
|
+
def run(self):
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
Behaviour when run as a CLI command, i.e. via Pydantic Settings. Run any subcommands then exit.
|
|
198
|
+
|
|
199
|
+
"""
|
|
200
|
+
|
|
201
|
+
from pydantic_settings import get_subcommand
|
|
202
|
+
|
|
203
|
+
command = get_subcommand(self, is_required=False, cli_exit_on_error=False)
|
|
204
|
+
|
|
205
|
+
if not command:
|
|
206
|
+
return
|
|
207
|
+
|
|
208
|
+
result = command.run()
|
|
209
|
+
if inspect.isawaitable(result):
|
|
210
|
+
import asyncio
|
|
211
|
+
result = asyncio.run(result)
|
|
212
|
+
|
|
213
|
+
raise SystemExit(result)
|
|
214
|
+
|
|
185
215
|
|
|
186
|
-
class Base(BaseModel, MixinFromJson):
|
|
216
|
+
class Base(BaseModel, MixinFromJson, CliRunMixin):
|
|
187
217
|
"""
|
|
188
218
|
|
|
189
219
|
Base model allowing model definition via a list of custom Field objects.
|
|
@@ -3,7 +3,7 @@ from typing import List
|
|
|
3
3
|
|
|
4
4
|
import beanie
|
|
5
5
|
from beanie.odm import actions
|
|
6
|
-
from
|
|
6
|
+
from pymongo import AsyncMongoClient
|
|
7
7
|
|
|
8
8
|
from fmtr.tools import data_modelling_tools
|
|
9
9
|
from fmtr.tools.constants import Constants
|
|
@@ -34,7 +34,7 @@ class Client:
|
|
|
34
34
|
self.port = port
|
|
35
35
|
self.documents = documents
|
|
36
36
|
|
|
37
|
-
self.client =
|
|
37
|
+
self.client = AsyncMongoClient(self.uri, tz_aware=True)
|
|
38
38
|
self.db = self.client[self.name]
|
|
39
39
|
|
|
40
40
|
@cached_property
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
from pydantic_settings import BaseSettings, PydanticBaseSettingsSource, YamlConfigSettingsSource, EnvSettingsSource, CliSettingsSource
|
|
2
1
|
from typing import ClassVar, Any
|
|
3
2
|
|
|
3
|
+
from pydantic_settings import BaseSettings, PydanticBaseSettingsSource, YamlConfigSettingsSource, EnvSettingsSource, CliSettingsSource
|
|
4
|
+
|
|
5
|
+
from fmtr.tools.data_modelling_tools import CliRunMixin
|
|
4
6
|
from fmtr.tools.path_tools import PackagePaths, Path
|
|
5
7
|
|
|
6
8
|
|
|
@@ -21,7 +23,7 @@ class YamlScriptConfigSettingsSource(YamlConfigSettingsSource):
|
|
|
21
23
|
return data
|
|
22
24
|
|
|
23
25
|
|
|
24
|
-
class Base(BaseSettings):
|
|
26
|
+
class Base(BaseSettings, CliRunMixin):
|
|
25
27
|
"""
|
|
26
28
|
|
|
27
29
|
Base class for settings configuration using Pydantic BaseSettings.
|
|
@@ -88,6 +88,15 @@ class SetupPaths(FromCallerMixin):
|
|
|
88
88
|
return False
|
|
89
89
|
return org
|
|
90
90
|
|
|
91
|
+
@property
|
|
92
|
+
def entrypoint(self) -> Path:
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
Path of base entrypoint module.
|
|
96
|
+
|
|
97
|
+
"""
|
|
98
|
+
return self.path / Constants.ENTRYPOINT_FILE
|
|
99
|
+
|
|
91
100
|
@property
|
|
92
101
|
def entrypoints(self) -> Path:
|
|
93
102
|
"""
|
|
@@ -182,23 +191,38 @@ class Setup(FromCallerMixin):
|
|
|
182
191
|
def console_scripts(self) -> List[str]:
|
|
183
192
|
"""
|
|
184
193
|
|
|
185
|
-
Generate console scripts for any modules in
|
|
194
|
+
Generate console scripts for the `entrypoint` module - and/or any modules in `entrypoints` sub-package.
|
|
186
195
|
|
|
187
196
|
"""
|
|
188
197
|
|
|
189
198
|
if not self.paths.entrypoints.exists():
|
|
190
|
-
|
|
199
|
+
paths_mods = []
|
|
200
|
+
else:
|
|
201
|
+
paths_mods = list(self.paths.entrypoints.iterdir())
|
|
191
202
|
|
|
192
|
-
names_mods = [path.stem for path in
|
|
193
|
-
command_prefix = self.name.replace('.', self.ENTRYPOINT_COMMAND_SEP)
|
|
203
|
+
names_mods = [path.stem for path in paths_mods if path.is_file() and path.name != Constants.INIT_FILENAME]
|
|
194
204
|
command_suffixes = [name_mod.replace(self.ENTRYPOINT_FUNCTION_SEP, self.ENTRYPOINT_COMMAND_SEP) for name_mod in names_mods]
|
|
195
|
-
commands = [f'{
|
|
205
|
+
commands = [f'{self.name_command}-{command_suffix}' for command_suffix in command_suffixes]
|
|
196
206
|
paths = [f'{self.name}.{Constants.ENTRYPOINTS_DIR}.{name_mod}:{self.ENTRYPOINT_FUNC_NAME}' for name_mod in names_mods]
|
|
197
207
|
|
|
208
|
+
if self.paths.entrypoint.exists():
|
|
209
|
+
commands.append(self.name_command)
|
|
210
|
+
path = f'{self.name}.{self.paths.entrypoint.stem}:{self.ENTRYPOINT_FUNC_NAME}'
|
|
211
|
+
paths.append(path)
|
|
212
|
+
|
|
198
213
|
console_scripts = [f'{command} = {path}' for command, path in zip(commands, paths)]
|
|
199
214
|
|
|
200
215
|
return console_scripts
|
|
201
216
|
|
|
217
|
+
@cached_property
|
|
218
|
+
def name_command(self) -> str:
|
|
219
|
+
"""
|
|
220
|
+
|
|
221
|
+
Name as a command, e.g. `fmtr-tools`
|
|
222
|
+
|
|
223
|
+
"""
|
|
224
|
+
return self.name.replace('.', self.ENTRYPOINT_COMMAND_SEP)
|
|
225
|
+
|
|
202
226
|
@property
|
|
203
227
|
def name(self) -> str:
|
|
204
228
|
"""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.3.76
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.76
|
|
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
|
|
@@ -21,7 +21,6 @@ Requires-Dist: pyyaml; extra == "dev"
|
|
|
21
21
|
Requires-Dist: yamlscript; extra == "dev"
|
|
22
22
|
Requires-Dist: pyyaml; extra == "dev"
|
|
23
23
|
Requires-Dist: beanie[odm]; extra == "dev"
|
|
24
|
-
Requires-Dist: motor; extra == "dev"
|
|
25
24
|
Provides-Extra: test
|
|
26
25
|
Requires-Dist: pytest-cov; extra == "test"
|
|
27
26
|
Provides-Extra: yaml
|
|
@@ -166,70 +165,68 @@ Requires-Dist: playwright; extra == "browsers"
|
|
|
166
165
|
Provides-Extra: db
|
|
167
166
|
Provides-Extra: db-document
|
|
168
167
|
Requires-Dist: beanie[odm]; extra == "db-document"
|
|
169
|
-
Requires-Dist: motor; extra == "db-document"
|
|
170
168
|
Provides-Extra: all
|
|
171
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
172
|
-
Requires-Dist: cachetools; extra == "all"
|
|
173
|
-
Requires-Dist: appdirs; extra == "all"
|
|
174
169
|
Requires-Dist: json_repair; extra == "all"
|
|
170
|
+
Requires-Dist: distributed; extra == "all"
|
|
171
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
172
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
173
|
+
Requires-Dist: ollama; extra == "all"
|
|
175
174
|
Requires-Dist: openai; extra == "all"
|
|
175
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
176
176
|
Requires-Dist: logfire[httpx]; extra == "all"
|
|
177
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
177
178
|
Requires-Dist: setuptools; extra == "all"
|
|
178
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
179
|
-
Requires-Dist: pydantic; extra == "all"
|
|
180
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
181
|
-
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
182
|
-
Requires-Dist: odfpy; extra == "all"
|
|
183
|
-
Requires-Dist: httpx_retries; extra == "all"
|
|
184
|
-
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
185
|
-
Requires-Dist: python-on-whales; extra == "all"
|
|
186
|
-
Requires-Dist: peft; extra == "all"
|
|
187
|
-
Requires-Dist: logfire; extra == "all"
|
|
188
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
189
|
-
Requires-Dist: flet-video; extra == "all"
|
|
190
|
-
Requires-Dist: diskcache; extra == "all"
|
|
191
|
-
Requires-Dist: pymupdf4llm; extra == "all"
|
|
192
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
193
|
-
Requires-Dist: html2text; extra == "all"
|
|
194
|
-
Requires-Dist: pandas; extra == "all"
|
|
195
|
-
Requires-Dist: filetype; extra == "all"
|
|
196
179
|
Requires-Dist: contexttimer; extra == "all"
|
|
197
|
-
Requires-Dist:
|
|
198
|
-
Requires-Dist:
|
|
199
|
-
Requires-Dist:
|
|
200
|
-
Requires-Dist: ollama; extra == "all"
|
|
201
|
-
Requires-Dist: motor; extra == "all"
|
|
202
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
203
|
-
Requires-Dist: google-api-python-client; extra == "all"
|
|
204
|
-
Requires-Dist: regex; extra == "all"
|
|
180
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
181
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
182
|
+
Requires-Dist: logfire; extra == "all"
|
|
205
183
|
Requires-Dist: torchaudio; extra == "all"
|
|
184
|
+
Requires-Dist: playwright; extra == "all"
|
|
206
185
|
Requires-Dist: torchvision; extra == "all"
|
|
207
|
-
Requires-Dist:
|
|
208
|
-
Requires-Dist: beanie[odm]; extra == "all"
|
|
209
|
-
Requires-Dist: faker; extra == "all"
|
|
210
|
-
Requires-Dist: huggingface_hub; extra == "all"
|
|
186
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
211
187
|
Requires-Dist: tabulate; extra == "all"
|
|
212
|
-
Requires-Dist:
|
|
213
|
-
Requires-Dist: openpyxl; extra == "all"
|
|
214
|
-
Requires-Dist: google-auth; extra == "all"
|
|
215
|
-
Requires-Dist: playwright; extra == "all"
|
|
216
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
217
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
188
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
218
189
|
Requires-Dist: pycountry; extra == "all"
|
|
219
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
220
190
|
Requires-Dist: dask[bag]; extra == "all"
|
|
221
|
-
Requires-Dist:
|
|
191
|
+
Requires-Dist: html2text; extra == "all"
|
|
192
|
+
Requires-Dist: appdirs; extra == "all"
|
|
193
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
194
|
+
Requires-Dist: openpyxl; extra == "all"
|
|
195
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
196
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
197
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
198
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
199
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
200
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
201
|
+
Requires-Dist: bokeh; extra == "all"
|
|
202
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
222
203
|
Requires-Dist: flet[all]; extra == "all"
|
|
223
204
|
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
205
|
+
Requires-Dist: filetype; extra == "all"
|
|
206
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
207
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
208
|
+
Requires-Dist: fastapi; extra == "all"
|
|
209
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
210
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
211
|
+
Requires-Dist: odfpy; extra == "all"
|
|
224
212
|
Requires-Dist: pytest-cov; extra == "all"
|
|
225
|
-
Requires-Dist:
|
|
213
|
+
Requires-Dist: python-on-whales; extra == "all"
|
|
214
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
215
|
+
Requires-Dist: google-auth; extra == "all"
|
|
226
216
|
Requires-Dist: httpx; extra == "all"
|
|
227
|
-
Requires-Dist:
|
|
217
|
+
Requires-Dist: semver; extra == "all"
|
|
218
|
+
Requires-Dist: flet-video; extra == "all"
|
|
219
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
228
220
|
Requires-Dist: yamlscript; extra == "all"
|
|
229
|
-
Requires-Dist:
|
|
230
|
-
Requires-Dist:
|
|
231
|
-
Requires-Dist:
|
|
232
|
-
Requires-Dist:
|
|
221
|
+
Requires-Dist: cachetools; extra == "all"
|
|
222
|
+
Requires-Dist: diskcache; extra == "all"
|
|
223
|
+
Requires-Dist: pandas; extra == "all"
|
|
224
|
+
Requires-Dist: regex; extra == "all"
|
|
225
|
+
Requires-Dist: faker; extra == "all"
|
|
226
|
+
Requires-Dist: pydantic; extra == "all"
|
|
227
|
+
Requires-Dist: peft; extra == "all"
|
|
228
|
+
Requires-Dist: pydantic-settings; extra == "all"
|
|
229
|
+
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
233
230
|
Dynamic: author
|
|
234
231
|
Dynamic: author-email
|
|
235
232
|
Dynamic: description
|
|
@@ -18,68 +18,67 @@ pydantic-ai[logfire,openai]
|
|
|
18
18
|
ollama
|
|
19
19
|
|
|
20
20
|
[all]
|
|
21
|
-
tinynetrc
|
|
22
|
-
cachetools
|
|
23
|
-
appdirs
|
|
24
21
|
json_repair
|
|
22
|
+
distributed
|
|
23
|
+
pyyaml
|
|
24
|
+
Unidecode
|
|
25
|
+
ollama
|
|
25
26
|
openai
|
|
27
|
+
pymupdf
|
|
26
28
|
logfire[httpx]
|
|
29
|
+
sentence_transformers
|
|
27
30
|
setuptools
|
|
28
|
-
pydantic-settings
|
|
29
|
-
pydantic
|
|
30
|
-
pyyaml
|
|
31
|
-
logfire[fastapi]
|
|
32
|
-
odfpy
|
|
33
|
-
httpx_retries
|
|
34
|
-
pydantic-extra-types
|
|
35
|
-
python-on-whales
|
|
36
|
-
peft
|
|
37
|
-
logfire
|
|
38
|
-
uvicorn[standard]
|
|
39
|
-
flet-video
|
|
40
|
-
diskcache
|
|
41
|
-
pymupdf4llm
|
|
42
|
-
pydantic-ai[logfire,openai]
|
|
43
|
-
html2text
|
|
44
|
-
pandas
|
|
45
|
-
filetype
|
|
46
31
|
contexttimer
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
ollama
|
|
51
|
-
motor
|
|
52
|
-
pymupdf
|
|
53
|
-
google-api-python-client
|
|
54
|
-
regex
|
|
32
|
+
sre_yield
|
|
33
|
+
huggingface_hub
|
|
34
|
+
logfire
|
|
55
35
|
torchaudio
|
|
36
|
+
playwright
|
|
56
37
|
torchvision
|
|
57
|
-
|
|
58
|
-
beanie[odm]
|
|
59
|
-
faker
|
|
60
|
-
huggingface_hub
|
|
38
|
+
deepdiff
|
|
61
39
|
tabulate
|
|
62
|
-
|
|
63
|
-
openpyxl
|
|
64
|
-
google-auth
|
|
65
|
-
playwright
|
|
66
|
-
transformers[sentencepiece]
|
|
67
|
-
Unidecode
|
|
40
|
+
pydantic-extra-types
|
|
68
41
|
pycountry
|
|
69
|
-
deepmerge
|
|
70
42
|
dask[bag]
|
|
71
|
-
|
|
43
|
+
html2text
|
|
44
|
+
appdirs
|
|
45
|
+
logfire[fastapi]
|
|
46
|
+
openpyxl
|
|
47
|
+
httpx_retries
|
|
48
|
+
dnspython[doh]
|
|
49
|
+
pymupdf4llm
|
|
50
|
+
uvicorn[standard]
|
|
51
|
+
google-api-python-client
|
|
52
|
+
google-auth-httplib2
|
|
53
|
+
bokeh
|
|
54
|
+
beanie[odm]
|
|
72
55
|
flet[all]
|
|
73
56
|
google-auth-oauthlib
|
|
57
|
+
filetype
|
|
58
|
+
deepmerge
|
|
59
|
+
tinynetrc
|
|
60
|
+
fastapi
|
|
61
|
+
tokenizers
|
|
62
|
+
pydantic-ai[logfire,openai]
|
|
63
|
+
odfpy
|
|
74
64
|
pytest-cov
|
|
75
|
-
|
|
65
|
+
python-on-whales
|
|
66
|
+
pydevd-pycharm~=251.25410.159
|
|
67
|
+
google-auth
|
|
76
68
|
httpx
|
|
77
|
-
|
|
69
|
+
semver
|
|
70
|
+
flet-video
|
|
71
|
+
flet-webview
|
|
78
72
|
yamlscript
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
cachetools
|
|
74
|
+
diskcache
|
|
75
|
+
pandas
|
|
76
|
+
regex
|
|
77
|
+
faker
|
|
78
|
+
pydantic
|
|
79
|
+
peft
|
|
80
|
+
pydantic-settings
|
|
81
|
+
transformers[sentencepiece]
|
|
83
82
|
|
|
84
83
|
[api]
|
|
85
84
|
fastapi
|
|
@@ -105,7 +104,6 @@ cachetools
|
|
|
105
104
|
|
|
106
105
|
[db.document]
|
|
107
106
|
beanie[odm]
|
|
108
|
-
motor
|
|
109
107
|
|
|
110
108
|
[debug]
|
|
111
109
|
pydevd-pycharm~=251.25410.159
|
|
@@ -121,7 +119,6 @@ pycountry
|
|
|
121
119
|
yamlscript
|
|
122
120
|
pyyaml
|
|
123
121
|
beanie[odm]
|
|
124
|
-
motor
|
|
125
122
|
|
|
126
123
|
[dm]
|
|
127
124
|
pydantic
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.3.74
|
|
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
|