fmtr.tools 1.1.23__py3-none-any.whl → 1.1.24__py3-none-any.whl
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/setup_tools/setup_tools.py +34 -36
- fmtr/tools/version +1 -1
- {fmtr_tools-1.1.23.dist-info → fmtr_tools-1.1.24.dist-info}/METADATA +45 -45
- {fmtr_tools-1.1.23.dist-info → fmtr_tools-1.1.24.dist-info}/RECORD +8 -8
- {fmtr_tools-1.1.23.dist-info → fmtr_tools-1.1.24.dist-info}/WHEEL +0 -0
- {fmtr_tools-1.1.23.dist-info → fmtr_tools-1.1.24.dist-info}/entry_points.txt +0 -0
- {fmtr_tools-1.1.23.dist-info → fmtr_tools-1.1.24.dist-info}/licenses/LICENSE +0 -0
- {fmtr_tools-1.1.23.dist-info → fmtr_tools-1.1.24.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
from datetime import datetime
|
|
3
|
-
from fnmatch import fnmatch
|
|
4
3
|
from functools import cached_property
|
|
5
4
|
from itertools import chain
|
|
6
5
|
from typing import List, Dict
|
|
@@ -17,26 +16,21 @@ class SetupPaths(FromCallerMixin):
|
|
|
17
16
|
|
|
18
17
|
"""
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def __init__(self, path=None):
|
|
19
|
+
def __init__(self, path=None, org=Constants.ORG_NAME):
|
|
23
20
|
|
|
24
21
|
"""
|
|
25
22
|
|
|
26
23
|
Use calling module path as default path, if not otherwise specified.
|
|
24
|
+
:param org:
|
|
27
25
|
|
|
28
26
|
"""
|
|
29
27
|
if not path:
|
|
30
28
|
path = self.from_caller()
|
|
31
29
|
|
|
30
|
+
self.org_name = org
|
|
32
31
|
self.repo = Path(path)
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
def path(self):
|
|
36
|
-
if self.is_namespace:
|
|
37
|
-
return self.repo / self.org / self.name
|
|
38
|
-
else:
|
|
39
|
-
return self.repo / self.name
|
|
33
|
+
|
|
40
34
|
|
|
41
35
|
@property
|
|
42
36
|
def readme(self):
|
|
@@ -47,41 +41,43 @@ class SetupPaths(FromCallerMixin):
|
|
|
47
41
|
return self.path / Constants.FILENAME_VERSION
|
|
48
42
|
|
|
49
43
|
@cached_property
|
|
50
|
-
def
|
|
44
|
+
def path(self):
|
|
45
|
+
|
|
46
|
+
if self.org:
|
|
47
|
+
base = self.org
|
|
48
|
+
else:
|
|
49
|
+
base = self.repo
|
|
51
50
|
|
|
52
|
-
directories = [
|
|
53
|
-
dir for dir in self.repo.iterdir()
|
|
54
|
-
if dir.is_dir()
|
|
55
|
-
and not any(fnmatch(dir.name, pattern) for pattern in self.SKIP_DIRS)
|
|
56
|
-
]
|
|
51
|
+
directories = [base / dir for dir in self.find(base)]
|
|
57
52
|
|
|
58
53
|
if len(directories) != 1:
|
|
59
54
|
dirs_str = ', '.join([str(dir) for dir in directories])
|
|
60
55
|
raise ValueError(f'Expected exactly one directory in {self.repo}, found {dirs_str}')
|
|
61
56
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
contents = list(target.iterdir())
|
|
65
|
-
if len(contents) == 1 and (item := next(iter(contents))).is_dir():
|
|
66
|
-
return True, target.name, item.name
|
|
67
|
-
|
|
68
|
-
else:
|
|
69
|
-
return False, None, target.name
|
|
57
|
+
package = next(iter(directories))
|
|
58
|
+
return package
|
|
70
59
|
|
|
71
60
|
@property
|
|
72
|
-
def
|
|
73
|
-
|
|
74
|
-
|
|
61
|
+
def org(self):
|
|
62
|
+
if not self.org_name:
|
|
63
|
+
return False
|
|
64
|
+
org = self.repo / self.org_name
|
|
65
|
+
if not org.is_dir():
|
|
66
|
+
return False
|
|
67
|
+
return org
|
|
75
68
|
|
|
76
69
|
@property
|
|
77
|
-
def
|
|
78
|
-
|
|
79
|
-
return org
|
|
70
|
+
def is_namespace(self) -> bool:
|
|
71
|
+
return bool(self.org)
|
|
80
72
|
|
|
81
73
|
@property
|
|
82
74
|
def name(self) -> str:
|
|
83
|
-
|
|
84
|
-
|
|
75
|
+
return self.path.stem
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def find(self):
|
|
79
|
+
from fmtr.tools import setup
|
|
80
|
+
return setup.find_packages
|
|
85
81
|
|
|
86
82
|
|
|
87
83
|
class Setup(FromCallerMixin):
|
|
@@ -89,9 +85,9 @@ class Setup(FromCallerMixin):
|
|
|
89
85
|
AUTHOR_EMAIL = 'innovative.fowler@mask.pro.fmtr.dev'
|
|
90
86
|
|
|
91
87
|
REQUIREMENTS_ARG = 'requirements'
|
|
88
|
+
SKIP_DIRS = {'data', 'build', 'dist', '.*', '*egg-info*'}
|
|
92
89
|
|
|
93
|
-
|
|
94
|
-
def __init__(self, dependencies, paths=None, console_scripts=None, client=None, do_setup=True, **kwargs):
|
|
90
|
+
def __init__(self, dependencies, paths=None, org=Constants.ORG_NAME, console_scripts=None, client=None, do_setup=True, **kwargs):
|
|
95
91
|
|
|
96
92
|
self.kwargs = kwargs
|
|
97
93
|
|
|
@@ -105,8 +101,10 @@ class Setup(FromCallerMixin):
|
|
|
105
101
|
self.print_requirements()
|
|
106
102
|
return
|
|
107
103
|
|
|
104
|
+
self.org = org
|
|
105
|
+
|
|
108
106
|
if not paths:
|
|
109
|
-
paths = SetupPaths(path=self.from_caller())
|
|
107
|
+
paths = SetupPaths(path=self.from_caller(), org=self.org)
|
|
110
108
|
self.paths = paths
|
|
111
109
|
|
|
112
110
|
self.client = client
|
|
@@ -189,7 +187,7 @@ class Setup(FromCallerMixin):
|
|
|
189
187
|
@property
|
|
190
188
|
def packages(self):
|
|
191
189
|
|
|
192
|
-
excludes = list(
|
|
190
|
+
excludes = list(self.SKIP_DIRS) + [f'{name}.*' for name in self.SKIP_DIRS if '*' not in name]
|
|
193
191
|
|
|
194
192
|
packages = self.find(where=str(self.paths.repo), exclude=excludes)
|
|
195
193
|
return packages
|
fmtr/tools/version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.1.
|
|
1
|
+
1.1.24
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.24
|
|
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:
|
|
17
|
-
Requires-Dist:
|
|
18
|
-
Requires-Dist:
|
|
12
|
+
Requires-Dist: openpyxl; extra == "test"
|
|
13
|
+
Requires-Dist: Unidecode; extra == "test"
|
|
14
|
+
Requires-Dist: pyyaml; extra == "test"
|
|
15
|
+
Requires-Dist: flet-video; extra == "test"
|
|
16
|
+
Requires-Dist: dask[bag]; extra == "test"
|
|
17
|
+
Requires-Dist: appdirs; extra == "test"
|
|
18
|
+
Requires-Dist: semver; extra == "test"
|
|
19
19
|
Requires-Dist: pymupdf; extra == "test"
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
20
|
+
Requires-Dist: bokeh; extra == "test"
|
|
21
|
+
Requires-Dist: tabulate; extra == "test"
|
|
22
|
+
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
23
|
+
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
24
|
+
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
24
25
|
Requires-Dist: dnspython[doh]; extra == "test"
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist: torchvision; extra == "test"
|
|
27
|
-
Requires-Dist: httpx_retries; extra == "test"
|
|
28
|
-
Requires-Dist: flet[all]; extra == "test"
|
|
26
|
+
Requires-Dist: sentence_transformers; extra == "test"
|
|
29
27
|
Requires-Dist: pydantic-settings; extra == "test"
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist: diskcache; extra == "test"
|
|
32
|
-
Requires-Dist: torchaudio; extra == "test"
|
|
33
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
34
|
-
Requires-Dist: faker; extra == "test"
|
|
28
|
+
Requires-Dist: deepmerge; extra == "test"
|
|
35
29
|
Requires-Dist: pydantic; extra == "test"
|
|
30
|
+
Requires-Dist: httpx_retries; extra == "test"
|
|
31
|
+
Requires-Dist: logfire; extra == "test"
|
|
32
|
+
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
33
|
+
Requires-Dist: torchvision; extra == "test"
|
|
34
|
+
Requires-Dist: pymupdf4llm; extra == "test"
|
|
35
|
+
Requires-Dist: torchaudio; extra == "test"
|
|
36
|
+
Requires-Dist: contexttimer; extra == "test"
|
|
36
37
|
Requires-Dist: distributed; extra == "test"
|
|
37
|
-
Requires-Dist:
|
|
38
|
+
Requires-Dist: peft; extra == "test"
|
|
39
|
+
Requires-Dist: httpx; extra == "test"
|
|
40
|
+
Requires-Dist: regex; extra == "test"
|
|
41
|
+
Requires-Dist: yamlscript; extra == "test"
|
|
42
|
+
Requires-Dist: filetype; extra == "test"
|
|
43
|
+
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
44
|
+
Requires-Dist: huggingface_hub; extra == "test"
|
|
38
45
|
Requires-Dist: sre_yield; extra == "test"
|
|
39
|
-
Requires-Dist:
|
|
40
|
-
Requires-Dist:
|
|
46
|
+
Requires-Dist: flet-webview; extra == "test"
|
|
47
|
+
Requires-Dist: json_repair; extra == "test"
|
|
48
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
49
|
+
Requires-Dist: fastapi; extra == "test"
|
|
41
50
|
Requires-Dist: tinynetrc; extra == "test"
|
|
51
|
+
Requires-Dist: google-api-python-client; extra == "test"
|
|
52
|
+
Requires-Dist: ollama; extra == "test"
|
|
53
|
+
Requires-Dist: tokenizers; extra == "test"
|
|
54
|
+
Requires-Dist: diskcache; extra == "test"
|
|
55
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
56
|
+
Requires-Dist: html2text; extra == "test"
|
|
57
|
+
Requires-Dist: pandas; extra == "test"
|
|
42
58
|
Requires-Dist: setuptools; extra == "test"
|
|
43
|
-
Requires-Dist:
|
|
44
|
-
Requires-Dist: openpyxl; extra == "test"
|
|
45
|
-
Requires-Dist: flet-video; extra == "test"
|
|
59
|
+
Requires-Dist: faker; extra == "test"
|
|
46
60
|
Requires-Dist: openai; extra == "test"
|
|
47
|
-
Requires-Dist:
|
|
48
|
-
Requires-Dist:
|
|
49
|
-
Requires-Dist:
|
|
61
|
+
Requires-Dist: logfire[httpx]; extra == "test"
|
|
62
|
+
Requires-Dist: docker; extra == "test"
|
|
63
|
+
Requires-Dist: logfire[fastapi]; extra == "test"
|
|
64
|
+
Requires-Dist: flet[all]; extra == "test"
|
|
50
65
|
Requires-Dist: google-auth; extra == "test"
|
|
51
|
-
Requires-Dist: semver; extra == "test"
|
|
52
|
-
Requires-Dist: huggingface_hub; extra == "test"
|
|
53
|
-
Requires-Dist: tokenizers; extra == "test"
|
|
54
|
-
Requires-Dist: peft; extra == "test"
|
|
55
|
-
Requires-Dist: logfire; extra == "test"
|
|
56
|
-
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
57
|
-
Requires-Dist: filetype; extra == "test"
|
|
58
|
-
Requires-Dist: deepmerge; extra == "test"
|
|
59
|
-
Requires-Dist: google-api-python-client; extra == "test"
|
|
60
|
-
Requires-Dist: bokeh; extra == "test"
|
|
61
|
-
Requires-Dist: httpx; extra == "test"
|
|
62
|
-
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
63
|
-
Requires-Dist: appdirs; extra == "test"
|
|
64
|
-
Requires-Dist: Unidecode; extra == "test"
|
|
65
|
-
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
66
66
|
Provides-Extra: yaml
|
|
67
67
|
Requires-Dist: yamlscript; extra == "yaml"
|
|
68
68
|
Requires-Dist: pyyaml; extra == "yaml"
|
|
@@ -45,7 +45,7 @@ fmtr/tools/tabular_tools.py,sha256=tpIpZzYku1HcJrHZJL6BC39LmN3WUWVhFbK2N7nDVmE,1
|
|
|
45
45
|
fmtr/tools/tokenization_tools.py,sha256=me-IBzSLyNYejLybwjO9CNB6Mj2NYfKPaOVThXyaGNg,4268
|
|
46
46
|
fmtr/tools/tools.py,sha256=CAsApa1YwVdNE6H66Vjivs_mXYvOas3rh7fPELAnTpk,795
|
|
47
47
|
fmtr/tools/unicode_tools.py,sha256=yS_9wpu8ogNoiIL7s1G_8bETFFO_YQlo4LNPv1NLDeY,52
|
|
48
|
-
fmtr/tools/version,sha256=
|
|
48
|
+
fmtr/tools/version,sha256=fMaLB6rmZIaUWwd3AaKbbqQ2mgl-suriSc_QCo-bRSk,6
|
|
49
49
|
fmtr/tools/version_tools.py,sha256=yNs_CGqWpqE4jbK9wsPIi14peJVXYbhIcMqHAFOw3yE,1480
|
|
50
50
|
fmtr/tools/yaml_tools.py,sha256=9kuYChqJelWQIjGlSnK4iDdOWWH06P0gp9jIcRrC3UI,1903
|
|
51
51
|
fmtr/tools/ai_tools/__init__.py,sha256=JZrLuOFNV1A3wvJgonxOgz_4WS-7MfCuowGWA5uYCjs,372
|
|
@@ -56,7 +56,7 @@ fmtr/tools/path_tools/app_path_tools.py,sha256=JrJvtTDd_gkCKcZtBCDTMktsM77PZwGV_
|
|
|
56
56
|
fmtr/tools/path_tools/path_tools.py,sha256=8WBzNctpds5tVT1-FcizAORrBCGlkUbPcfOel-Js7ps,7878
|
|
57
57
|
fmtr/tools/path_tools/type_path_tools.py,sha256=Zgs-ek-GXRKDIlVDGdg3muB0PIxTg2ba0NeHw6y8FWQ,40
|
|
58
58
|
fmtr/tools/setup_tools/__init__.py,sha256=8HX-GvGxeCK3nIHH5PHkvhkH0MIt89AK8a5l6Vua2dQ,379
|
|
59
|
-
fmtr/tools/setup_tools/setup_tools.py,sha256=
|
|
59
|
+
fmtr/tools/setup_tools/setup_tools.py,sha256=bwx0fkmPqZz9j8kyqEjKM9xdr54_SoeR45OODuFXUl4,7613
|
|
60
60
|
fmtr/tools/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
61
|
fmtr/tools/tests/conftest.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
62
|
fmtr/tools/tests/helpers.py,sha256=N5sf9YoZV93a7tf_UxpLeyQ9vp6Ec0teNIimFDvc054,1091
|
|
@@ -65,9 +65,9 @@ fmtr/tools/tests/test_environment.py,sha256=iHaiMQfECYZPkPKwfuIZV9uHuWe3aE-p_dN_
|
|
|
65
65
|
fmtr/tools/tests/test_json.py,sha256=IeSP4ziPvRcmS8kq7k9tHonC9rN5YYq9GSNT2ul6Msk,287
|
|
66
66
|
fmtr/tools/tests/test_path.py,sha256=AkZQa6_8BQ-VaCyL_J-iKmdf2ZaM-xFYR37Kun3k4_g,2188
|
|
67
67
|
fmtr/tools/tests/test_yaml.py,sha256=jc0TwwKu9eC0LvFGNMERdgBue591xwLxYXFbtsRwXVM,287
|
|
68
|
-
fmtr_tools-1.1.
|
|
69
|
-
fmtr_tools-1.1.
|
|
70
|
-
fmtr_tools-1.1.
|
|
71
|
-
fmtr_tools-1.1.
|
|
72
|
-
fmtr_tools-1.1.
|
|
73
|
-
fmtr_tools-1.1.
|
|
68
|
+
fmtr_tools-1.1.24.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
|
|
69
|
+
fmtr_tools-1.1.24.dist-info/METADATA,sha256=NGiex3myYBSC4501v0wDzpfy-ueqwqf8-MZim1ZOXKM,15735
|
|
70
|
+
fmtr_tools-1.1.24.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
71
|
+
fmtr_tools-1.1.24.dist-info/entry_points.txt,sha256=e-eOW1Ml13tbxHC6Er1MnVOEDePeWw7DKwlE-l-gCY0,205
|
|
72
|
+
fmtr_tools-1.1.24.dist-info/top_level.txt,sha256=LXem9xCgNOD72tE2gRKESdiQTL902mfFkwWb6-dlwEE,5
|
|
73
|
+
fmtr_tools-1.1.24.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|