fmtr.tools 1.3.78__tar.gz → 1.3.80__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.3.78 → fmtr_tools-1.3.80}/PKG-INFO +48 -48
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/interface_tools/controls.py +41 -12
- fmtr_tools-1.3.80/fmtr/tools/version +1 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr.tools.egg-info/PKG-INFO +48 -48
- fmtr_tools-1.3.78/fmtr/tools/version +0 -1
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/LICENSE +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/README.md +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/constants.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/context_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/data_modelling_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/database_tools/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/database_tools/document.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/datetime_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/dns_tools/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/dns_tools/client.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/dns_tools/dm.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/dns_tools/proxy.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/dns_tools/server.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/docker_tools/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/entrypoints/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/entrypoints/ep_test.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/entrypoints/shell_debug.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/google_api_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/inherit_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/interface_tools/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/interface_tools/context.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/interface_tools/interface_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/settings_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/setup_tools/setup_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/version_tools/__init__.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/version_tools/version_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/webhook_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr.tools.egg-info/SOURCES.txt +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr.tools.egg-info/requires.txt +47 -47
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/pyproject.toml +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/setup.cfg +0 -0
- {fmtr_tools-1.3.78 → fmtr_tools-1.3.80}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.80
|
|
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
|
|
@@ -166,67 +166,67 @@ Provides-Extra: db
|
|
|
166
166
|
Provides-Extra: db-document
|
|
167
167
|
Requires-Dist: beanie[odm]; extra == "db-document"
|
|
168
168
|
Provides-Extra: all
|
|
169
|
-
Requires-Dist:
|
|
170
|
-
Requires-Dist:
|
|
169
|
+
Requires-Dist: tabulate; extra == "all"
|
|
170
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
171
|
+
Requires-Dist: ollama; extra == "all"
|
|
172
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
173
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
174
|
+
Requires-Dist: diskcache; extra == "all"
|
|
175
|
+
Requires-Dist: filetype; extra == "all"
|
|
176
|
+
Requires-Dist: setuptools; extra == "all"
|
|
171
177
|
Requires-Dist: torchaudio; extra == "all"
|
|
172
|
-
Requires-Dist: html2text; extra == "all"
|
|
173
|
-
Requires-Dist: logfire; extra == "all"
|
|
174
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
175
178
|
Requires-Dist: faker; extra == "all"
|
|
176
|
-
Requires-Dist:
|
|
177
|
-
Requires-Dist:
|
|
179
|
+
Requires-Dist: pydantic; extra == "all"
|
|
180
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
181
|
+
Requires-Dist: appdirs; extra == "all"
|
|
178
182
|
Requires-Dist: peft; extra == "all"
|
|
183
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
179
184
|
Requires-Dist: openpyxl; extra == "all"
|
|
180
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
181
|
-
Requires-Dist: flet-video; extra == "all"
|
|
182
|
-
Requires-Dist: yamlscript; extra == "all"
|
|
183
|
-
Requires-Dist: appdirs; extra == "all"
|
|
184
185
|
Requires-Dist: playwright; extra == "all"
|
|
185
|
-
Requires-Dist: pydantic; extra == "all"
|
|
186
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
187
|
-
Requires-Dist: openai; extra == "all"
|
|
188
|
-
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
189
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
190
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
191
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
192
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
193
186
|
Requires-Dist: flet[all]; extra == "all"
|
|
194
|
-
Requires-Dist:
|
|
195
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
196
|
-
Requires-Dist: ollama; extra == "all"
|
|
197
|
-
Requires-Dist: logfire[httpx]; extra == "all"
|
|
198
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
199
|
-
Requires-Dist: filetype; extra == "all"
|
|
200
|
-
Requires-Dist: bokeh; extra == "all"
|
|
201
|
-
Requires-Dist: flet-webview; extra == "all"
|
|
202
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
187
|
+
Requires-Dist: cachetools; extra == "all"
|
|
203
188
|
Requires-Dist: odfpy; extra == "all"
|
|
204
|
-
Requires-Dist:
|
|
189
|
+
Requires-Dist: flet-video; extra == "all"
|
|
190
|
+
Requires-Dist: pytest-cov; extra == "all"
|
|
205
191
|
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
206
|
-
Requires-Dist:
|
|
207
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
208
|
-
Requires-Dist: tokenizers; extra == "all"
|
|
192
|
+
Requires-Dist: pydantic-settings; extra == "all"
|
|
209
193
|
Requires-Dist: dnspython[doh]; extra == "all"
|
|
210
|
-
Requires-Dist:
|
|
211
|
-
Requires-Dist:
|
|
212
|
-
Requires-Dist:
|
|
213
|
-
Requires-Dist:
|
|
214
|
-
Requires-Dist:
|
|
215
|
-
Requires-Dist:
|
|
194
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
195
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
196
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
197
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
198
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
199
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
200
|
+
Requires-Dist: json_repair; extra == "all"
|
|
201
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
216
202
|
Requires-Dist: pandas; extra == "all"
|
|
217
|
-
Requires-Dist: cachetools; extra == "all"
|
|
218
|
-
Requires-Dist: pymupdf4llm; extra == "all"
|
|
219
|
-
Requires-Dist: setuptools; extra == "all"
|
|
220
|
-
Requires-Dist: pytest-cov; extra == "all"
|
|
221
203
|
Requires-Dist: pycountry; extra == "all"
|
|
222
|
-
Requires-Dist:
|
|
204
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
205
|
+
Requires-Dist: bokeh; extra == "all"
|
|
206
|
+
Requires-Dist: semver; extra == "all"
|
|
207
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
208
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
209
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
210
|
+
Requires-Dist: logfire[httpx]; extra == "all"
|
|
211
|
+
Requires-Dist: logfire; extra == "all"
|
|
212
|
+
Requires-Dist: google-auth; extra == "all"
|
|
213
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
214
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
223
215
|
Requires-Dist: python-on-whales; extra == "all"
|
|
224
|
-
Requires-Dist:
|
|
216
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
225
217
|
Requires-Dist: httpx; extra == "all"
|
|
226
|
-
Requires-Dist:
|
|
218
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
219
|
+
Requires-Dist: distributed; extra == "all"
|
|
220
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
221
|
+
Requires-Dist: html2text; extra == "all"
|
|
222
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
227
223
|
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
228
|
-
Requires-Dist:
|
|
229
|
-
Requires-Dist:
|
|
224
|
+
Requires-Dist: torchvision; extra == "all"
|
|
225
|
+
Requires-Dist: openai; extra == "all"
|
|
226
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
227
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
228
|
+
Requires-Dist: fastapi; extra == "all"
|
|
229
|
+
Requires-Dist: regex; extra == "all"
|
|
230
230
|
Dynamic: author
|
|
231
231
|
Dynamic: author-email
|
|
232
232
|
Dynamic: description
|
|
@@ -41,7 +41,7 @@ class Cell(ft.DataCell):
|
|
|
41
41
|
|
|
42
42
|
super().__init__(self.gesture_detector)
|
|
43
43
|
|
|
44
|
-
@
|
|
44
|
+
@cached_property
|
|
45
45
|
def text(self):
|
|
46
46
|
"""
|
|
47
47
|
|
|
@@ -72,8 +72,7 @@ class Cell(ft.DataCell):
|
|
|
72
72
|
"""
|
|
73
73
|
return None
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
@property
|
|
75
|
+
@cached_property
|
|
77
76
|
def gesture_detector(self):
|
|
78
77
|
"""
|
|
79
78
|
|
|
@@ -98,7 +97,7 @@ class Cell(ft.DataCell):
|
|
|
98
97
|
Default cell click behavior — override in subclass if needed
|
|
99
98
|
|
|
100
99
|
"""
|
|
101
|
-
logger.info(f"Clicked {self.column=} {self.series.
|
|
100
|
+
logger.info(f"Clicked {self.column=} {self.series.name=} {self.value=}")
|
|
102
101
|
|
|
103
102
|
async def click_double_tap(self, event: TapEvent):
|
|
104
103
|
"""
|
|
@@ -126,7 +125,7 @@ class Row(ft.DataRow):
|
|
|
126
125
|
|
|
127
126
|
"""
|
|
128
127
|
|
|
129
|
-
|
|
128
|
+
TypesCells = {None: Cell}
|
|
130
129
|
|
|
131
130
|
def __init__(self, series):
|
|
132
131
|
self.series = series
|
|
@@ -141,7 +140,9 @@ class Row(ft.DataRow):
|
|
|
141
140
|
"""
|
|
142
141
|
data = {}
|
|
143
142
|
for col in self.series.index:
|
|
144
|
-
|
|
143
|
+
default = self.TypesCells[None]
|
|
144
|
+
TypeCell = self.TypesCells.get(col, default)
|
|
145
|
+
data.setdefault(col, []).append(TypeCell(self.series, col))
|
|
145
146
|
return data
|
|
146
147
|
|
|
147
148
|
@cached_property
|
|
@@ -193,7 +194,7 @@ class Column(ft.DataColumn):
|
|
|
193
194
|
|
|
194
195
|
super().__init__(label=self.text)
|
|
195
196
|
|
|
196
|
-
@
|
|
197
|
+
@cached_property
|
|
197
198
|
def text(self):
|
|
198
199
|
"""
|
|
199
200
|
|
|
@@ -219,8 +220,8 @@ class Table(ft.DataTable):
|
|
|
219
220
|
|
|
220
221
|
"""
|
|
221
222
|
|
|
222
|
-
|
|
223
|
-
|
|
223
|
+
TypesRows = {None: Row}
|
|
224
|
+
TypesColumns = {None: Column}
|
|
224
225
|
|
|
225
226
|
def __init__(self, df): # todo move to submodule with tabular deps
|
|
226
227
|
"""
|
|
@@ -229,8 +230,34 @@ class Table(ft.DataTable):
|
|
|
229
230
|
|
|
230
231
|
"""
|
|
231
232
|
self.df = df
|
|
232
|
-
columns =
|
|
233
|
-
|
|
233
|
+
super().__init__(columns=self.columns_controls, rows=self.rows_controls)
|
|
234
|
+
|
|
235
|
+
@cached_property
|
|
236
|
+
def columns_data(self) -> dict[str, list[Column]]:
|
|
237
|
+
"""
|
|
238
|
+
|
|
239
|
+
Columns controls lookup
|
|
240
|
+
|
|
241
|
+
"""
|
|
242
|
+
data = {}
|
|
243
|
+
for col in self.df.columns:
|
|
244
|
+
default = self.TypesColumns[None]
|
|
245
|
+
TypeColumn = self.TypesColumns.get(col, default)
|
|
246
|
+
data.setdefault(col, []).append(TypeColumn(col))
|
|
247
|
+
return data
|
|
248
|
+
|
|
249
|
+
@cached_property
|
|
250
|
+
def columns_controls(self) -> list[Column]:
|
|
251
|
+
"""
|
|
252
|
+
|
|
253
|
+
Flat list of controls
|
|
254
|
+
|
|
255
|
+
"""
|
|
256
|
+
controls = []
|
|
257
|
+
for columns in self.columns_data.values():
|
|
258
|
+
for column in columns:
|
|
259
|
+
controls.append(column)
|
|
260
|
+
return controls
|
|
234
261
|
|
|
235
262
|
@cached_property
|
|
236
263
|
def rows_data(self) -> dict[str, list[Row]]:
|
|
@@ -241,7 +268,9 @@ class Table(ft.DataTable):
|
|
|
241
268
|
"""
|
|
242
269
|
data = {}
|
|
243
270
|
for index, row in self.df.iterrows():
|
|
244
|
-
|
|
271
|
+
default = self.TypesRows[None]
|
|
272
|
+
TypeRow = self.TypesRows.get(index, default)
|
|
273
|
+
data.setdefault(index, []).append(TypeRow(row))
|
|
245
274
|
return data
|
|
246
275
|
|
|
247
276
|
@cached_property
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.3.80
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.80
|
|
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
|
|
@@ -166,67 +166,67 @@ Provides-Extra: db
|
|
|
166
166
|
Provides-Extra: db-document
|
|
167
167
|
Requires-Dist: beanie[odm]; extra == "db-document"
|
|
168
168
|
Provides-Extra: all
|
|
169
|
-
Requires-Dist:
|
|
170
|
-
Requires-Dist:
|
|
169
|
+
Requires-Dist: tabulate; extra == "all"
|
|
170
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
171
|
+
Requires-Dist: ollama; extra == "all"
|
|
172
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
173
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
174
|
+
Requires-Dist: diskcache; extra == "all"
|
|
175
|
+
Requires-Dist: filetype; extra == "all"
|
|
176
|
+
Requires-Dist: setuptools; extra == "all"
|
|
171
177
|
Requires-Dist: torchaudio; extra == "all"
|
|
172
|
-
Requires-Dist: html2text; extra == "all"
|
|
173
|
-
Requires-Dist: logfire; extra == "all"
|
|
174
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
175
178
|
Requires-Dist: faker; extra == "all"
|
|
176
|
-
Requires-Dist:
|
|
177
|
-
Requires-Dist:
|
|
179
|
+
Requires-Dist: pydantic; extra == "all"
|
|
180
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
181
|
+
Requires-Dist: appdirs; extra == "all"
|
|
178
182
|
Requires-Dist: peft; extra == "all"
|
|
183
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
179
184
|
Requires-Dist: openpyxl; extra == "all"
|
|
180
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
181
|
-
Requires-Dist: flet-video; extra == "all"
|
|
182
|
-
Requires-Dist: yamlscript; extra == "all"
|
|
183
|
-
Requires-Dist: appdirs; extra == "all"
|
|
184
185
|
Requires-Dist: playwright; extra == "all"
|
|
185
|
-
Requires-Dist: pydantic; extra == "all"
|
|
186
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
187
|
-
Requires-Dist: openai; extra == "all"
|
|
188
|
-
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
189
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
190
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
191
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
192
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
193
186
|
Requires-Dist: flet[all]; extra == "all"
|
|
194
|
-
Requires-Dist:
|
|
195
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
196
|
-
Requires-Dist: ollama; extra == "all"
|
|
197
|
-
Requires-Dist: logfire[httpx]; extra == "all"
|
|
198
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
199
|
-
Requires-Dist: filetype; extra == "all"
|
|
200
|
-
Requires-Dist: bokeh; extra == "all"
|
|
201
|
-
Requires-Dist: flet-webview; extra == "all"
|
|
202
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
187
|
+
Requires-Dist: cachetools; extra == "all"
|
|
203
188
|
Requires-Dist: odfpy; extra == "all"
|
|
204
|
-
Requires-Dist:
|
|
189
|
+
Requires-Dist: flet-video; extra == "all"
|
|
190
|
+
Requires-Dist: pytest-cov; extra == "all"
|
|
205
191
|
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
206
|
-
Requires-Dist:
|
|
207
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
208
|
-
Requires-Dist: tokenizers; extra == "all"
|
|
192
|
+
Requires-Dist: pydantic-settings; extra == "all"
|
|
209
193
|
Requires-Dist: dnspython[doh]; extra == "all"
|
|
210
|
-
Requires-Dist:
|
|
211
|
-
Requires-Dist:
|
|
212
|
-
Requires-Dist:
|
|
213
|
-
Requires-Dist:
|
|
214
|
-
Requires-Dist:
|
|
215
|
-
Requires-Dist:
|
|
194
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
195
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
196
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
197
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
198
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
199
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
200
|
+
Requires-Dist: json_repair; extra == "all"
|
|
201
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
216
202
|
Requires-Dist: pandas; extra == "all"
|
|
217
|
-
Requires-Dist: cachetools; extra == "all"
|
|
218
|
-
Requires-Dist: pymupdf4llm; extra == "all"
|
|
219
|
-
Requires-Dist: setuptools; extra == "all"
|
|
220
|
-
Requires-Dist: pytest-cov; extra == "all"
|
|
221
203
|
Requires-Dist: pycountry; extra == "all"
|
|
222
|
-
Requires-Dist:
|
|
204
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
205
|
+
Requires-Dist: bokeh; extra == "all"
|
|
206
|
+
Requires-Dist: semver; extra == "all"
|
|
207
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
208
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
209
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
210
|
+
Requires-Dist: logfire[httpx]; extra == "all"
|
|
211
|
+
Requires-Dist: logfire; extra == "all"
|
|
212
|
+
Requires-Dist: google-auth; extra == "all"
|
|
213
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
214
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
223
215
|
Requires-Dist: python-on-whales; extra == "all"
|
|
224
|
-
Requires-Dist:
|
|
216
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
225
217
|
Requires-Dist: httpx; extra == "all"
|
|
226
|
-
Requires-Dist:
|
|
218
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
219
|
+
Requires-Dist: distributed; extra == "all"
|
|
220
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
221
|
+
Requires-Dist: html2text; extra == "all"
|
|
222
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
227
223
|
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
228
|
-
Requires-Dist:
|
|
229
|
-
Requires-Dist:
|
|
224
|
+
Requires-Dist: torchvision; extra == "all"
|
|
225
|
+
Requires-Dist: openai; extra == "all"
|
|
226
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
227
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
228
|
+
Requires-Dist: fastapi; extra == "all"
|
|
229
|
+
Requires-Dist: regex; extra == "all"
|
|
230
230
|
Dynamic: author
|
|
231
231
|
Dynamic: author-email
|
|
232
232
|
Dynamic: description
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.3.78
|
|
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
|
|
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
|
|
@@ -18,67 +18,67 @@ pydantic-ai[logfire,openai]
|
|
|
18
18
|
ollama
|
|
19
19
|
|
|
20
20
|
[all]
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
tabulate
|
|
22
|
+
beanie[odm]
|
|
23
|
+
ollama
|
|
24
|
+
pymupdf4llm
|
|
25
|
+
httpx_retries
|
|
26
|
+
diskcache
|
|
27
|
+
filetype
|
|
28
|
+
setuptools
|
|
23
29
|
torchaudio
|
|
24
|
-
html2text
|
|
25
|
-
logfire
|
|
26
|
-
dask[bag]
|
|
27
30
|
faker
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
pydantic
|
|
32
|
+
tinynetrc
|
|
33
|
+
appdirs
|
|
30
34
|
peft
|
|
35
|
+
pydantic-ai[logfire,openai]
|
|
31
36
|
openpyxl
|
|
32
|
-
sre_yield
|
|
33
|
-
flet-video
|
|
34
|
-
yamlscript
|
|
35
|
-
appdirs
|
|
36
37
|
playwright
|
|
37
|
-
pydantic
|
|
38
|
-
contexttimer
|
|
39
|
-
openai
|
|
40
|
-
google-auth-oauthlib
|
|
41
|
-
pydantic-ai[logfire,openai]
|
|
42
|
-
uvicorn[standard]
|
|
43
|
-
deepdiff
|
|
44
|
-
pymupdf
|
|
45
38
|
flet[all]
|
|
46
|
-
|
|
47
|
-
Unidecode
|
|
48
|
-
ollama
|
|
49
|
-
logfire[httpx]
|
|
50
|
-
pyyaml
|
|
51
|
-
filetype
|
|
52
|
-
bokeh
|
|
53
|
-
flet-webview
|
|
54
|
-
pydantic-settings
|
|
39
|
+
cachetools
|
|
55
40
|
odfpy
|
|
56
|
-
|
|
41
|
+
flet-video
|
|
42
|
+
pytest-cov
|
|
57
43
|
transformers[sentencepiece]
|
|
58
|
-
|
|
59
|
-
sentence_transformers
|
|
60
|
-
tokenizers
|
|
44
|
+
pydantic-settings
|
|
61
45
|
dnspython[doh]
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
46
|
+
uvicorn[standard]
|
|
47
|
+
contexttimer
|
|
48
|
+
deepmerge
|
|
49
|
+
Unidecode
|
|
50
|
+
yamlscript
|
|
51
|
+
pyyaml
|
|
52
|
+
json_repair
|
|
53
|
+
pydantic-extra-types
|
|
68
54
|
pandas
|
|
69
|
-
cachetools
|
|
70
|
-
pymupdf4llm
|
|
71
|
-
setuptools
|
|
72
|
-
pytest-cov
|
|
73
55
|
pycountry
|
|
74
|
-
|
|
56
|
+
google-api-python-client
|
|
57
|
+
bokeh
|
|
58
|
+
semver
|
|
59
|
+
tokenizers
|
|
60
|
+
dask[bag]
|
|
61
|
+
logfire[fastapi]
|
|
62
|
+
logfire[httpx]
|
|
63
|
+
logfire
|
|
64
|
+
google-auth
|
|
65
|
+
pymupdf
|
|
66
|
+
sre_yield
|
|
75
67
|
python-on-whales
|
|
76
|
-
|
|
68
|
+
sentence_transformers
|
|
77
69
|
httpx
|
|
78
|
-
|
|
70
|
+
deepdiff
|
|
71
|
+
distributed
|
|
72
|
+
huggingface_hub
|
|
73
|
+
html2text
|
|
74
|
+
google-auth-oauthlib
|
|
79
75
|
google-auth-httplib2
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
torchvision
|
|
77
|
+
openai
|
|
78
|
+
flet-webview
|
|
79
|
+
pydevd-pycharm~=251.25410.159
|
|
80
|
+
fastapi
|
|
81
|
+
regex
|
|
82
82
|
|
|
83
83
|
[api]
|
|
84
84
|
fastapi
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|