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.

Files changed (80) hide show
  1. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/PKG-INFO +42 -42
  2. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/constants.py +4 -0
  3. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/setup_tools/setup_tools.py +52 -30
  4. fmtr_tools-1.1.29/fmtr/tools/version +1 -0
  5. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/PKG-INFO +42 -42
  6. fmtr_tools-1.1.27/fmtr/tools/version +0 -1
  7. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/LICENSE +0 -0
  8. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/README.md +0 -0
  9. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/__init__.py +0 -0
  10. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/ai_tools/__init__.py +0 -0
  11. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  12. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  13. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/api_tools.py +0 -0
  14. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/async_tools.py +0 -0
  15. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/augmentation_tools.py +0 -0
  16. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/caching_tools.py +0 -0
  17. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/console_script_tools.py +0 -0
  18. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/data_modelling_tools.py +0 -0
  19. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/dataclass_tools.py +0 -0
  20. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/datatype_tools.py +0 -0
  21. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/debugging_tools.py +0 -0
  22. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/dns_tools.py +0 -0
  23. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/docker_tools.py +0 -0
  24. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/environment_tools.py +0 -0
  25. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/function_tools.py +0 -0
  26. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/google_api_tools.py +0 -0
  27. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/hash_tools.py +0 -0
  28. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/hfh_tools.py +0 -0
  29. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/html_tools.py +0 -0
  30. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/http_tools.py +0 -0
  31. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/import_tools.py +0 -0
  32. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/inspection_tools.py +0 -0
  33. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/interface_tools.py +0 -0
  34. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/iterator_tools.py +0 -0
  35. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/json_fix_tools.py +0 -0
  36. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/json_tools.py +0 -0
  37. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/logging_tools.py +0 -0
  38. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/merging_tools.py +0 -0
  39. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/metric_tools.py +0 -0
  40. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/name_tools.py +0 -0
  41. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/netrc_tools.py +0 -0
  42. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/openai_tools.py +0 -0
  43. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/packaging_tools.py +0 -0
  44. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/parallel_tools.py +0 -0
  45. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/path_tools/__init__.py +0 -0
  46. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  47. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/path_tools/path_tools.py +0 -0
  48. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  49. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/pattern_tools.py +0 -0
  50. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/pdf_tools.py +0 -0
  51. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/platform_tools.py +0 -0
  52. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/process_tools.py +0 -0
  53. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/profiling_tools.py +0 -0
  54. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/random_tools.py +0 -0
  55. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/semantic_tools.py +0 -0
  56. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/settings_tools.py +0 -0
  57. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/setup_tools/__init__.py +0 -0
  58. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/spaces_tools.py +0 -0
  59. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/string_tools.py +0 -0
  60. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tabular_tools.py +0 -0
  61. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/__init__.py +0 -0
  62. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/conftest.py +0 -0
  63. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/helpers.py +0 -0
  64. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_datatype.py +0 -0
  65. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_environment.py +0 -0
  66. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_json.py +0 -0
  67. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_path.py +0 -0
  68. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tests/test_yaml.py +0 -0
  69. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tokenization_tools.py +0 -0
  70. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/tools.py +0 -0
  71. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/unicode_tools.py +0 -0
  72. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/version_tools.py +0 -0
  73. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr/tools/yaml_tools.py +0 -0
  74. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  75. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  76. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/entry_points.txt +0 -0
  77. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/requires.txt +41 -41
  78. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/fmtr.tools.egg-info/top_level.txt +0 -0
  79. {fmtr_tools-1.1.27 → fmtr_tools-1.1.29}/setup.cfg +0 -0
  80. {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.27
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: flet[all]; extra == "test"
13
- Requires-Dist: distributed; extra == "test"
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: pydantic-ai[logfire,openai]; extra == "test"
16
- Requires-Dist: docker; extra == "test"
19
+ Requires-Dist: torchaudio; extra == "test"
20
+ Requires-Dist: Unidecode; extra == "test"
17
21
  Requires-Dist: bokeh; extra == "test"
18
- Requires-Dist: openpyxl; extra == "test"
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: pandas; extra == "test"
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: diskcache; extra == "test"
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: dask[bag]; extra == "test"
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: Unidecode; extra == "test"
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: faker; extra == "test"
60
+ Requires-Dist: pymupdf4llm; extra == "test"
61
+ Requires-Dist: pydevd-pycharm; extra == "test"
46
62
  Requires-Dist: setuptools; extra == "test"
47
- Requires-Dist: tokenizers; extra == "test"
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: torchaudio; extra == "test"
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"
@@ -35,3 +35,7 @@ class Constants:
35
35
  DIR_NAME_SOURCE = 'source'
36
36
  FILENAME_VERSION = 'version'
37
37
  DIR_NAME_HF = 'hf'
38
+
39
+ ENTRYPOINTS_DIR = 'entrypoints'
40
+ PACKAGE_EXCLUDE_DIRS = {'data', 'build', 'dist', '.*', '*egg-info*'}
41
+ INIT_FILENAME = '__init__.py'
@@ -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
- from fmtr.tools import setup
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
- directories = [base / dir for dir in setup.find_packages(base)]
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
- if len(directories) != 1:
53
- dirs_str = ', '.join([str(dir) for dir in directories])
54
- raise ValueError(f'Expected exactly one directory in {self.repo}, found {dirs_str}')
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
- package = next(iter(directories))
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
- def __init__(self, dependencies, paths=None, org=Constants.ORG_NAME, console_scripts=None, client=None, do_setup=True, **kwargs):
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
- self.console_scripts = console_scripts
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
- def get_entrypoint_path(self, key, value):
130
- if value:
131
- return f'{self.name}.{value}:{key}'
132
- else:
133
- return f'{self.name}:{key}'
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
- @property
136
- def entrypoints(self):
137
- if self.console_scripts:
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 {'': str(self.paths.repo)}
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=self.entrypoints,
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
- return self.resolve_values(self.INSTALL)
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.27
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: flet[all]; extra == "test"
13
- Requires-Dist: distributed; extra == "test"
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: pydantic-ai[logfire,openai]; extra == "test"
16
- Requires-Dist: docker; extra == "test"
19
+ Requires-Dist: torchaudio; extra == "test"
20
+ Requires-Dist: Unidecode; extra == "test"
17
21
  Requires-Dist: bokeh; extra == "test"
18
- Requires-Dist: openpyxl; extra == "test"
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: pandas; extra == "test"
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: diskcache; extra == "test"
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: dask[bag]; extra == "test"
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: Unidecode; extra == "test"
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: faker; extra == "test"
60
+ Requires-Dist: pymupdf4llm; extra == "test"
61
+ Requires-Dist: pydevd-pycharm; extra == "test"
46
62
  Requires-Dist: setuptools; extra == "test"
47
- Requires-Dist: tokenizers; extra == "test"
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: torchaudio; extra == "test"
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
@@ -135,60 +135,60 @@ tabulate
135
135
  openpyxl
136
136
 
137
137
  [test]
138
- flet[all]
139
- distributed
138
+ contexttimer
139
+ huggingface_hub
140
+ sentence_transformers
141
+ logfire[fastapi]
142
+ dask[bag]
143
+ ollama
140
144
  appdirs
141
- pydantic-ai[logfire,openai]
142
- docker
145
+ torchaudio
146
+ Unidecode
143
147
  bokeh
144
- openpyxl
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
- pandas
159
+ distributed
160
+ deepmerge
161
+ json_repair
163
162
  dnspython[doh]
164
- diskcache
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
- dask[bag]
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
- Unidecode
182
+ pymupdf
183
+ flet-video
184
+ yamlscript
170
185
  pydantic
171
- faker
186
+ pymupdf4llm
187
+ pydevd-pycharm
172
188
  setuptools
173
- tokenizers
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
- torchaudio
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