fmtr.tools 1.1.27__tar.gz → 1.1.28__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.1.27 → fmtr_tools-1.1.28}/PKG-INFO +43 -43
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/constants.py +4 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/setup_tools/setup_tools.py +42 -29
- fmtr_tools-1.1.28/fmtr/tools/version +1 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr.tools.egg-info/PKG-INFO +43 -43
- fmtr_tools-1.1.27/fmtr/tools/version +0 -1
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/LICENSE +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/README.md +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/console_script_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/data_modelling_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/dns_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/docker_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/google_api_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/interface_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/settings_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/version_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr.tools.egg-info/SOURCES.txt +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr.tools.egg-info/requires.txt +42 -42
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/setup.cfg +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.28}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.28
|
|
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
|
|
@@ -9,60 +9,60 @@ License: Copyright © 2025 Frontmatter. All rights reserved.
|
|
|
9
9
|
Description-Content-Type: text/markdown
|
|
10
10
|
License-File: LICENSE
|
|
11
11
|
Provides-Extra: test
|
|
12
|
-
Requires-Dist:
|
|
13
|
-
Requires-Dist:
|
|
14
|
-
Requires-Dist:
|
|
15
|
-
Requires-Dist:
|
|
16
|
-
Requires-Dist:
|
|
12
|
+
Requires-Dist: setuptools; extra == "test"
|
|
13
|
+
Requires-Dist: httpx_retries; extra == "test"
|
|
14
|
+
Requires-Dist: flet-webview; extra == "test"
|
|
15
|
+
Requires-Dist: filetype; extra == "test"
|
|
16
|
+
Requires-Dist: httpx; extra == "test"
|
|
17
17
|
Requires-Dist: bokeh; extra == "test"
|
|
18
|
-
Requires-Dist:
|
|
18
|
+
Requires-Dist: fastapi; extra == "test"
|
|
19
19
|
Requires-Dist: tabulate; extra == "test"
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist: pydantic-settings; extra == "test"
|
|
27
|
-
Requires-Dist: pymupdf; extra == "test"
|
|
28
|
-
Requires-Dist: sentence_transformers; extra == "test"
|
|
29
|
-
Requires-Dist: pymupdf4llm; extra == "test"
|
|
20
|
+
Requires-Dist: flet-video; extra == "test"
|
|
21
|
+
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
22
|
+
Requires-Dist: logfire[httpx]; extra == "test"
|
|
23
|
+
Requires-Dist: logfire; extra == "test"
|
|
24
|
+
Requires-Dist: torchaudio; extra == "test"
|
|
25
|
+
Requires-Dist: google-api-python-client; extra == "test"
|
|
30
26
|
Requires-Dist: yamlscript; extra == "test"
|
|
27
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
28
|
+
Requires-Dist: semver; extra == "test"
|
|
31
29
|
Requires-Dist: html2text; extra == "test"
|
|
32
|
-
Requires-Dist: deepmerge; extra == "test"
|
|
33
|
-
Requires-Dist: regex; extra == "test"
|
|
34
|
-
Requires-Dist: fastapi; extra == "test"
|
|
35
|
-
Requires-Dist: httpx; extra == "test"
|
|
36
|
-
Requires-Dist: pandas; extra == "test"
|
|
37
30
|
Requires-Dist: dnspython[doh]; extra == "test"
|
|
38
|
-
Requires-Dist: diskcache; extra == "test"
|
|
39
|
-
Requires-Dist: torchvision; extra == "test"
|
|
40
|
-
Requires-Dist: google-auth; extra == "test"
|
|
41
|
-
Requires-Dist: dask[bag]; extra == "test"
|
|
42
|
-
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
43
|
-
Requires-Dist: Unidecode; extra == "test"
|
|
44
31
|
Requires-Dist: pydantic; extra == "test"
|
|
45
|
-
Requires-Dist: faker; extra == "test"
|
|
46
|
-
Requires-Dist: setuptools; extra == "test"
|
|
47
32
|
Requires-Dist: tokenizers; extra == "test"
|
|
48
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: deepmerge; extra == "test"
|
|
34
|
+
Requires-Dist: ollama; extra == "test"
|
|
35
|
+
Requires-Dist: diskcache; extra == "test"
|
|
49
36
|
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
50
|
-
Requires-Dist:
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
Requires-Dist:
|
|
37
|
+
Requires-Dist: pymupdf; extra == "test"
|
|
38
|
+
Requires-Dist: tinynetrc; extra == "test"
|
|
39
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
40
|
+
Requires-Dist: regex; extra == "test"
|
|
41
|
+
Requires-Dist: faker; extra == "test"
|
|
42
|
+
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
54
43
|
Requires-Dist: sre_yield; extra == "test"
|
|
44
|
+
Requires-Dist: Unidecode; extra == "test"
|
|
45
|
+
Requires-Dist: pyyaml; extra == "test"
|
|
55
46
|
Requires-Dist: peft; extra == "test"
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist:
|
|
58
|
-
Requires-Dist:
|
|
59
|
-
Requires-Dist: tinynetrc; extra == "test"
|
|
47
|
+
Requires-Dist: pymupdf4llm; extra == "test"
|
|
48
|
+
Requires-Dist: distributed; extra == "test"
|
|
49
|
+
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
60
50
|
Requires-Dist: json_repair; extra == "test"
|
|
61
|
-
Requires-Dist:
|
|
62
|
-
Requires-Dist:
|
|
63
|
-
Requires-Dist:
|
|
64
|
-
Requires-Dist: logfire[httpx]; extra == "test"
|
|
51
|
+
Requires-Dist: torchvision; extra == "test"
|
|
52
|
+
Requires-Dist: sentence_transformers; extra == "test"
|
|
53
|
+
Requires-Dist: google-auth; extra == "test"
|
|
65
54
|
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
55
|
+
Requires-Dist: pydantic-settings; extra == "test"
|
|
56
|
+
Requires-Dist: docker; extra == "test"
|
|
57
|
+
Requires-Dist: flet[all]; extra == "test"
|
|
58
|
+
Requires-Dist: contexttimer; extra == "test"
|
|
59
|
+
Requires-Dist: huggingface_hub; extra == "test"
|
|
60
|
+
Requires-Dist: pandas; extra == "test"
|
|
61
|
+
Requires-Dist: openai; extra == "test"
|
|
62
|
+
Requires-Dist: appdirs; extra == "test"
|
|
63
|
+
Requires-Dist: dask[bag]; extra == "test"
|
|
64
|
+
Requires-Dist: openpyxl; extra == "test"
|
|
65
|
+
Requires-Dist: logfire[fastapi]; extra == "test"
|
|
66
66
|
Provides-Extra: yaml
|
|
67
67
|
Requires-Dist: yamlscript; extra == "yaml"
|
|
68
68
|
Requires-Dist: pyyaml; extra == "yaml"
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
from datetime import datetime
|
|
3
|
+
from fnmatch import fnmatch
|
|
3
4
|
from functools import cached_property
|
|
4
5
|
from itertools import chain
|
|
5
6
|
from typing import List, Dict
|
|
@@ -40,20 +41,22 @@ class SetupPaths(FromCallerMixin):
|
|
|
40
41
|
@cached_property
|
|
41
42
|
def path(self):
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if self.org:
|
|
44
|
+
if self.is_namespace:
|
|
46
45
|
base = self.org
|
|
47
46
|
else:
|
|
48
47
|
base = self.repo
|
|
49
48
|
|
|
50
|
-
|
|
49
|
+
packages = [
|
|
50
|
+
dir for dir in base.iterdir()
|
|
51
|
+
if (dir / Constants.INIT_FILENAME).is_file()
|
|
52
|
+
and not any(fnmatch(dir.name, pattern) for pattern in Constants.PACKAGE_EXCLUDE_DIRS)
|
|
53
|
+
]
|
|
51
54
|
|
|
52
|
-
if len(
|
|
53
|
-
dirs_str = ', '.join([str(dir) for dir in
|
|
54
|
-
raise ValueError(f'Expected exactly one
|
|
55
|
+
if len(packages) != 1:
|
|
56
|
+
dirs_str = ', '.join([str(dir) for dir in packages])
|
|
57
|
+
raise ValueError(f'Expected exactly one package in {self.repo}, found {dirs_str}')
|
|
55
58
|
|
|
56
|
-
package = next(iter(
|
|
59
|
+
package = next(iter(packages))
|
|
57
60
|
return package
|
|
58
61
|
|
|
59
62
|
@property
|
|
@@ -65,6 +68,10 @@ class SetupPaths(FromCallerMixin):
|
|
|
65
68
|
return False
|
|
66
69
|
return org
|
|
67
70
|
|
|
71
|
+
@property
|
|
72
|
+
def entrypoints(self):
|
|
73
|
+
return self.path / Constants.ENTRYPOINTS_DIR
|
|
74
|
+
|
|
68
75
|
@property
|
|
69
76
|
def is_namespace(self) -> bool:
|
|
70
77
|
return bool(self.org)
|
|
@@ -79,9 +86,13 @@ class Setup(FromCallerMixin):
|
|
|
79
86
|
AUTHOR_EMAIL = 'innovative.fowler@mask.pro.fmtr.dev'
|
|
80
87
|
|
|
81
88
|
REQUIREMENTS_ARG = 'requirements'
|
|
82
|
-
SKIP_DIRS = {'data', 'build', 'dist', '.*', '*egg-info*'}
|
|
83
89
|
|
|
84
|
-
|
|
90
|
+
ENTRYPOINT_COMMAND_SEP = '-'
|
|
91
|
+
ENTRYPOINT_FUNCTION_SEP = '_'
|
|
92
|
+
ENTRYPOINT_FUNC_NAME = 'main'
|
|
93
|
+
|
|
94
|
+
def __init__(self, dependencies, paths=None, org=Constants.ORG_NAME, client=None, do_setup=True, **kwargs):
|
|
95
|
+
|
|
85
96
|
|
|
86
97
|
self.kwargs = kwargs
|
|
87
98
|
|
|
@@ -102,7 +113,7 @@ class Setup(FromCallerMixin):
|
|
|
102
113
|
self.paths = paths
|
|
103
114
|
|
|
104
115
|
self.client = client
|
|
105
|
-
|
|
116
|
+
|
|
106
117
|
|
|
107
118
|
if do_setup:
|
|
108
119
|
self.setup()
|
|
@@ -124,22 +135,21 @@ class Setup(FromCallerMixin):
|
|
|
124
135
|
reqs = '\n'.join(reqs)
|
|
125
136
|
print(reqs)
|
|
126
137
|
|
|
138
|
+
@property
|
|
139
|
+
def console_scripts(self):
|
|
127
140
|
|
|
141
|
+
if not self.paths.entrypoints.exists():
|
|
142
|
+
return {}
|
|
128
143
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
144
|
+
names_mods = [path.stem for path in self.paths.entrypoints.iterdir() if path.is_file() and not path.stem.startswith('_')]
|
|
145
|
+
command_prefix = self.name.replace('.', self.ENTRYPOINT_COMMAND_SEP)
|
|
146
|
+
command_suffixes = [name_mod.replace(self.ENTRYPOINT_FUNCTION_SEP, self.ENTRYPOINT_COMMAND_SEP) for name_mod in names_mods]
|
|
147
|
+
commands = [f'{command_prefix}-{command_suffix}' for command_suffix in command_suffixes]
|
|
148
|
+
paths = [f'{self.name}.{Constants.ENTRYPOINTS_DIR}.{name_mod}:{self.ENTRYPOINT_FUNC_NAME}' for name_mod in names_mods]
|
|
134
149
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return dict(
|
|
139
|
-
console_scripts=[f'{key} = {self.get_entrypoint_path(key, value)}' for key, value in self.console_scripts.items()],
|
|
140
|
-
)
|
|
141
|
-
else:
|
|
142
|
-
return dict()
|
|
150
|
+
console_scripts = [f'{command} = {path}' for command, path in zip(commands, paths)]
|
|
151
|
+
|
|
152
|
+
return console_scripts
|
|
143
153
|
|
|
144
154
|
@property
|
|
145
155
|
def name(self):
|
|
@@ -180,9 +190,7 @@ class Setup(FromCallerMixin):
|
|
|
180
190
|
|
|
181
191
|
@property
|
|
182
192
|
def packages(self):
|
|
183
|
-
|
|
184
|
-
excludes = list(self.SKIP_DIRS) + [f'{name}.*' for name in self.SKIP_DIRS if '*' not in name]
|
|
185
|
-
|
|
193
|
+
excludes = list(Constants.PACKAGE_EXCLUDE_DIRS) + [f'{name}.*' for name in Constants.PACKAGE_EXCLUDE_DIRS if '*' not in name]
|
|
186
194
|
packages = self.find(where=str(self.paths.repo), exclude=excludes)
|
|
187
195
|
return packages
|
|
188
196
|
|
|
@@ -215,7 +223,9 @@ class Setup(FromCallerMixin):
|
|
|
215
223
|
packages=self.packages,
|
|
216
224
|
package_dir=self.package_dir,
|
|
217
225
|
package_data=self.package_data,
|
|
218
|
-
entry_points=
|
|
226
|
+
entry_points=dict(
|
|
227
|
+
console_scripts=self.console_scripts,
|
|
228
|
+
),
|
|
219
229
|
install_requires=self.dependencies.install,
|
|
220
230
|
extras_require=self.dependencies.extras,
|
|
221
231
|
) | self.kwargs
|
|
@@ -280,7 +290,10 @@ class Dependencies:
|
|
|
280
290
|
|
|
281
291
|
@cached_property
|
|
282
292
|
def install(self):
|
|
283
|
-
|
|
293
|
+
if self.INSTALL in self.dependencies:
|
|
294
|
+
return self.resolve_values(self.INSTALL)
|
|
295
|
+
else:
|
|
296
|
+
return []
|
|
284
297
|
|
|
285
298
|
|
|
286
299
|
if __name__ == '__main__':
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.1.28
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.28
|
|
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
|
|
@@ -9,60 +9,60 @@ License: Copyright © 2025 Frontmatter. All rights reserved.
|
|
|
9
9
|
Description-Content-Type: text/markdown
|
|
10
10
|
License-File: LICENSE
|
|
11
11
|
Provides-Extra: test
|
|
12
|
-
Requires-Dist:
|
|
13
|
-
Requires-Dist:
|
|
14
|
-
Requires-Dist:
|
|
15
|
-
Requires-Dist:
|
|
16
|
-
Requires-Dist:
|
|
12
|
+
Requires-Dist: setuptools; extra == "test"
|
|
13
|
+
Requires-Dist: httpx_retries; extra == "test"
|
|
14
|
+
Requires-Dist: flet-webview; extra == "test"
|
|
15
|
+
Requires-Dist: filetype; extra == "test"
|
|
16
|
+
Requires-Dist: httpx; extra == "test"
|
|
17
17
|
Requires-Dist: bokeh; extra == "test"
|
|
18
|
-
Requires-Dist:
|
|
18
|
+
Requires-Dist: fastapi; extra == "test"
|
|
19
19
|
Requires-Dist: tabulate; extra == "test"
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist: pydantic-settings; extra == "test"
|
|
27
|
-
Requires-Dist: pymupdf; extra == "test"
|
|
28
|
-
Requires-Dist: sentence_transformers; extra == "test"
|
|
29
|
-
Requires-Dist: pymupdf4llm; extra == "test"
|
|
20
|
+
Requires-Dist: flet-video; extra == "test"
|
|
21
|
+
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
22
|
+
Requires-Dist: logfire[httpx]; extra == "test"
|
|
23
|
+
Requires-Dist: logfire; extra == "test"
|
|
24
|
+
Requires-Dist: torchaudio; extra == "test"
|
|
25
|
+
Requires-Dist: google-api-python-client; extra == "test"
|
|
30
26
|
Requires-Dist: yamlscript; extra == "test"
|
|
27
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
28
|
+
Requires-Dist: semver; extra == "test"
|
|
31
29
|
Requires-Dist: html2text; extra == "test"
|
|
32
|
-
Requires-Dist: deepmerge; extra == "test"
|
|
33
|
-
Requires-Dist: regex; extra == "test"
|
|
34
|
-
Requires-Dist: fastapi; extra == "test"
|
|
35
|
-
Requires-Dist: httpx; extra == "test"
|
|
36
|
-
Requires-Dist: pandas; extra == "test"
|
|
37
30
|
Requires-Dist: dnspython[doh]; extra == "test"
|
|
38
|
-
Requires-Dist: diskcache; extra == "test"
|
|
39
|
-
Requires-Dist: torchvision; extra == "test"
|
|
40
|
-
Requires-Dist: google-auth; extra == "test"
|
|
41
|
-
Requires-Dist: dask[bag]; extra == "test"
|
|
42
|
-
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
43
|
-
Requires-Dist: Unidecode; extra == "test"
|
|
44
31
|
Requires-Dist: pydantic; extra == "test"
|
|
45
|
-
Requires-Dist: faker; extra == "test"
|
|
46
|
-
Requires-Dist: setuptools; extra == "test"
|
|
47
32
|
Requires-Dist: tokenizers; extra == "test"
|
|
48
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: deepmerge; extra == "test"
|
|
34
|
+
Requires-Dist: ollama; extra == "test"
|
|
35
|
+
Requires-Dist: diskcache; extra == "test"
|
|
49
36
|
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
50
|
-
Requires-Dist:
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
Requires-Dist:
|
|
37
|
+
Requires-Dist: pymupdf; extra == "test"
|
|
38
|
+
Requires-Dist: tinynetrc; extra == "test"
|
|
39
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
40
|
+
Requires-Dist: regex; extra == "test"
|
|
41
|
+
Requires-Dist: faker; extra == "test"
|
|
42
|
+
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
54
43
|
Requires-Dist: sre_yield; extra == "test"
|
|
44
|
+
Requires-Dist: Unidecode; extra == "test"
|
|
45
|
+
Requires-Dist: pyyaml; extra == "test"
|
|
55
46
|
Requires-Dist: peft; extra == "test"
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist:
|
|
58
|
-
Requires-Dist:
|
|
59
|
-
Requires-Dist: tinynetrc; extra == "test"
|
|
47
|
+
Requires-Dist: pymupdf4llm; extra == "test"
|
|
48
|
+
Requires-Dist: distributed; extra == "test"
|
|
49
|
+
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
60
50
|
Requires-Dist: json_repair; extra == "test"
|
|
61
|
-
Requires-Dist:
|
|
62
|
-
Requires-Dist:
|
|
63
|
-
Requires-Dist:
|
|
64
|
-
Requires-Dist: logfire[httpx]; extra == "test"
|
|
51
|
+
Requires-Dist: torchvision; extra == "test"
|
|
52
|
+
Requires-Dist: sentence_transformers; extra == "test"
|
|
53
|
+
Requires-Dist: google-auth; extra == "test"
|
|
65
54
|
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
55
|
+
Requires-Dist: pydantic-settings; extra == "test"
|
|
56
|
+
Requires-Dist: docker; extra == "test"
|
|
57
|
+
Requires-Dist: flet[all]; extra == "test"
|
|
58
|
+
Requires-Dist: contexttimer; extra == "test"
|
|
59
|
+
Requires-Dist: huggingface_hub; extra == "test"
|
|
60
|
+
Requires-Dist: pandas; extra == "test"
|
|
61
|
+
Requires-Dist: openai; extra == "test"
|
|
62
|
+
Requires-Dist: appdirs; extra == "test"
|
|
63
|
+
Requires-Dist: dask[bag]; extra == "test"
|
|
64
|
+
Requires-Dist: openpyxl; extra == "test"
|
|
65
|
+
Requires-Dist: logfire[fastapi]; extra == "test"
|
|
66
66
|
Provides-Extra: yaml
|
|
67
67
|
Requires-Dist: yamlscript; extra == "yaml"
|
|
68
68
|
Requires-Dist: pyyaml; extra == "yaml"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.1.27
|
|
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
|
|
@@ -135,60 +135,60 @@ tabulate
|
|
|
135
135
|
openpyxl
|
|
136
136
|
|
|
137
137
|
[test]
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
138
|
+
setuptools
|
|
139
|
+
httpx_retries
|
|
140
|
+
flet-webview
|
|
141
|
+
filetype
|
|
142
|
+
httpx
|
|
143
143
|
bokeh
|
|
144
|
-
|
|
144
|
+
fastapi
|
|
145
145
|
tabulate
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
pydantic-settings
|
|
153
|
-
pymupdf
|
|
154
|
-
sentence_transformers
|
|
155
|
-
pymupdf4llm
|
|
146
|
+
flet-video
|
|
147
|
+
uvicorn[standard]
|
|
148
|
+
logfire[httpx]
|
|
149
|
+
logfire
|
|
150
|
+
torchaudio
|
|
151
|
+
google-api-python-client
|
|
156
152
|
yamlscript
|
|
153
|
+
pydantic-ai[logfire,openai]
|
|
154
|
+
semver
|
|
157
155
|
html2text
|
|
158
|
-
deepmerge
|
|
159
|
-
regex
|
|
160
|
-
fastapi
|
|
161
|
-
httpx
|
|
162
|
-
pandas
|
|
163
156
|
dnspython[doh]
|
|
164
|
-
diskcache
|
|
165
|
-
torchvision
|
|
166
|
-
google-auth
|
|
167
|
-
dask[bag]
|
|
168
|
-
uvicorn[standard]
|
|
169
|
-
Unidecode
|
|
170
157
|
pydantic
|
|
171
|
-
faker
|
|
172
|
-
setuptools
|
|
173
158
|
tokenizers
|
|
174
|
-
|
|
159
|
+
deepmerge
|
|
160
|
+
ollama
|
|
161
|
+
diskcache
|
|
175
162
|
google-auth-httplib2
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
163
|
+
pymupdf
|
|
164
|
+
tinynetrc
|
|
165
|
+
pytest-cov
|
|
166
|
+
regex
|
|
167
|
+
faker
|
|
168
|
+
pydevd-pycharm
|
|
180
169
|
sre_yield
|
|
170
|
+
Unidecode
|
|
171
|
+
pyyaml
|
|
181
172
|
peft
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
tinynetrc
|
|
173
|
+
pymupdf4llm
|
|
174
|
+
distributed
|
|
175
|
+
transformers[sentencepiece]
|
|
186
176
|
json_repair
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
logfire[httpx]
|
|
177
|
+
torchvision
|
|
178
|
+
sentence_transformers
|
|
179
|
+
google-auth
|
|
191
180
|
google-auth-oauthlib
|
|
181
|
+
pydantic-settings
|
|
182
|
+
docker
|
|
183
|
+
flet[all]
|
|
184
|
+
contexttimer
|
|
185
|
+
huggingface_hub
|
|
186
|
+
pandas
|
|
187
|
+
openai
|
|
188
|
+
appdirs
|
|
189
|
+
dask[bag]
|
|
190
|
+
openpyxl
|
|
191
|
+
logfire[fastapi]
|
|
192
192
|
|
|
193
193
|
[tokenization]
|
|
194
194
|
tokenizers
|
|
File without changes
|
|
File without changes
|
|
File without changes
|