fmtr.tools 1.3.75__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.75 → fmtr_tools-1.3.76}/PKG-INFO +51 -54
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/constants.py +4 -1
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/data_modelling_tools.py +31 -1
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/settings_tools.py +4 -2
- {fmtr_tools-1.3.75 → 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.75 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/PKG-INFO +51 -54
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/requires.txt +50 -53
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/setup.py +1 -1
- fmtr_tools-1.3.75/fmtr/tools/version +0 -1
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/LICENSE +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/README.md +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/context_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/database_tools/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/database_tools/document.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/datetime_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/client.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/dm.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/proxy.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/dns_tools/server.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/docker_tools/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/ep_test.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/entrypoints/shell_debug.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/google_api_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/inherit_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/interface_tools/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/interface_tools/context.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/interface_tools/controls.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/interface_tools/interface_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/version_tools/__init__.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/version_tools/version_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/webhook_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/SOURCES.txt +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.3.75 → fmtr_tools-1.3.76}/pyproject.toml +0 -0
- {fmtr_tools-1.3.75 → 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:
|
|
172
|
-
Requires-Dist:
|
|
173
|
-
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
174
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
175
|
-
Requires-Dist: pydantic; extra == "all"
|
|
176
|
-
Requires-Dist: httpx; extra == "all"
|
|
177
|
-
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
178
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
179
|
-
Requires-Dist: regex; extra == "all"
|
|
180
|
-
Requires-Dist: flet-webview; extra == "all"
|
|
181
|
-
Requires-Dist: openai; extra == "all"
|
|
169
|
+
Requires-Dist: json_repair; extra == "all"
|
|
170
|
+
Requires-Dist: distributed; extra == "all"
|
|
182
171
|
Requires-Dist: pyyaml; extra == "all"
|
|
183
|
-
Requires-Dist:
|
|
184
|
-
Requires-Dist:
|
|
185
|
-
Requires-Dist:
|
|
172
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
173
|
+
Requires-Dist: ollama; extra == "all"
|
|
174
|
+
Requires-Dist: openai; extra == "all"
|
|
186
175
|
Requires-Dist: pymupdf; extra == "all"
|
|
187
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
188
176
|
Requires-Dist: logfire[httpx]; extra == "all"
|
|
189
|
-
Requires-Dist: html2text; extra == "all"
|
|
190
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
191
|
-
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
192
|
-
Requires-Dist: beanie[odm]; extra == "all"
|
|
193
|
-
Requires-Dist: bokeh; extra == "all"
|
|
194
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
195
|
-
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
196
|
-
Requires-Dist: google-auth; extra == "all"
|
|
197
|
-
Requires-Dist: faker; extra == "all"
|
|
198
|
-
Requires-Dist: yamlscript; extra == "all"
|
|
199
177
|
Requires-Dist: sentence_transformers; extra == "all"
|
|
200
|
-
Requires-Dist:
|
|
201
|
-
Requires-Dist:
|
|
202
|
-
Requires-Dist:
|
|
203
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
178
|
+
Requires-Dist: setuptools; extra == "all"
|
|
179
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
180
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
204
181
|
Requires-Dist: huggingface_hub; extra == "all"
|
|
182
|
+
Requires-Dist: logfire; extra == "all"
|
|
183
|
+
Requires-Dist: torchaudio; extra == "all"
|
|
184
|
+
Requires-Dist: playwright; extra == "all"
|
|
185
|
+
Requires-Dist: torchvision; extra == "all"
|
|
186
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
187
|
+
Requires-Dist: tabulate; extra == "all"
|
|
188
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
189
|
+
Requires-Dist: pycountry; extra == "all"
|
|
190
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
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"
|
|
205
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"
|
|
203
|
+
Requires-Dist: flet[all]; extra == "all"
|
|
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"
|
|
206
209
|
Requires-Dist: tokenizers; extra == "all"
|
|
210
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
211
|
+
Requires-Dist: odfpy; extra == "all"
|
|
207
212
|
Requires-Dist: pytest-cov; extra == "all"
|
|
208
|
-
Requires-Dist: appdirs; extra == "all"
|
|
209
|
-
Requires-Dist: pandas; extra == "all"
|
|
210
213
|
Requires-Dist: python-on-whales; extra == "all"
|
|
211
|
-
Requires-Dist:
|
|
212
|
-
Requires-Dist:
|
|
213
|
-
Requires-Dist:
|
|
214
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
215
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
216
|
-
Requires-Dist: google-api-python-client; extra == "all"
|
|
217
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
218
|
-
Requires-Dist: tabulate; extra == "all"
|
|
219
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
220
|
-
Requires-Dist: flet-video; extra == "all"
|
|
221
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
222
|
-
Requires-Dist: setuptools; extra == "all"
|
|
214
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
215
|
+
Requires-Dist: google-auth; extra == "all"
|
|
216
|
+
Requires-Dist: httpx; extra == "all"
|
|
223
217
|
Requires-Dist: semver; extra == "all"
|
|
224
|
-
Requires-Dist:
|
|
225
|
-
Requires-Dist:
|
|
226
|
-
Requires-Dist:
|
|
227
|
-
Requires-Dist: torchaudio; extra == "all"
|
|
228
|
-
Requires-Dist: diskcache; extra == "all"
|
|
218
|
+
Requires-Dist: flet-video; extra == "all"
|
|
219
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
220
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
229
221
|
Requires-Dist: cachetools; extra == "all"
|
|
230
|
-
Requires-Dist:
|
|
231
|
-
Requires-Dist:
|
|
232
|
-
Requires-Dist:
|
|
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.
|
|
@@ -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:
|
|
172
|
-
Requires-Dist:
|
|
173
|
-
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
174
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
175
|
-
Requires-Dist: pydantic; extra == "all"
|
|
176
|
-
Requires-Dist: httpx; extra == "all"
|
|
177
|
-
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
178
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
179
|
-
Requires-Dist: regex; extra == "all"
|
|
180
|
-
Requires-Dist: flet-webview; extra == "all"
|
|
181
|
-
Requires-Dist: openai; extra == "all"
|
|
169
|
+
Requires-Dist: json_repair; extra == "all"
|
|
170
|
+
Requires-Dist: distributed; extra == "all"
|
|
182
171
|
Requires-Dist: pyyaml; extra == "all"
|
|
183
|
-
Requires-Dist:
|
|
184
|
-
Requires-Dist:
|
|
185
|
-
Requires-Dist:
|
|
172
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
173
|
+
Requires-Dist: ollama; extra == "all"
|
|
174
|
+
Requires-Dist: openai; extra == "all"
|
|
186
175
|
Requires-Dist: pymupdf; extra == "all"
|
|
187
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
188
176
|
Requires-Dist: logfire[httpx]; extra == "all"
|
|
189
|
-
Requires-Dist: html2text; extra == "all"
|
|
190
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
191
|
-
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
192
|
-
Requires-Dist: beanie[odm]; extra == "all"
|
|
193
|
-
Requires-Dist: bokeh; extra == "all"
|
|
194
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
195
|
-
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
196
|
-
Requires-Dist: google-auth; extra == "all"
|
|
197
|
-
Requires-Dist: faker; extra == "all"
|
|
198
|
-
Requires-Dist: yamlscript; extra == "all"
|
|
199
177
|
Requires-Dist: sentence_transformers; extra == "all"
|
|
200
|
-
Requires-Dist:
|
|
201
|
-
Requires-Dist:
|
|
202
|
-
Requires-Dist:
|
|
203
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
178
|
+
Requires-Dist: setuptools; extra == "all"
|
|
179
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
180
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
204
181
|
Requires-Dist: huggingface_hub; extra == "all"
|
|
182
|
+
Requires-Dist: logfire; extra == "all"
|
|
183
|
+
Requires-Dist: torchaudio; extra == "all"
|
|
184
|
+
Requires-Dist: playwright; extra == "all"
|
|
185
|
+
Requires-Dist: torchvision; extra == "all"
|
|
186
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
187
|
+
Requires-Dist: tabulate; extra == "all"
|
|
188
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
189
|
+
Requires-Dist: pycountry; extra == "all"
|
|
190
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
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"
|
|
205
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"
|
|
203
|
+
Requires-Dist: flet[all]; extra == "all"
|
|
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"
|
|
206
209
|
Requires-Dist: tokenizers; extra == "all"
|
|
210
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
211
|
+
Requires-Dist: odfpy; extra == "all"
|
|
207
212
|
Requires-Dist: pytest-cov; extra == "all"
|
|
208
|
-
Requires-Dist: appdirs; extra == "all"
|
|
209
|
-
Requires-Dist: pandas; extra == "all"
|
|
210
213
|
Requires-Dist: python-on-whales; extra == "all"
|
|
211
|
-
Requires-Dist:
|
|
212
|
-
Requires-Dist:
|
|
213
|
-
Requires-Dist:
|
|
214
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
215
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
216
|
-
Requires-Dist: google-api-python-client; extra == "all"
|
|
217
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
218
|
-
Requires-Dist: tabulate; extra == "all"
|
|
219
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
220
|
-
Requires-Dist: flet-video; extra == "all"
|
|
221
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
222
|
-
Requires-Dist: setuptools; extra == "all"
|
|
214
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
215
|
+
Requires-Dist: google-auth; extra == "all"
|
|
216
|
+
Requires-Dist: httpx; extra == "all"
|
|
223
217
|
Requires-Dist: semver; extra == "all"
|
|
224
|
-
Requires-Dist:
|
|
225
|
-
Requires-Dist:
|
|
226
|
-
Requires-Dist:
|
|
227
|
-
Requires-Dist: torchaudio; extra == "all"
|
|
228
|
-
Requires-Dist: diskcache; extra == "all"
|
|
218
|
+
Requires-Dist: flet-video; extra == "all"
|
|
219
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
220
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
229
221
|
Requires-Dist: cachetools; extra == "all"
|
|
230
|
-
Requires-Dist:
|
|
231
|
-
Requires-Dist:
|
|
232
|
-
Requires-Dist:
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
google-auth-httplib2
|
|
24
|
-
contexttimer
|
|
25
|
-
pydantic
|
|
26
|
-
httpx
|
|
27
|
-
google-auth-oauthlib
|
|
28
|
-
sre_yield
|
|
29
|
-
regex
|
|
30
|
-
flet-webview
|
|
31
|
-
openai
|
|
21
|
+
json_repair
|
|
22
|
+
distributed
|
|
32
23
|
pyyaml
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
Unidecode
|
|
25
|
+
ollama
|
|
26
|
+
openai
|
|
36
27
|
pymupdf
|
|
37
|
-
deepmerge
|
|
38
28
|
logfire[httpx]
|
|
39
|
-
html2text
|
|
40
|
-
transformers[sentencepiece]
|
|
41
|
-
pydantic-extra-types
|
|
42
|
-
beanie[odm]
|
|
43
|
-
bokeh
|
|
44
|
-
tinynetrc
|
|
45
|
-
pydevd-pycharm~=251.25410.159
|
|
46
|
-
google-auth
|
|
47
|
-
faker
|
|
48
|
-
yamlscript
|
|
49
29
|
sentence_transformers
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
uvicorn[standard]
|
|
30
|
+
setuptools
|
|
31
|
+
contexttimer
|
|
32
|
+
sre_yield
|
|
54
33
|
huggingface_hub
|
|
34
|
+
logfire
|
|
35
|
+
torchaudio
|
|
36
|
+
playwright
|
|
37
|
+
torchvision
|
|
38
|
+
deepdiff
|
|
39
|
+
tabulate
|
|
40
|
+
pydantic-extra-types
|
|
41
|
+
pycountry
|
|
42
|
+
dask[bag]
|
|
43
|
+
html2text
|
|
44
|
+
appdirs
|
|
45
|
+
logfire[fastapi]
|
|
46
|
+
openpyxl
|
|
55
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]
|
|
55
|
+
flet[all]
|
|
56
|
+
google-auth-oauthlib
|
|
57
|
+
filetype
|
|
58
|
+
deepmerge
|
|
59
|
+
tinynetrc
|
|
60
|
+
fastapi
|
|
56
61
|
tokenizers
|
|
62
|
+
pydantic-ai[logfire,openai]
|
|
63
|
+
odfpy
|
|
57
64
|
pytest-cov
|
|
58
|
-
appdirs
|
|
59
|
-
pandas
|
|
60
65
|
python-on-whales
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
deepdiff
|
|
65
|
-
pydantic-settings
|
|
66
|
-
google-api-python-client
|
|
67
|
-
dask[bag]
|
|
68
|
-
tabulate
|
|
69
|
-
Unidecode
|
|
70
|
-
flet-video
|
|
71
|
-
dnspython[doh]
|
|
72
|
-
setuptools
|
|
66
|
+
pydevd-pycharm~=251.25410.159
|
|
67
|
+
google-auth
|
|
68
|
+
httpx
|
|
73
69
|
semver
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
torchaudio
|
|
78
|
-
diskcache
|
|
70
|
+
flet-video
|
|
71
|
+
flet-webview
|
|
72
|
+
yamlscript
|
|
79
73
|
cachetools
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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.75
|
|
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
|