fmtr.tools 1.3.72__tar.gz → 1.3.73__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.72 → fmtr_tools-1.3.73}/PKG-INFO +51 -51
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/data_modelling_tools.py +12 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/interface_tools/controls.py +40 -3
- fmtr_tools-1.3.73/fmtr/tools/version +1 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr.tools.egg-info/PKG-INFO +51 -51
- fmtr_tools-1.3.72/fmtr/tools/version +0 -1
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/LICENSE +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/README.md +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/constants.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/context_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/database_tools/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/database_tools/document.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/datetime_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/dns_tools/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/dns_tools/client.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/dns_tools/dm.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/dns_tools/proxy.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/dns_tools/server.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/docker_tools/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/entrypoints/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/entrypoints/ep_test.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/entrypoints/shell_debug.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/google_api_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/inherit_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/interface_tools/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/interface_tools/context.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/interface_tools/interface_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/settings_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/setup_tools/setup_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/version_tools/__init__.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/version_tools/version_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/webhook_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr.tools.egg-info/SOURCES.txt +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr.tools.egg-info/requires.txt +50 -50
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/pyproject.toml +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/setup.cfg +0 -0
- {fmtr_tools-1.3.72 → fmtr_tools-1.3.73}/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.73
|
|
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
|
|
@@ -168,68 +168,68 @@ Provides-Extra: db-document
|
|
|
168
168
|
Requires-Dist: beanie[odm]; extra == "db-document"
|
|
169
169
|
Requires-Dist: motor; extra == "db-document"
|
|
170
170
|
Provides-Extra: all
|
|
171
|
-
Requires-Dist:
|
|
172
|
-
Requires-Dist:
|
|
173
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
174
|
-
Requires-Dist: tabulate; extra == "all"
|
|
171
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
172
|
+
Requires-Dist: html2text; extra == "all"
|
|
175
173
|
Requires-Dist: httpx; extra == "all"
|
|
176
|
-
Requires-Dist:
|
|
177
|
-
Requires-Dist: pydantic; extra == "all"
|
|
178
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
179
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
174
|
+
Requires-Dist: flet[all]; extra == "all"
|
|
180
175
|
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
181
|
-
Requires-Dist:
|
|
182
|
-
Requires-Dist:
|
|
183
|
-
Requires-Dist:
|
|
176
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
177
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
178
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
184
179
|
Requires-Dist: torchaudio; extra == "all"
|
|
180
|
+
Requires-Dist: openpyxl; extra == "all"
|
|
181
|
+
Requires-Dist: setuptools; extra == "all"
|
|
182
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
183
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
184
|
+
Requires-Dist: tabulate; extra == "all"
|
|
185
|
+
Requires-Dist: odfpy; extra == "all"
|
|
186
|
+
Requires-Dist: pytest-cov; extra == "all"
|
|
187
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
188
|
+
Requires-Dist: distributed; extra == "all"
|
|
189
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
190
|
+
Requires-Dist: filetype; extra == "all"
|
|
191
|
+
Requires-Dist: pycountry; extra == "all"
|
|
192
|
+
Requires-Dist: cachetools; extra == "all"
|
|
185
193
|
Requires-Dist: flet-video; extra == "all"
|
|
186
|
-
Requires-Dist:
|
|
187
|
-
Requires-Dist:
|
|
188
|
-
Requires-Dist:
|
|
189
|
-
Requires-Dist:
|
|
190
|
-
Requires-Dist: appdirs; extra == "all"
|
|
191
|
-
Requires-Dist: logfire[httpx]; extra == "all"
|
|
192
|
-
Requires-Dist: bokeh; extra == "all"
|
|
193
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
194
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
195
|
+
Requires-Dist: faker; extra == "all"
|
|
196
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
197
|
+
Requires-Dist: torchvision; extra == "all"
|
|
194
198
|
Requires-Dist: pydantic-settings; extra == "all"
|
|
195
|
-
Requires-Dist:
|
|
196
|
-
Requires-Dist: regex; extra == "all"
|
|
199
|
+
Requires-Dist: bokeh; extra == "all"
|
|
197
200
|
Requires-Dist: pandas; extra == "all"
|
|
198
|
-
Requires-Dist: google-auth
|
|
199
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
200
|
-
Requires-Dist: semver; extra == "all"
|
|
201
|
-
Requires-Dist: pycountry; extra == "all"
|
|
202
|
-
Requires-Dist: peft; extra == "all"
|
|
203
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
204
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
205
|
-
Requires-Dist: faker; extra == "all"
|
|
206
|
-
Requires-Dist: setuptools; extra == "all"
|
|
207
|
-
Requires-Dist: motor; extra == "all"
|
|
208
|
-
Requires-Dist: tokenizers; extra == "all"
|
|
201
|
+
Requires-Dist: google-auth; extra == "all"
|
|
209
202
|
Requires-Dist: diskcache; extra == "all"
|
|
210
|
-
Requires-Dist:
|
|
211
|
-
Requires-Dist:
|
|
212
|
-
Requires-Dist:
|
|
213
|
-
Requires-Dist: flet[all]; extra == "all"
|
|
203
|
+
Requires-Dist: appdirs; extra == "all"
|
|
204
|
+
Requires-Dist: ollama; extra == "all"
|
|
205
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
214
206
|
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
215
|
-
Requires-Dist:
|
|
216
|
-
Requires-Dist: fastapi; extra == "all"
|
|
217
|
-
Requires-Dist: cachetools; extra == "all"
|
|
218
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
219
|
-
Requires-Dist: httpx_retries; extra == "all"
|
|
220
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
221
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
207
|
+
Requires-Dist: json_repair; extra == "all"
|
|
222
208
|
Requires-Dist: Unidecode; extra == "all"
|
|
223
|
-
Requires-Dist: torchvision; extra == "all"
|
|
224
|
-
Requires-Dist: html2text; extra == "all"
|
|
225
|
-
Requires-Dist: pymupdf4llm; extra == "all"
|
|
226
209
|
Requires-Dist: google-api-python-client; extra == "all"
|
|
210
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
227
211
|
Requires-Dist: yamlscript; extra == "all"
|
|
228
|
-
Requires-Dist:
|
|
229
|
-
Requires-Dist:
|
|
230
|
-
Requires-Dist:
|
|
231
|
-
Requires-Dist: beanie[odm]; extra == "all"
|
|
212
|
+
Requires-Dist: pydantic; extra == "all"
|
|
213
|
+
Requires-Dist: fastapi; extra == "all"
|
|
214
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
232
215
|
Requires-Dist: tinynetrc; extra == "all"
|
|
216
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
217
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
218
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
219
|
+
Requires-Dist: logfire; extra == "all"
|
|
220
|
+
Requires-Dist: motor; extra == "all"
|
|
221
|
+
Requires-Dist: playwright; extra == "all"
|
|
222
|
+
Requires-Dist: peft; extra == "all"
|
|
223
|
+
Requires-Dist: openai; extra == "all"
|
|
224
|
+
Requires-Dist: semver; extra == "all"
|
|
225
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
226
|
+
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
227
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
228
|
+
Requires-Dist: logfire[httpx]; extra == "all"
|
|
229
|
+
Requires-Dist: regex; extra == "all"
|
|
230
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
231
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
232
|
+
Requires-Dist: python-on-whales; extra == "all"
|
|
233
233
|
Dynamic: author
|
|
234
234
|
Dynamic: author-email
|
|
235
235
|
Dynamic: description
|
|
@@ -236,6 +236,18 @@ class Base(BaseModel, MixinFromJson):
|
|
|
236
236
|
df = tabular.pd.json_normalize(data, sep='_')
|
|
237
237
|
return df
|
|
238
238
|
|
|
239
|
+
@classmethod
|
|
240
|
+
def to_df_empty(cls):
|
|
241
|
+
"""
|
|
242
|
+
|
|
243
|
+
Empty DataFrame
|
|
244
|
+
|
|
245
|
+
"""
|
|
246
|
+
from fmtr.tools import tabular
|
|
247
|
+
|
|
248
|
+
row = {name: None for name in cls.model_fields.keys()}
|
|
249
|
+
df = tabular.pd.DataFrame([row])
|
|
250
|
+
return df
|
|
239
251
|
|
|
240
252
|
class Root(RootModel, MixinFromJson):
|
|
241
253
|
"""
|
|
@@ -46,7 +46,7 @@ class Cell(ft.DataCell):
|
|
|
46
46
|
|
|
47
47
|
"""
|
|
48
48
|
|
|
49
|
-
return ft.Text(str(self.value), color=self.color)
|
|
49
|
+
return ft.Text(str(self.value), color=self.color, bgcolor=self.bgcolor)
|
|
50
50
|
|
|
51
51
|
@property
|
|
52
52
|
def color(self):
|
|
@@ -60,6 +60,16 @@ class Cell(ft.DataCell):
|
|
|
60
60
|
else:
|
|
61
61
|
return None
|
|
62
62
|
|
|
63
|
+
@property
|
|
64
|
+
def bgcolor(self):
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
Basic conditional formatting
|
|
68
|
+
|
|
69
|
+
"""
|
|
70
|
+
return None
|
|
71
|
+
|
|
72
|
+
|
|
63
73
|
@property
|
|
64
74
|
def gesture_detector(self):
|
|
65
75
|
"""
|
|
@@ -67,7 +77,7 @@ class Cell(ft.DataCell):
|
|
|
67
77
|
Make arbitrary content clickable
|
|
68
78
|
|
|
69
79
|
"""
|
|
70
|
-
return ft.GestureDetector(content=self.text, on_tap=self.click_tap)
|
|
80
|
+
return ft.GestureDetector(content=self.text, on_tap=self.click_tap, on_double_tap=self.click_double_tap)
|
|
71
81
|
|
|
72
82
|
async def click_tap(self, event: TapEvent):
|
|
73
83
|
"""
|
|
@@ -87,6 +97,24 @@ class Cell(ft.DataCell):
|
|
|
87
97
|
"""
|
|
88
98
|
logger.info(f"Clicked {self.column=} {self.series.id=} {self.value=}")
|
|
89
99
|
|
|
100
|
+
async def click_double_tap(self, event: TapEvent):
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
Default cell click behavior — override in subclass if needed
|
|
104
|
+
|
|
105
|
+
"""
|
|
106
|
+
value = await self.double_click(event=event)
|
|
107
|
+
event.page.update()
|
|
108
|
+
return value
|
|
109
|
+
|
|
110
|
+
async def double_click(self, event: Optional[TapEvent] = None):
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
Default cell double click behavior — override in subclass if needed
|
|
114
|
+
|
|
115
|
+
"""
|
|
116
|
+
logger.info(f"Double-clicked {self.column=} {self.series.id=} {self.value=}")
|
|
117
|
+
|
|
90
118
|
|
|
91
119
|
class Row(ft.DataRow):
|
|
92
120
|
"""
|
|
@@ -100,7 +128,16 @@ class Row(ft.DataRow):
|
|
|
100
128
|
def __init__(self, series):
|
|
101
129
|
self.series = series
|
|
102
130
|
cells = [self.TypeCell(series, col) for col in series.index]
|
|
103
|
-
super().__init__(cells)
|
|
131
|
+
super().__init__(cells, color=self.row_color)
|
|
132
|
+
|
|
133
|
+
@property
|
|
134
|
+
def row_color(self):
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
Basic conditional formatting
|
|
138
|
+
|
|
139
|
+
"""
|
|
140
|
+
return None
|
|
104
141
|
|
|
105
142
|
|
|
106
143
|
class Column(ft.DataColumn):
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.3.73
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.73
|
|
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
|
|
@@ -168,68 +168,68 @@ Provides-Extra: db-document
|
|
|
168
168
|
Requires-Dist: beanie[odm]; extra == "db-document"
|
|
169
169
|
Requires-Dist: motor; extra == "db-document"
|
|
170
170
|
Provides-Extra: all
|
|
171
|
-
Requires-Dist:
|
|
172
|
-
Requires-Dist:
|
|
173
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
174
|
-
Requires-Dist: tabulate; extra == "all"
|
|
171
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
172
|
+
Requires-Dist: html2text; extra == "all"
|
|
175
173
|
Requires-Dist: httpx; extra == "all"
|
|
176
|
-
Requires-Dist:
|
|
177
|
-
Requires-Dist: pydantic; extra == "all"
|
|
178
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
179
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
174
|
+
Requires-Dist: flet[all]; extra == "all"
|
|
180
175
|
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
181
|
-
Requires-Dist:
|
|
182
|
-
Requires-Dist:
|
|
183
|
-
Requires-Dist:
|
|
176
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
177
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
178
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
184
179
|
Requires-Dist: torchaudio; extra == "all"
|
|
180
|
+
Requires-Dist: openpyxl; extra == "all"
|
|
181
|
+
Requires-Dist: setuptools; extra == "all"
|
|
182
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
183
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
184
|
+
Requires-Dist: tabulate; extra == "all"
|
|
185
|
+
Requires-Dist: odfpy; extra == "all"
|
|
186
|
+
Requires-Dist: pytest-cov; extra == "all"
|
|
187
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
188
|
+
Requires-Dist: distributed; extra == "all"
|
|
189
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
190
|
+
Requires-Dist: filetype; extra == "all"
|
|
191
|
+
Requires-Dist: pycountry; extra == "all"
|
|
192
|
+
Requires-Dist: cachetools; extra == "all"
|
|
185
193
|
Requires-Dist: flet-video; extra == "all"
|
|
186
|
-
Requires-Dist:
|
|
187
|
-
Requires-Dist:
|
|
188
|
-
Requires-Dist:
|
|
189
|
-
Requires-Dist:
|
|
190
|
-
Requires-Dist: appdirs; extra == "all"
|
|
191
|
-
Requires-Dist: logfire[httpx]; extra == "all"
|
|
192
|
-
Requires-Dist: bokeh; extra == "all"
|
|
193
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
194
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
195
|
+
Requires-Dist: faker; extra == "all"
|
|
196
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
197
|
+
Requires-Dist: torchvision; extra == "all"
|
|
194
198
|
Requires-Dist: pydantic-settings; extra == "all"
|
|
195
|
-
Requires-Dist:
|
|
196
|
-
Requires-Dist: regex; extra == "all"
|
|
199
|
+
Requires-Dist: bokeh; extra == "all"
|
|
197
200
|
Requires-Dist: pandas; extra == "all"
|
|
198
|
-
Requires-Dist: google-auth
|
|
199
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
200
|
-
Requires-Dist: semver; extra == "all"
|
|
201
|
-
Requires-Dist: pycountry; extra == "all"
|
|
202
|
-
Requires-Dist: peft; extra == "all"
|
|
203
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
204
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
205
|
-
Requires-Dist: faker; extra == "all"
|
|
206
|
-
Requires-Dist: setuptools; extra == "all"
|
|
207
|
-
Requires-Dist: motor; extra == "all"
|
|
208
|
-
Requires-Dist: tokenizers; extra == "all"
|
|
201
|
+
Requires-Dist: google-auth; extra == "all"
|
|
209
202
|
Requires-Dist: diskcache; extra == "all"
|
|
210
|
-
Requires-Dist:
|
|
211
|
-
Requires-Dist:
|
|
212
|
-
Requires-Dist:
|
|
213
|
-
Requires-Dist: flet[all]; extra == "all"
|
|
203
|
+
Requires-Dist: appdirs; extra == "all"
|
|
204
|
+
Requires-Dist: ollama; extra == "all"
|
|
205
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
214
206
|
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
215
|
-
Requires-Dist:
|
|
216
|
-
Requires-Dist: fastapi; extra == "all"
|
|
217
|
-
Requires-Dist: cachetools; extra == "all"
|
|
218
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
219
|
-
Requires-Dist: httpx_retries; extra == "all"
|
|
220
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
221
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
207
|
+
Requires-Dist: json_repair; extra == "all"
|
|
222
208
|
Requires-Dist: Unidecode; extra == "all"
|
|
223
|
-
Requires-Dist: torchvision; extra == "all"
|
|
224
|
-
Requires-Dist: html2text; extra == "all"
|
|
225
|
-
Requires-Dist: pymupdf4llm; extra == "all"
|
|
226
209
|
Requires-Dist: google-api-python-client; extra == "all"
|
|
210
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
227
211
|
Requires-Dist: yamlscript; extra == "all"
|
|
228
|
-
Requires-Dist:
|
|
229
|
-
Requires-Dist:
|
|
230
|
-
Requires-Dist:
|
|
231
|
-
Requires-Dist: beanie[odm]; extra == "all"
|
|
212
|
+
Requires-Dist: pydantic; extra == "all"
|
|
213
|
+
Requires-Dist: fastapi; extra == "all"
|
|
214
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
232
215
|
Requires-Dist: tinynetrc; extra == "all"
|
|
216
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
217
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
218
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
219
|
+
Requires-Dist: logfire; extra == "all"
|
|
220
|
+
Requires-Dist: motor; extra == "all"
|
|
221
|
+
Requires-Dist: playwright; extra == "all"
|
|
222
|
+
Requires-Dist: peft; extra == "all"
|
|
223
|
+
Requires-Dist: openai; extra == "all"
|
|
224
|
+
Requires-Dist: semver; extra == "all"
|
|
225
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
226
|
+
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
227
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
228
|
+
Requires-Dist: logfire[httpx]; extra == "all"
|
|
229
|
+
Requires-Dist: regex; extra == "all"
|
|
230
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
231
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
232
|
+
Requires-Dist: python-on-whales; extra == "all"
|
|
233
233
|
Dynamic: author
|
|
234
234
|
Dynamic: author-email
|
|
235
235
|
Dynamic: description
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.3.72
|
|
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,68 +18,68 @@ pydantic-ai[logfire,openai]
|
|
|
18
18
|
ollama
|
|
19
19
|
|
|
20
20
|
[all]
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
pydantic-ai[logfire,openai]
|
|
24
|
-
tabulate
|
|
21
|
+
contexttimer
|
|
22
|
+
html2text
|
|
25
23
|
httpx
|
|
26
|
-
|
|
27
|
-
pydantic
|
|
28
|
-
pyyaml
|
|
29
|
-
deepdiff
|
|
24
|
+
flet[all]
|
|
30
25
|
pydevd-pycharm~=251.25410.159
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
dask[bag]
|
|
27
|
+
deepdiff
|
|
28
|
+
huggingface_hub
|
|
34
29
|
torchaudio
|
|
30
|
+
openpyxl
|
|
31
|
+
setuptools
|
|
32
|
+
httpx_retries
|
|
33
|
+
beanie[odm]
|
|
34
|
+
tabulate
|
|
35
|
+
odfpy
|
|
36
|
+
pytest-cov
|
|
37
|
+
uvicorn[standard]
|
|
38
|
+
distributed
|
|
39
|
+
pyyaml
|
|
40
|
+
filetype
|
|
41
|
+
pycountry
|
|
42
|
+
cachetools
|
|
35
43
|
flet-video
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
appdirs
|
|
41
|
-
logfire[httpx]
|
|
42
|
-
bokeh
|
|
43
|
-
transformers[sentencepiece]
|
|
44
|
+
dnspython[doh]
|
|
45
|
+
faker
|
|
46
|
+
sentence_transformers
|
|
47
|
+
torchvision
|
|
44
48
|
pydantic-settings
|
|
45
|
-
|
|
46
|
-
regex
|
|
49
|
+
bokeh
|
|
47
50
|
pandas
|
|
48
|
-
google-auth
|
|
49
|
-
contexttimer
|
|
50
|
-
semver
|
|
51
|
-
pycountry
|
|
52
|
-
peft
|
|
53
|
-
uvicorn[standard]
|
|
54
|
-
pymupdf
|
|
55
|
-
faker
|
|
56
|
-
setuptools
|
|
57
|
-
motor
|
|
58
|
-
tokenizers
|
|
51
|
+
google-auth
|
|
59
52
|
diskcache
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
flet[all]
|
|
53
|
+
appdirs
|
|
54
|
+
ollama
|
|
55
|
+
pymupdf
|
|
64
56
|
pydantic-extra-types
|
|
65
|
-
|
|
66
|
-
fastapi
|
|
67
|
-
cachetools
|
|
68
|
-
dnspython[doh]
|
|
69
|
-
httpx_retries
|
|
70
|
-
dask[bag]
|
|
71
|
-
sre_yield
|
|
57
|
+
json_repair
|
|
72
58
|
Unidecode
|
|
73
|
-
torchvision
|
|
74
|
-
html2text
|
|
75
|
-
pymupdf4llm
|
|
76
59
|
google-api-python-client
|
|
60
|
+
google-auth-httplib2
|
|
77
61
|
yamlscript
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
beanie[odm]
|
|
62
|
+
pydantic
|
|
63
|
+
fastapi
|
|
64
|
+
sre_yield
|
|
82
65
|
tinynetrc
|
|
66
|
+
logfire[fastapi]
|
|
67
|
+
flet-webview
|
|
68
|
+
google-auth-oauthlib
|
|
69
|
+
logfire
|
|
70
|
+
motor
|
|
71
|
+
playwright
|
|
72
|
+
peft
|
|
73
|
+
openai
|
|
74
|
+
semver
|
|
75
|
+
deepmerge
|
|
76
|
+
transformers[sentencepiece]
|
|
77
|
+
pydantic-ai[logfire,openai]
|
|
78
|
+
logfire[httpx]
|
|
79
|
+
regex
|
|
80
|
+
pymupdf4llm
|
|
81
|
+
tokenizers
|
|
82
|
+
python-on-whales
|
|
83
83
|
|
|
84
84
|
[api]
|
|
85
85
|
fastapi
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|