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.

@@ -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
- SKIP_DIRS = {'data', 'build', 'dist', '.*', '*egg-info*'}
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
- @property
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 layout(self):
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
- target = next(iter(directories))
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 is_namespace(self) -> str:
73
- is_namespace, org, name = self.layout
74
- return is_namespace
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 org(self) -> str:
78
- is_namespace, org, name = self.layout
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
- is_namespace, org, name = self.layout
84
- return name
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(SetupPaths.SKIP_DIRS) + [f'{name}.*' for name in SetupPaths.SKIP_DIRS]
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.23
1
+ 1.1.24
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.1.23
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: pytest-cov; extra == "test"
13
- Requires-Dist: yamlscript; extra == "test"
14
- Requires-Dist: pandas; extra == "test"
15
- Requires-Dist: regex; extra == "test"
16
- Requires-Dist: docker; extra == "test"
17
- Requires-Dist: json_repair; extra == "test"
18
- Requires-Dist: uvicorn[standard]; extra == "test"
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: logfire[fastapi]; extra == "test"
21
- Requires-Dist: logfire[httpx]; extra == "test"
22
- Requires-Dist: pymupdf4llm; extra == "test"
23
- Requires-Dist: sentence_transformers; extra == "test"
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: fastapi; extra == "test"
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: ollama; extra == "test"
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: dask[bag]; extra == "test"
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: tabulate; extra == "test"
40
- Requires-Dist: html2text; extra == "test"
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: pyyaml; extra == "test"
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: flet-webview; extra == "test"
48
- Requires-Dist: pydevd-pycharm; extra == "test"
49
- Requires-Dist: contexttimer; extra == "test"
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=3LplPseqc2k-fqP6873j8m5kUAOUMVJ7Cpo-3h23Q3s,6
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=1pbpQ70PeGfgkWpKQx1rQ8GoIYCArzw22uyuCT93Qas,7790
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.23.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
69
- fmtr_tools-1.1.23.dist-info/METADATA,sha256=ywC-2AZET6ohT0uWvxuHEAZ9IgcEiNjkUB7DDKHiCL4,15735
70
- fmtr_tools-1.1.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
71
- fmtr_tools-1.1.23.dist-info/entry_points.txt,sha256=e-eOW1Ml13tbxHC6Er1MnVOEDePeWw7DKwlE-l-gCY0,205
72
- fmtr_tools-1.1.23.dist-info/top_level.txt,sha256=LXem9xCgNOD72tE2gRKESdiQTL902mfFkwWb6-dlwEE,5
73
- fmtr_tools-1.1.23.dist-info/RECORD,,
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,,