fmtr.tools 1.1.27__tar.gz → 1.1.29__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.29}/PKG-INFO +42 -42
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/constants.py +4 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/setup_tools/setup_tools.py +52 -30
- fmtr_tools-1.1.29/fmtr/tools/version +1 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/PKG-INFO +42 -42
- fmtr_tools-1.1.27/fmtr/tools/version +0 -1
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/LICENSE +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/README.md +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/console_script_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/data_modelling_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/dns_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/docker_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/google_api_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/interface_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/settings_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/version_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/SOURCES.txt +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/requires.txt +41 -41
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/setup.cfg +0 -0
- {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/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.29
|
|
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:
|
|
12
|
+
Requires-Dist: contexttimer; extra == "test"
|
|
13
|
+
Requires-Dist: huggingface_hub; extra == "test"
|
|
14
|
+
Requires-Dist: sentence_transformers; extra == "test"
|
|
15
|
+
Requires-Dist: logfire[fastapi]; extra == "test"
|
|
16
|
+
Requires-Dist: dask[bag]; extra == "test"
|
|
17
|
+
Requires-Dist: ollama; extra == "test"
|
|
14
18
|
Requires-Dist: appdirs; extra == "test"
|
|
15
|
-
Requires-Dist:
|
|
16
|
-
Requires-Dist:
|
|
19
|
+
Requires-Dist: torchaudio; extra == "test"
|
|
20
|
+
Requires-Dist: Unidecode; extra == "test"
|
|
17
21
|
Requires-Dist: bokeh; extra == "test"
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist: tabulate; extra == "test"
|
|
20
|
-
Requires-Dist: ollama; extra == "test"
|
|
21
|
-
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
22
|
+
Requires-Dist: httpx_retries; extra == "test"
|
|
22
23
|
Requires-Dist: openai; extra == "test"
|
|
24
|
+
Requires-Dist: fastapi; extra == "test"
|
|
25
|
+
Requires-Dist: html2text; extra == "test"
|
|
26
|
+
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
27
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
28
|
+
Requires-Dist: pandas; extra == "test"
|
|
29
|
+
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
23
30
|
Requires-Dist: pyyaml; extra == "test"
|
|
24
|
-
Requires-Dist: huggingface_hub; extra == "test"
|
|
25
|
-
Requires-Dist: pytest-cov; extra == "test"
|
|
26
31
|
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"
|
|
30
|
-
Requires-Dist: yamlscript; extra == "test"
|
|
31
|
-
Requires-Dist: html2text; extra == "test"
|
|
32
|
-
Requires-Dist: deepmerge; extra == "test"
|
|
33
|
-
Requires-Dist: regex; extra == "test"
|
|
34
|
-
Requires-Dist: fastapi; extra == "test"
|
|
35
32
|
Requires-Dist: httpx; extra == "test"
|
|
36
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: distributed; extra == "test"
|
|
34
|
+
Requires-Dist: deepmerge; extra == "test"
|
|
35
|
+
Requires-Dist: json_repair; extra == "test"
|
|
37
36
|
Requires-Dist: dnspython[doh]; extra == "test"
|
|
38
|
-
Requires-Dist:
|
|
37
|
+
Requires-Dist: tabulate; extra == "test"
|
|
38
|
+
Requires-Dist: tinynetrc; extra == "test"
|
|
39
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
40
|
+
Requires-Dist: openpyxl; extra == "test"
|
|
41
|
+
Requires-Dist: filetype; extra == "test"
|
|
42
|
+
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
39
43
|
Requires-Dist: torchvision; extra == "test"
|
|
44
|
+
Requires-Dist: google-api-python-client; extra == "test"
|
|
45
|
+
Requires-Dist: semver; extra == "test"
|
|
40
46
|
Requires-Dist: google-auth; extra == "test"
|
|
41
|
-
Requires-Dist:
|
|
47
|
+
Requires-Dist: flet-webview; extra == "test"
|
|
48
|
+
Requires-Dist: docker; extra == "test"
|
|
49
|
+
Requires-Dist: logfire[httpx]; extra == "test"
|
|
50
|
+
Requires-Dist: logfire; extra == "test"
|
|
51
|
+
Requires-Dist: sre_yield; extra == "test"
|
|
52
|
+
Requires-Dist: flet[all]; extra == "test"
|
|
53
|
+
Requires-Dist: tokenizers; extra == "test"
|
|
54
|
+
Requires-Dist: faker; extra == "test"
|
|
42
55
|
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
43
|
-
Requires-Dist:
|
|
56
|
+
Requires-Dist: pymupdf; extra == "test"
|
|
57
|
+
Requires-Dist: flet-video; extra == "test"
|
|
58
|
+
Requires-Dist: yamlscript; extra == "test"
|
|
44
59
|
Requires-Dist: pydantic; extra == "test"
|
|
45
|
-
Requires-Dist:
|
|
60
|
+
Requires-Dist: pymupdf4llm; extra == "test"
|
|
61
|
+
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
46
62
|
Requires-Dist: setuptools; extra == "test"
|
|
47
|
-
Requires-Dist:
|
|
48
|
-
Requires-Dist: flet-video; extra == "test"
|
|
49
|
-
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
50
|
-
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
51
|
-
Requires-Dist: contexttimer; extra == "test"
|
|
52
|
-
Requires-Dist: logfire[fastapi]; extra == "test"
|
|
53
|
-
Requires-Dist: httpx_retries; extra == "test"
|
|
54
|
-
Requires-Dist: sre_yield; extra == "test"
|
|
63
|
+
Requires-Dist: diskcache; extra == "test"
|
|
55
64
|
Requires-Dist: peft; extra == "test"
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist: filetype; extra == "test"
|
|
58
|
-
Requires-Dist: semver; extra == "test"
|
|
59
|
-
Requires-Dist: tinynetrc; extra == "test"
|
|
60
|
-
Requires-Dist: json_repair; extra == "test"
|
|
61
|
-
Requires-Dist: google-api-python-client; extra == "test"
|
|
62
|
-
Requires-Dist: flet-webview; extra == "test"
|
|
63
|
-
Requires-Dist: logfire; extra == "test"
|
|
64
|
-
Requires-Dist: logfire[httpx]; extra == "test"
|
|
65
|
-
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
65
|
+
Requires-Dist: regex; 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,31 @@ 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
|
+
]
|
|
54
|
+
|
|
55
|
+
if len(packages) != 1:
|
|
56
|
+
dirs_str = ', '.join([str(dir) for dir in packages])
|
|
57
|
+
msg = f'Expected exactly one package in {self.repo}, found {dirs_str}'
|
|
51
58
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
59
|
+
from fmtr.tools import env
|
|
60
|
+
if env.get_bool('FMTR_SETUP_PAUSE'):
|
|
61
|
+
print(msg)
|
|
62
|
+
print('sleeping...')
|
|
63
|
+
from time import sleep
|
|
64
|
+
sleep(600)
|
|
55
65
|
|
|
56
|
-
|
|
66
|
+
raise ValueError(msg)
|
|
67
|
+
|
|
68
|
+
package = next(iter(packages))
|
|
57
69
|
return package
|
|
58
70
|
|
|
59
71
|
@property
|
|
@@ -65,6 +77,10 @@ class SetupPaths(FromCallerMixin):
|
|
|
65
77
|
return False
|
|
66
78
|
return org
|
|
67
79
|
|
|
80
|
+
@property
|
|
81
|
+
def entrypoints(self):
|
|
82
|
+
return self.path / Constants.ENTRYPOINTS_DIR
|
|
83
|
+
|
|
68
84
|
@property
|
|
69
85
|
def is_namespace(self) -> bool:
|
|
70
86
|
return bool(self.org)
|
|
@@ -79,9 +95,13 @@ class Setup(FromCallerMixin):
|
|
|
79
95
|
AUTHOR_EMAIL = 'innovative.fowler@mask.pro.fmtr.dev'
|
|
80
96
|
|
|
81
97
|
REQUIREMENTS_ARG = 'requirements'
|
|
82
|
-
SKIP_DIRS = {'data', 'build', 'dist', '.*', '*egg-info*'}
|
|
83
98
|
|
|
84
|
-
|
|
99
|
+
ENTRYPOINT_COMMAND_SEP = '-'
|
|
100
|
+
ENTRYPOINT_FUNCTION_SEP = '_'
|
|
101
|
+
ENTRYPOINT_FUNC_NAME = 'main'
|
|
102
|
+
|
|
103
|
+
def __init__(self, dependencies, paths=None, org=Constants.ORG_NAME, client=None, do_setup=True, **kwargs):
|
|
104
|
+
|
|
85
105
|
|
|
86
106
|
self.kwargs = kwargs
|
|
87
107
|
|
|
@@ -102,7 +122,7 @@ class Setup(FromCallerMixin):
|
|
|
102
122
|
self.paths = paths
|
|
103
123
|
|
|
104
124
|
self.client = client
|
|
105
|
-
|
|
125
|
+
|
|
106
126
|
|
|
107
127
|
if do_setup:
|
|
108
128
|
self.setup()
|
|
@@ -124,22 +144,21 @@ class Setup(FromCallerMixin):
|
|
|
124
144
|
reqs = '\n'.join(reqs)
|
|
125
145
|
print(reqs)
|
|
126
146
|
|
|
147
|
+
@property
|
|
148
|
+
def console_scripts(self):
|
|
127
149
|
|
|
150
|
+
if not self.paths.entrypoints.exists():
|
|
151
|
+
return {}
|
|
128
152
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
153
|
+
names_mods = [path.stem for path in self.paths.entrypoints.iterdir() if path.is_file() and not path.stem.startswith('_')]
|
|
154
|
+
command_prefix = self.name.replace('.', self.ENTRYPOINT_COMMAND_SEP)
|
|
155
|
+
command_suffixes = [name_mod.replace(self.ENTRYPOINT_FUNCTION_SEP, self.ENTRYPOINT_COMMAND_SEP) for name_mod in names_mods]
|
|
156
|
+
commands = [f'{command_prefix}-{command_suffix}' for command_suffix in command_suffixes]
|
|
157
|
+
paths = [f'{self.name}.{Constants.ENTRYPOINTS_DIR}.{name_mod}:{self.ENTRYPOINT_FUNC_NAME}' for name_mod in names_mods]
|
|
134
158
|
|
|
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()
|
|
159
|
+
console_scripts = [f'{command} = {path}' for command, path in zip(commands, paths)]
|
|
160
|
+
|
|
161
|
+
return console_scripts
|
|
143
162
|
|
|
144
163
|
@property
|
|
145
164
|
def name(self):
|
|
@@ -180,16 +199,14 @@ class Setup(FromCallerMixin):
|
|
|
180
199
|
|
|
181
200
|
@property
|
|
182
201
|
def packages(self):
|
|
183
|
-
|
|
184
|
-
excludes = list(self.SKIP_DIRS) + [f'{name}.*' for name in self.SKIP_DIRS if '*' not in name]
|
|
185
|
-
|
|
202
|
+
excludes = list(Constants.PACKAGE_EXCLUDE_DIRS) + [f'{name}.*' for name in Constants.PACKAGE_EXCLUDE_DIRS if '*' not in name]
|
|
186
203
|
packages = self.find(where=str(self.paths.repo), exclude=excludes)
|
|
187
204
|
return packages
|
|
188
205
|
|
|
189
206
|
@property
|
|
190
207
|
def package_dir(self):
|
|
191
208
|
if self.paths.is_namespace:
|
|
192
|
-
return {'':
|
|
209
|
+
return {'': '.'}
|
|
193
210
|
else:
|
|
194
211
|
return None
|
|
195
212
|
|
|
@@ -215,7 +232,9 @@ class Setup(FromCallerMixin):
|
|
|
215
232
|
packages=self.packages,
|
|
216
233
|
package_dir=self.package_dir,
|
|
217
234
|
package_data=self.package_data,
|
|
218
|
-
entry_points=
|
|
235
|
+
entry_points=dict(
|
|
236
|
+
console_scripts=self.console_scripts,
|
|
237
|
+
),
|
|
219
238
|
install_requires=self.dependencies.install,
|
|
220
239
|
extras_require=self.dependencies.extras,
|
|
221
240
|
) | self.kwargs
|
|
@@ -280,7 +299,10 @@ class Dependencies:
|
|
|
280
299
|
|
|
281
300
|
@cached_property
|
|
282
301
|
def install(self):
|
|
283
|
-
|
|
302
|
+
if self.INSTALL in self.dependencies:
|
|
303
|
+
return self.resolve_values(self.INSTALL)
|
|
304
|
+
else:
|
|
305
|
+
return []
|
|
284
306
|
|
|
285
307
|
|
|
286
308
|
if __name__ == '__main__':
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.1.29
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.29
|
|
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:
|
|
12
|
+
Requires-Dist: contexttimer; extra == "test"
|
|
13
|
+
Requires-Dist: huggingface_hub; extra == "test"
|
|
14
|
+
Requires-Dist: sentence_transformers; extra == "test"
|
|
15
|
+
Requires-Dist: logfire[fastapi]; extra == "test"
|
|
16
|
+
Requires-Dist: dask[bag]; extra == "test"
|
|
17
|
+
Requires-Dist: ollama; extra == "test"
|
|
14
18
|
Requires-Dist: appdirs; extra == "test"
|
|
15
|
-
Requires-Dist:
|
|
16
|
-
Requires-Dist:
|
|
19
|
+
Requires-Dist: torchaudio; extra == "test"
|
|
20
|
+
Requires-Dist: Unidecode; extra == "test"
|
|
17
21
|
Requires-Dist: bokeh; extra == "test"
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist: tabulate; extra == "test"
|
|
20
|
-
Requires-Dist: ollama; extra == "test"
|
|
21
|
-
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
22
|
+
Requires-Dist: httpx_retries; extra == "test"
|
|
22
23
|
Requires-Dist: openai; extra == "test"
|
|
24
|
+
Requires-Dist: fastapi; extra == "test"
|
|
25
|
+
Requires-Dist: html2text; extra == "test"
|
|
26
|
+
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
27
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
28
|
+
Requires-Dist: pandas; extra == "test"
|
|
29
|
+
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
23
30
|
Requires-Dist: pyyaml; extra == "test"
|
|
24
|
-
Requires-Dist: huggingface_hub; extra == "test"
|
|
25
|
-
Requires-Dist: pytest-cov; extra == "test"
|
|
26
31
|
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"
|
|
30
|
-
Requires-Dist: yamlscript; extra == "test"
|
|
31
|
-
Requires-Dist: html2text; extra == "test"
|
|
32
|
-
Requires-Dist: deepmerge; extra == "test"
|
|
33
|
-
Requires-Dist: regex; extra == "test"
|
|
34
|
-
Requires-Dist: fastapi; extra == "test"
|
|
35
32
|
Requires-Dist: httpx; extra == "test"
|
|
36
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: distributed; extra == "test"
|
|
34
|
+
Requires-Dist: deepmerge; extra == "test"
|
|
35
|
+
Requires-Dist: json_repair; extra == "test"
|
|
37
36
|
Requires-Dist: dnspython[doh]; extra == "test"
|
|
38
|
-
Requires-Dist:
|
|
37
|
+
Requires-Dist: tabulate; extra == "test"
|
|
38
|
+
Requires-Dist: tinynetrc; extra == "test"
|
|
39
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
40
|
+
Requires-Dist: openpyxl; extra == "test"
|
|
41
|
+
Requires-Dist: filetype; extra == "test"
|
|
42
|
+
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
39
43
|
Requires-Dist: torchvision; extra == "test"
|
|
44
|
+
Requires-Dist: google-api-python-client; extra == "test"
|
|
45
|
+
Requires-Dist: semver; extra == "test"
|
|
40
46
|
Requires-Dist: google-auth; extra == "test"
|
|
41
|
-
Requires-Dist:
|
|
47
|
+
Requires-Dist: flet-webview; extra == "test"
|
|
48
|
+
Requires-Dist: docker; extra == "test"
|
|
49
|
+
Requires-Dist: logfire[httpx]; extra == "test"
|
|
50
|
+
Requires-Dist: logfire; extra == "test"
|
|
51
|
+
Requires-Dist: sre_yield; extra == "test"
|
|
52
|
+
Requires-Dist: flet[all]; extra == "test"
|
|
53
|
+
Requires-Dist: tokenizers; extra == "test"
|
|
54
|
+
Requires-Dist: faker; extra == "test"
|
|
42
55
|
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
43
|
-
Requires-Dist:
|
|
56
|
+
Requires-Dist: pymupdf; extra == "test"
|
|
57
|
+
Requires-Dist: flet-video; extra == "test"
|
|
58
|
+
Requires-Dist: yamlscript; extra == "test"
|
|
44
59
|
Requires-Dist: pydantic; extra == "test"
|
|
45
|
-
Requires-Dist:
|
|
60
|
+
Requires-Dist: pymupdf4llm; extra == "test"
|
|
61
|
+
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
46
62
|
Requires-Dist: setuptools; extra == "test"
|
|
47
|
-
Requires-Dist:
|
|
48
|
-
Requires-Dist: flet-video; extra == "test"
|
|
49
|
-
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
50
|
-
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
51
|
-
Requires-Dist: contexttimer; extra == "test"
|
|
52
|
-
Requires-Dist: logfire[fastapi]; extra == "test"
|
|
53
|
-
Requires-Dist: httpx_retries; extra == "test"
|
|
54
|
-
Requires-Dist: sre_yield; extra == "test"
|
|
63
|
+
Requires-Dist: diskcache; extra == "test"
|
|
55
64
|
Requires-Dist: peft; extra == "test"
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist: filetype; extra == "test"
|
|
58
|
-
Requires-Dist: semver; extra == "test"
|
|
59
|
-
Requires-Dist: tinynetrc; extra == "test"
|
|
60
|
-
Requires-Dist: json_repair; extra == "test"
|
|
61
|
-
Requires-Dist: google-api-python-client; extra == "test"
|
|
62
|
-
Requires-Dist: flet-webview; extra == "test"
|
|
63
|
-
Requires-Dist: logfire; extra == "test"
|
|
64
|
-
Requires-Dist: logfire[httpx]; extra == "test"
|
|
65
|
-
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
65
|
+
Requires-Dist: regex; 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
|
-
|
|
138
|
+
contexttimer
|
|
139
|
+
huggingface_hub
|
|
140
|
+
sentence_transformers
|
|
141
|
+
logfire[fastapi]
|
|
142
|
+
dask[bag]
|
|
143
|
+
ollama
|
|
140
144
|
appdirs
|
|
141
|
-
|
|
142
|
-
|
|
145
|
+
torchaudio
|
|
146
|
+
Unidecode
|
|
143
147
|
bokeh
|
|
144
|
-
|
|
145
|
-
tabulate
|
|
146
|
-
ollama
|
|
147
|
-
pydevd-pycharm
|
|
148
|
+
httpx_retries
|
|
148
149
|
openai
|
|
150
|
+
fastapi
|
|
151
|
+
html2text
|
|
152
|
+
google-auth-oauthlib
|
|
153
|
+
pydantic-ai[logfire,openai]
|
|
154
|
+
pandas
|
|
155
|
+
google-auth-httplib2
|
|
149
156
|
pyyaml
|
|
150
|
-
huggingface_hub
|
|
151
|
-
pytest-cov
|
|
152
157
|
pydantic-settings
|
|
153
|
-
pymupdf
|
|
154
|
-
sentence_transformers
|
|
155
|
-
pymupdf4llm
|
|
156
|
-
yamlscript
|
|
157
|
-
html2text
|
|
158
|
-
deepmerge
|
|
159
|
-
regex
|
|
160
|
-
fastapi
|
|
161
158
|
httpx
|
|
162
|
-
|
|
159
|
+
distributed
|
|
160
|
+
deepmerge
|
|
161
|
+
json_repair
|
|
163
162
|
dnspython[doh]
|
|
164
|
-
|
|
163
|
+
tabulate
|
|
164
|
+
tinynetrc
|
|
165
|
+
pytest-cov
|
|
166
|
+
openpyxl
|
|
167
|
+
filetype
|
|
168
|
+
transformers[sentencepiece]
|
|
165
169
|
torchvision
|
|
170
|
+
google-api-python-client
|
|
171
|
+
semver
|
|
166
172
|
google-auth
|
|
167
|
-
|
|
173
|
+
flet-webview
|
|
174
|
+
docker
|
|
175
|
+
logfire[httpx]
|
|
176
|
+
logfire
|
|
177
|
+
sre_yield
|
|
178
|
+
flet[all]
|
|
179
|
+
tokenizers
|
|
180
|
+
faker
|
|
168
181
|
uvicorn[standard]
|
|
169
|
-
|
|
182
|
+
pymupdf
|
|
183
|
+
flet-video
|
|
184
|
+
yamlscript
|
|
170
185
|
pydantic
|
|
171
|
-
|
|
186
|
+
pymupdf4llm
|
|
187
|
+
pydevd-pycharm
|
|
172
188
|
setuptools
|
|
173
|
-
|
|
174
|
-
flet-video
|
|
175
|
-
google-auth-httplib2
|
|
176
|
-
transformers[sentencepiece]
|
|
177
|
-
contexttimer
|
|
178
|
-
logfire[fastapi]
|
|
179
|
-
httpx_retries
|
|
180
|
-
sre_yield
|
|
189
|
+
diskcache
|
|
181
190
|
peft
|
|
182
|
-
|
|
183
|
-
filetype
|
|
184
|
-
semver
|
|
185
|
-
tinynetrc
|
|
186
|
-
json_repair
|
|
187
|
-
google-api-python-client
|
|
188
|
-
flet-webview
|
|
189
|
-
logfire
|
|
190
|
-
logfire[httpx]
|
|
191
|
-
google-auth-oauthlib
|
|
191
|
+
regex
|
|
192
192
|
|
|
193
193
|
[tokenization]
|
|
194
194
|
tokenizers
|
|
File without changes
|
|
File without changes
|
|
File without changes
|