fmtr.tools 1.3.26__tar.gz → 1.3.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.

Files changed (95) hide show
  1. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/PKG-INFO +44 -44
  2. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/__init__.py +1 -0
  3. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/constants.py +2 -0
  4. fmtr_tools-1.3.28/fmtr/tools/inherit_tools.py +27 -0
  5. fmtr_tools-1.3.28/fmtr/tools/interface_tools/controls.py +137 -0
  6. fmtr_tools-1.3.28/fmtr/tools/version +1 -0
  7. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr.tools.egg-info/PKG-INFO +44 -44
  8. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr.tools.egg-info/SOURCES.txt +2 -0
  9. fmtr_tools-1.3.26/fmtr/tools/interface_tools/controls.py +0 -86
  10. fmtr_tools-1.3.26/fmtr/tools/version +0 -1
  11. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/LICENSE +0 -0
  12. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/README.md +0 -0
  13. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/ai_tools/__init__.py +0 -0
  14. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  15. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  16. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/api_tools.py +0 -0
  17. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/async_tools.py +0 -0
  18. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/augmentation_tools.py +0 -0
  19. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/caching_tools.py +0 -0
  20. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/data_modelling_tools.py +0 -0
  21. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/dataclass_tools.py +0 -0
  22. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/datatype_tools.py +0 -0
  23. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/debugging_tools.py +0 -0
  24. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/dns_tools/__init__.py +0 -0
  25. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/dns_tools/client.py +0 -0
  26. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/dns_tools/dm.py +0 -0
  27. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/dns_tools/proxy.py +0 -0
  28. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/dns_tools/server.py +0 -0
  29. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/docker_tools.py +0 -0
  30. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/entrypoints/__init__.py +0 -0
  31. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  32. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/entrypoints/ep_test.py +0 -0
  33. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  34. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  35. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  36. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/environment_tools.py +0 -0
  37. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/function_tools.py +0 -0
  38. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/google_api_tools.py +0 -0
  39. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/hash_tools.py +0 -0
  40. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/hfh_tools.py +0 -0
  41. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/html_tools.py +0 -0
  42. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/http_tools.py +0 -0
  43. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/import_tools.py +0 -0
  44. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/inspection_tools.py +0 -0
  45. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/interface_tools/__init__.py +0 -0
  46. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/interface_tools/interface_tools.py +0 -0
  47. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/iterator_tools.py +0 -0
  48. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/json_fix_tools.py +0 -0
  49. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/json_tools.py +0 -0
  50. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/logging_tools.py +0 -0
  51. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/merging_tools.py +0 -0
  52. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/metric_tools.py +0 -0
  53. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/name_tools.py +0 -0
  54. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/netrc_tools.py +0 -0
  55. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/openai_tools.py +0 -0
  56. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/packaging_tools.py +0 -0
  57. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/parallel_tools.py +0 -0
  58. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/path_tools/__init__.py +0 -0
  59. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  60. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/path_tools/path_tools.py +0 -0
  61. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  62. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/pattern_tools.py +0 -0
  63. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/pdf_tools.py +0 -0
  64. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/platform_tools.py +0 -0
  65. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/process_tools.py +0 -0
  66. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/profiling_tools.py +0 -0
  67. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/random_tools.py +0 -0
  68. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/semantic_tools.py +0 -0
  69. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/settings_tools.py +0 -0
  70. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/setup_tools/__init__.py +0 -0
  71. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  72. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/spaces_tools.py +0 -0
  73. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/string_tools.py +0 -0
  74. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tabular_tools.py +0 -0
  75. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tests/__init__.py +0 -0
  76. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tests/conftest.py +0 -0
  77. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tests/helpers.py +0 -0
  78. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tests/test_datatype.py +0 -0
  79. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tests/test_environment.py +0 -0
  80. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tests/test_json.py +0 -0
  81. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tests/test_path.py +0 -0
  82. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tests/test_yaml.py +0 -0
  83. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tokenization_tools.py +0 -0
  84. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/tools.py +0 -0
  85. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/unicode_tools.py +0 -0
  86. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/version_tools/__init__.py +0 -0
  87. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/version_tools/version_tools.py +0 -0
  88. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr/tools/yaml_tools.py +0 -0
  89. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  90. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr.tools.egg-info/entry_points.txt +0 -0
  91. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr.tools.egg-info/requires.txt +43 -43
  92. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/fmtr.tools.egg-info/top_level.txt +0 -0
  93. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/pyproject.toml +0 -0
  94. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/setup.cfg +0 -0
  95. {fmtr_tools-1.3.26 → fmtr_tools-1.3.28}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.26
3
+ Version: 1.3.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
@@ -126,61 +126,61 @@ Requires-Dist: logfire[httpx]; extra == "http"
126
126
  Provides-Extra: setup
127
127
  Requires-Dist: setuptools; extra == "setup"
128
128
  Provides-Extra: all
129
+ Requires-Dist: regex; extra == "all"
130
+ Requires-Dist: pandas; extra == "all"
131
+ Requires-Dist: httpx; extra == "all"
132
+ Requires-Dist: google-auth; extra == "all"
133
+ Requires-Dist: torchvision; extra == "all"
134
+ Requires-Dist: flet[all]; extra == "all"
135
+ Requires-Dist: openpyxl; extra == "all"
136
+ Requires-Dist: google-auth-oauthlib; extra == "all"
129
137
  Requires-Dist: cachetools; extra == "all"
130
- Requires-Dist: json_repair; extra == "all"
131
- Requires-Dist: Unidecode; extra == "all"
138
+ Requires-Dist: filetype; extra == "all"
132
139
  Requires-Dist: setuptools; extra == "all"
133
- Requires-Dist: yamlscript; extra == "all"
134
- Requires-Dist: pymupdf4llm; extra == "all"
135
- Requires-Dist: openai; extra == "all"
136
- Requires-Dist: openpyxl; extra == "all"
137
- Requires-Dist: sre_yield; extra == "all"
138
- Requires-Dist: logfire[fastapi]; extra == "all"
140
+ Requires-Dist: sentence_transformers; extra == "all"
141
+ Requires-Dist: pydantic-settings; extra == "all"
142
+ Requires-Dist: bokeh; extra == "all"
139
143
  Requires-Dist: peft; extra == "all"
140
- Requires-Dist: httpx; extra == "all"
141
- Requires-Dist: docker; extra == "all"
142
- Requires-Dist: google-auth; extra == "all"
143
- Requires-Dist: diskcache; extra == "all"
144
- Requires-Dist: faker; extra == "all"
145
- Requires-Dist: dask[bag]; extra == "all"
144
+ Requires-Dist: flet-webview; extra == "all"
145
+ Requires-Dist: openai; extra == "all"
146
+ Requires-Dist: torchaudio; extra == "all"
146
147
  Requires-Dist: google-api-python-client; extra == "all"
147
- Requires-Dist: pydantic-settings; extra == "all"
148
- Requires-Dist: semver; extra == "all"
149
- Requires-Dist: tinynetrc; extra == "all"
148
+ Requires-Dist: deepmerge; extra == "all"
149
+ Requires-Dist: diskcache; extra == "all"
150
+ Requires-Dist: huggingface_hub; extra == "all"
151
+ Requires-Dist: logfire[fastapi]; extra == "all"
152
+ Requires-Dist: google-auth-httplib2; extra == "all"
153
+ Requires-Dist: Unidecode; extra == "all"
150
154
  Requires-Dist: ollama; extra == "all"
155
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
156
+ Requires-Dist: dnspython[doh]; extra == "all"
151
157
  Requires-Dist: flet-video; extra == "all"
152
- Requires-Dist: distributed; extra == "all"
153
- Requires-Dist: pydantic; extra == "all"
154
- Requires-Dist: html2text; extra == "all"
155
- Requires-Dist: appdirs; extra == "all"
158
+ Requires-Dist: httpx_retries; extra == "all"
159
+ Requires-Dist: json_repair; extra == "all"
160
+ Requires-Dist: pymupdf4llm; extra == "all"
156
161
  Requires-Dist: pytest-cov; extra == "all"
157
- Requires-Dist: deepmerge; extra == "all"
158
- Requires-Dist: fastapi; extra == "all"
159
- Requires-Dist: flet-webview; extra == "all"
160
- Requires-Dist: tabulate; extra == "all"
161
- Requires-Dist: pyyaml; extra == "all"
162
+ Requires-Dist: sre_yield; extra == "all"
162
163
  Requires-Dist: contexttimer; extra == "all"
163
- Requires-Dist: filetype; extra == "all"
164
- Requires-Dist: logfire; extra == "all"
165
- Requires-Dist: flet[all]; extra == "all"
166
- Requires-Dist: google-auth-oauthlib; extra == "all"
167
- Requires-Dist: bokeh; extra == "all"
168
- Requires-Dist: dnspython[doh]; extra == "all"
164
+ Requires-Dist: semver; extra == "all"
165
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
166
+ Requires-Dist: fastapi; extra == "all"
167
+ Requires-Dist: tokenizers; extra == "all"
169
168
  Requires-Dist: logfire[httpx]; extra == "all"
170
- Requires-Dist: torchvision; extra == "all"
171
169
  Requires-Dist: pymupdf; extra == "all"
172
- Requires-Dist: sentence_transformers; extra == "all"
173
- Requires-Dist: torchaudio; extra == "all"
174
- Requires-Dist: google-auth-httplib2; extra == "all"
170
+ Requires-Dist: html2text; extra == "all"
171
+ Requires-Dist: pydantic; extra == "all"
172
+ Requires-Dist: yamlscript; extra == "all"
175
173
  Requires-Dist: uvicorn[standard]; extra == "all"
176
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
177
- Requires-Dist: regex; extra == "all"
178
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
179
- Requires-Dist: pandas; extra == "all"
174
+ Requires-Dist: distributed; extra == "all"
175
+ Requires-Dist: faker; extra == "all"
176
+ Requires-Dist: docker; extra == "all"
177
+ Requires-Dist: logfire; extra == "all"
178
+ Requires-Dist: appdirs; extra == "all"
179
+ Requires-Dist: pyyaml; extra == "all"
180
+ Requires-Dist: dask[bag]; extra == "all"
180
181
  Requires-Dist: transformers[sentencepiece]; extra == "all"
181
- Requires-Dist: tokenizers; extra == "all"
182
- Requires-Dist: huggingface_hub; extra == "all"
183
- Requires-Dist: httpx_retries; extra == "all"
182
+ Requires-Dist: tabulate; extra == "all"
183
+ Requires-Dist: tinynetrc; extra == "all"
184
184
  Dynamic: author
185
185
  Dynamic: author-email
186
186
  Dynamic: description
@@ -6,6 +6,7 @@ import fmtr.tools.environment_tools as environment
6
6
  import fmtr.tools.function_tools as function
7
7
  import fmtr.tools.hash_tools as hash
8
8
  import fmtr.tools.import_tools as import_
9
+ import fmtr.tools.inherit_tools as inherit
9
10
  import fmtr.tools.iterator_tools as iterator
10
11
  import fmtr.tools.json_tools as json
11
12
  import fmtr.tools.logging_tools as logging
@@ -49,3 +49,5 @@ class Constants:
49
49
  PRODUCTION = "production"
50
50
 
51
51
  INFRA = 'infra'
52
+
53
+ PROMPT_NOT_SPECIFIED = '[None Specified]'
@@ -0,0 +1,27 @@
1
+ from typing import TypeVar, Generic
2
+
3
+ T = TypeVar("T")
4
+
5
+
6
+ class Inherit(Generic[T]):
7
+ """
8
+
9
+ Runtime inheritance. Acts like a wrapper around an instantiated base class of type T, and allows overriding methods in subclasses like regular inheritance.
10
+
11
+ """
12
+
13
+ def __init__(self, parent: T):
14
+ """
15
+
16
+ Set parent
17
+
18
+ """
19
+ object.__setattr__(self, "_parent", parent)
20
+
21
+ def __getattr__(self, name):
22
+ """
23
+
24
+ Since regular attribute access checks own methods first, we don't need to do anything fancy to fall back to the parent when not implemented.
25
+
26
+ """
27
+ return getattr(self._parent, name)
@@ -0,0 +1,137 @@
1
+ import inspect
2
+
3
+ import flet as ft
4
+
5
+
6
+ class ContextBase:
7
+ """
8
+
9
+ A mixin base that can be used as both a synchronous and asynchronous context manager,
10
+ or as a decorator to wrap synchronous or asynchronous functions.
11
+ The control becomes visible when entering the context or invoking the wrapped function,
12
+ and is hidden again when exiting.
13
+
14
+ """
15
+
16
+ def start(self):
17
+ """
18
+
19
+ Show the control and update the page.
20
+ """
21
+
22
+ self.visible = True
23
+ self.page.update()
24
+
25
+ def stop(self):
26
+ """
27
+
28
+ Hide the control and update the page.
29
+
30
+ """
31
+ self.visible = False
32
+ self.page.update()
33
+
34
+ def context(self, func):
35
+ """
36
+
37
+ Decorator that wraps a synchronous or asynchronous function.
38
+ While the function runs, the control is visible.
39
+
40
+ """
41
+ if inspect.iscoroutinefunction(func):
42
+ async def async_wrapped(*args, **kwargs):
43
+ async with self:
44
+ return await func(*args, **kwargs)
45
+
46
+ return async_wrapped
47
+ else:
48
+ def sync_wrapped(*args, **kwargs):
49
+ with self:
50
+ return func(*args, **kwargs)
51
+
52
+ return sync_wrapped
53
+
54
+ def __enter__(self):
55
+ """
56
+
57
+ Enter the control context (sync).
58
+
59
+ """
60
+ self.start()
61
+ return self
62
+
63
+ def __exit__(self, exc_type, exc_val, exc_tb):
64
+ """
65
+
66
+ Exit the control context (sync).
67
+
68
+ """
69
+ self.stop()
70
+
71
+ async def __aenter__(self):
72
+ """
73
+
74
+ Enter the control context (async).
75
+ """
76
+
77
+ result = self.start()
78
+ if inspect.isawaitable(result):
79
+ await result
80
+ return self
81
+
82
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
83
+ """
84
+
85
+ Exit the control context (async).
86
+ """
87
+
88
+ result = self.stop()
89
+ if inspect.isawaitable(result):
90
+ await result
91
+
92
+
93
+ class ContextRing(ft.ProgressRing, ContextBase):
94
+ """
95
+
96
+ A progress ring as a context manager.
97
+
98
+ """
99
+
100
+ def __init__(self, *args, **kwargs):
101
+ """
102
+
103
+ Initialize the progress ring as hidden by default.
104
+
105
+ """
106
+ super().__init__(*args, **kwargs, visible=False)
107
+
108
+ class ProgressButton(ft.Button):
109
+ """
110
+
111
+ Button containing a progress ring.
112
+
113
+ """
114
+
115
+ def __init__(self, *args, on_click=None, ring: ContextRing = None, **kwargs):
116
+ """
117
+
118
+ Run on_click in run context manager
119
+
120
+ """
121
+ self.ring = ring or ContextRing()
122
+
123
+ super().__init__(*args, content=self.ring, on_click=self.ring.context(on_click), **kwargs)
124
+ self.context = self.ring.context
125
+
126
+
127
+ class SliderSteps(ft.Slider):
128
+ """
129
+
130
+ Slider control using step instead of divisions
131
+
132
+ """
133
+
134
+ def __init__(self, *args, min=10, max=100, step=10, **kwargs):
135
+ self.step = step
136
+ divisions = (max - min) // step
137
+ super().__init__(*args, min=min, max=max, divisions=divisions, **kwargs)
@@ -0,0 +1 @@
1
+ 1.3.28
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.26
3
+ Version: 1.3.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
@@ -126,61 +126,61 @@ Requires-Dist: logfire[httpx]; extra == "http"
126
126
  Provides-Extra: setup
127
127
  Requires-Dist: setuptools; extra == "setup"
128
128
  Provides-Extra: all
129
+ Requires-Dist: regex; extra == "all"
130
+ Requires-Dist: pandas; extra == "all"
131
+ Requires-Dist: httpx; extra == "all"
132
+ Requires-Dist: google-auth; extra == "all"
133
+ Requires-Dist: torchvision; extra == "all"
134
+ Requires-Dist: flet[all]; extra == "all"
135
+ Requires-Dist: openpyxl; extra == "all"
136
+ Requires-Dist: google-auth-oauthlib; extra == "all"
129
137
  Requires-Dist: cachetools; extra == "all"
130
- Requires-Dist: json_repair; extra == "all"
131
- Requires-Dist: Unidecode; extra == "all"
138
+ Requires-Dist: filetype; extra == "all"
132
139
  Requires-Dist: setuptools; extra == "all"
133
- Requires-Dist: yamlscript; extra == "all"
134
- Requires-Dist: pymupdf4llm; extra == "all"
135
- Requires-Dist: openai; extra == "all"
136
- Requires-Dist: openpyxl; extra == "all"
137
- Requires-Dist: sre_yield; extra == "all"
138
- Requires-Dist: logfire[fastapi]; extra == "all"
140
+ Requires-Dist: sentence_transformers; extra == "all"
141
+ Requires-Dist: pydantic-settings; extra == "all"
142
+ Requires-Dist: bokeh; extra == "all"
139
143
  Requires-Dist: peft; extra == "all"
140
- Requires-Dist: httpx; extra == "all"
141
- Requires-Dist: docker; extra == "all"
142
- Requires-Dist: google-auth; extra == "all"
143
- Requires-Dist: diskcache; extra == "all"
144
- Requires-Dist: faker; extra == "all"
145
- Requires-Dist: dask[bag]; extra == "all"
144
+ Requires-Dist: flet-webview; extra == "all"
145
+ Requires-Dist: openai; extra == "all"
146
+ Requires-Dist: torchaudio; extra == "all"
146
147
  Requires-Dist: google-api-python-client; extra == "all"
147
- Requires-Dist: pydantic-settings; extra == "all"
148
- Requires-Dist: semver; extra == "all"
149
- Requires-Dist: tinynetrc; extra == "all"
148
+ Requires-Dist: deepmerge; extra == "all"
149
+ Requires-Dist: diskcache; extra == "all"
150
+ Requires-Dist: huggingface_hub; extra == "all"
151
+ Requires-Dist: logfire[fastapi]; extra == "all"
152
+ Requires-Dist: google-auth-httplib2; extra == "all"
153
+ Requires-Dist: Unidecode; extra == "all"
150
154
  Requires-Dist: ollama; extra == "all"
155
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
156
+ Requires-Dist: dnspython[doh]; extra == "all"
151
157
  Requires-Dist: flet-video; extra == "all"
152
- Requires-Dist: distributed; extra == "all"
153
- Requires-Dist: pydantic; extra == "all"
154
- Requires-Dist: html2text; extra == "all"
155
- Requires-Dist: appdirs; extra == "all"
158
+ Requires-Dist: httpx_retries; extra == "all"
159
+ Requires-Dist: json_repair; extra == "all"
160
+ Requires-Dist: pymupdf4llm; extra == "all"
156
161
  Requires-Dist: pytest-cov; extra == "all"
157
- Requires-Dist: deepmerge; extra == "all"
158
- Requires-Dist: fastapi; extra == "all"
159
- Requires-Dist: flet-webview; extra == "all"
160
- Requires-Dist: tabulate; extra == "all"
161
- Requires-Dist: pyyaml; extra == "all"
162
+ Requires-Dist: sre_yield; extra == "all"
162
163
  Requires-Dist: contexttimer; extra == "all"
163
- Requires-Dist: filetype; extra == "all"
164
- Requires-Dist: logfire; extra == "all"
165
- Requires-Dist: flet[all]; extra == "all"
166
- Requires-Dist: google-auth-oauthlib; extra == "all"
167
- Requires-Dist: bokeh; extra == "all"
168
- Requires-Dist: dnspython[doh]; extra == "all"
164
+ Requires-Dist: semver; extra == "all"
165
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
166
+ Requires-Dist: fastapi; extra == "all"
167
+ Requires-Dist: tokenizers; extra == "all"
169
168
  Requires-Dist: logfire[httpx]; extra == "all"
170
- Requires-Dist: torchvision; extra == "all"
171
169
  Requires-Dist: pymupdf; extra == "all"
172
- Requires-Dist: sentence_transformers; extra == "all"
173
- Requires-Dist: torchaudio; extra == "all"
174
- Requires-Dist: google-auth-httplib2; extra == "all"
170
+ Requires-Dist: html2text; extra == "all"
171
+ Requires-Dist: pydantic; extra == "all"
172
+ Requires-Dist: yamlscript; extra == "all"
175
173
  Requires-Dist: uvicorn[standard]; extra == "all"
176
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
177
- Requires-Dist: regex; extra == "all"
178
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
179
- Requires-Dist: pandas; extra == "all"
174
+ Requires-Dist: distributed; extra == "all"
175
+ Requires-Dist: faker; extra == "all"
176
+ Requires-Dist: docker; extra == "all"
177
+ Requires-Dist: logfire; extra == "all"
178
+ Requires-Dist: appdirs; extra == "all"
179
+ Requires-Dist: pyyaml; extra == "all"
180
+ Requires-Dist: dask[bag]; extra == "all"
180
181
  Requires-Dist: transformers[sentencepiece]; extra == "all"
181
- Requires-Dist: tokenizers; extra == "all"
182
- Requires-Dist: huggingface_hub; extra == "all"
183
- Requires-Dist: httpx_retries; extra == "all"
182
+ Requires-Dist: tabulate; extra == "all"
183
+ Requires-Dist: tinynetrc; extra == "all"
184
184
  Dynamic: author
185
185
  Dynamic: author-email
186
186
  Dynamic: description
@@ -21,6 +21,7 @@ setup.py
21
21
  ./fmtr/tools/html_tools.py
22
22
  ./fmtr/tools/http_tools.py
23
23
  ./fmtr/tools/import_tools.py
24
+ ./fmtr/tools/inherit_tools.py
24
25
  ./fmtr/tools/inspection_tools.py
25
26
  ./fmtr/tools/iterator_tools.py
26
27
  ./fmtr/tools/json_fix_tools.py
@@ -107,6 +108,7 @@ fmtr/tools/hfh_tools.py
107
108
  fmtr/tools/html_tools.py
108
109
  fmtr/tools/http_tools.py
109
110
  fmtr/tools/import_tools.py
111
+ fmtr/tools/inherit_tools.py
110
112
  fmtr/tools/inspection_tools.py
111
113
  fmtr/tools/iterator_tools.py
112
114
  fmtr/tools/json_fix_tools.py
@@ -1,86 +0,0 @@
1
- import flet as ft
2
-
3
-
4
- class ContextRing(ft.ProgressRing):
5
- """
6
-
7
- Context manager progress ring.
8
-
9
- """
10
-
11
- def __init__(self, *args, **kwargs):
12
- """
13
-
14
- Start out not visible.
15
-
16
- """
17
- super().__init__(*args, **kwargs, visible=False)
18
-
19
- def start(self):
20
- """
21
-
22
- Update to visible when in context.
23
-
24
- """
25
- self.visible = True
26
- self.page.update()
27
-
28
- def stop(self):
29
- """
30
-
31
- Update to not visible when exiting context.
32
-
33
- """
34
- self.visible = False
35
- self.page.update()
36
-
37
- def context(self, func):
38
- """
39
-
40
- Context manager decorator.
41
-
42
- """
43
-
44
- def wrapped(*args, **kwargs):
45
- with self:
46
- func(*args, **kwargs)
47
-
48
- return wrapped
49
-
50
- def __enter__(self):
51
- self.start()
52
- return self
53
-
54
- def __exit__(self, exc_type, exc_val, exc_tb):
55
- self.stop()
56
-
57
-
58
- class ProgressButton(ft.Button):
59
- """
60
-
61
- Button with progress ring.
62
-
63
- """
64
-
65
- def __init__(self, *args, on_click=None, **kwargs):
66
- """
67
-
68
- Run on_click in run context manager
69
-
70
- """
71
- self.ring = ContextRing()
72
- super().__init__(*args, content=self.ring, on_click=self.ring.context(on_click), **kwargs)
73
- self.context = self.ring.context
74
-
75
-
76
- class SliderSteps(ft.Slider):
77
- """
78
-
79
- Slider control using step instead of divisions
80
-
81
- """
82
-
83
- def __init__(self, *args, min=10, max=100, step=10, **kwargs):
84
- self.step = step
85
- divisions = (max - min) // step
86
- super().__init__(*args, min=min, max=max, divisions=divisions, **kwargs)
@@ -1 +0,0 @@
1
- 1.3.26
File without changes
File without changes
@@ -14,61 +14,61 @@ pydantic-ai[logfire,openai]
14
14
  ollama
15
15
 
16
16
  [all]
17
+ regex
18
+ pandas
19
+ httpx
20
+ google-auth
21
+ torchvision
22
+ flet[all]
23
+ openpyxl
24
+ google-auth-oauthlib
17
25
  cachetools
18
- json_repair
19
- Unidecode
26
+ filetype
20
27
  setuptools
21
- yamlscript
22
- pymupdf4llm
23
- openai
24
- openpyxl
25
- sre_yield
26
- logfire[fastapi]
28
+ sentence_transformers
29
+ pydantic-settings
30
+ bokeh
27
31
  peft
28
- httpx
29
- docker
30
- google-auth
31
- diskcache
32
- faker
33
- dask[bag]
32
+ flet-webview
33
+ openai
34
+ torchaudio
34
35
  google-api-python-client
35
- pydantic-settings
36
- semver
37
- tinynetrc
36
+ deepmerge
37
+ diskcache
38
+ huggingface_hub
39
+ logfire[fastapi]
40
+ google-auth-httplib2
41
+ Unidecode
38
42
  ollama
43
+ pydevd-pycharm~=251.25410.159
44
+ dnspython[doh]
39
45
  flet-video
40
- distributed
41
- pydantic
42
- html2text
43
- appdirs
46
+ httpx_retries
47
+ json_repair
48
+ pymupdf4llm
44
49
  pytest-cov
45
- deepmerge
46
- fastapi
47
- flet-webview
48
- tabulate
49
- pyyaml
50
+ sre_yield
50
51
  contexttimer
51
- filetype
52
- logfire
53
- flet[all]
54
- google-auth-oauthlib
55
- bokeh
56
- dnspython[doh]
52
+ semver
53
+ pydantic-ai[logfire,openai]
54
+ fastapi
55
+ tokenizers
57
56
  logfire[httpx]
58
- torchvision
59
57
  pymupdf
60
- sentence_transformers
61
- torchaudio
62
- google-auth-httplib2
58
+ html2text
59
+ pydantic
60
+ yamlscript
63
61
  uvicorn[standard]
64
- pydantic-ai[logfire,openai]
65
- regex
66
- pydevd-pycharm~=251.25410.159
67
- pandas
62
+ distributed
63
+ faker
64
+ docker
65
+ logfire
66
+ appdirs
67
+ pyyaml
68
+ dask[bag]
68
69
  transformers[sentencepiece]
69
- tokenizers
70
- huggingface_hub
71
- httpx_retries
70
+ tabulate
71
+ tinynetrc
72
72
 
73
73
  [api]
74
74
  fastapi
File without changes
File without changes
File without changes