fmtr.tools 1.3.76__tar.gz → 1.3.78__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.76 → fmtr_tools-1.3.78}/PKG-INFO +50 -50
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/interface_tools/controls.py +132 -6
- fmtr_tools-1.3.78/fmtr/tools/version +1 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/PKG-INFO +50 -50
- fmtr_tools-1.3.76/fmtr/tools/version +0 -1
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/LICENSE +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/README.md +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/constants.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/context_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/data_modelling_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/database_tools/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/database_tools/document.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/datetime_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/client.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/dm.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/proxy.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/server.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/docker_tools/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/ep_test.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/shell_debug.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/google_api_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/inherit_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/interface_tools/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/interface_tools/context.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/interface_tools/interface_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/settings_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/setup_tools/setup_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/version_tools/__init__.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/version_tools/version_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/webhook_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/SOURCES.txt +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/requires.txt +49 -49
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/pyproject.toml +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/setup.cfg +0 -0
- {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/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.78
|
|
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: json_repair; extra == "all"
|
|
170
|
-
Requires-Dist: distributed; extra == "all"
|
|
171
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
172
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
173
|
-
Requires-Dist: ollama; extra == "all"
|
|
174
|
-
Requires-Dist: openai; extra == "all"
|
|
175
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
176
|
-
Requires-Dist: logfire[httpx]; extra == "all"
|
|
177
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
178
|
-
Requires-Dist: setuptools; extra == "all"
|
|
179
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
180
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
181
169
|
Requires-Dist: huggingface_hub; extra == "all"
|
|
182
|
-
Requires-Dist:
|
|
170
|
+
Requires-Dist: distributed; extra == "all"
|
|
183
171
|
Requires-Dist: torchaudio; extra == "all"
|
|
184
|
-
Requires-Dist: playwright; extra == "all"
|
|
185
|
-
Requires-Dist: torchvision; extra == "all"
|
|
186
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
187
|
-
Requires-Dist: tabulate; extra == "all"
|
|
188
|
-
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
189
|
-
Requires-Dist: pycountry; extra == "all"
|
|
190
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
191
172
|
Requires-Dist: html2text; extra == "all"
|
|
192
|
-
Requires-Dist:
|
|
193
|
-
Requires-Dist:
|
|
173
|
+
Requires-Dist: logfire; extra == "all"
|
|
174
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
175
|
+
Requires-Dist: faker; extra == "all"
|
|
176
|
+
Requires-Dist: diskcache; extra == "all"
|
|
177
|
+
Requires-Dist: regex; extra == "all"
|
|
178
|
+
Requires-Dist: peft; extra == "all"
|
|
194
179
|
Requires-Dist: openpyxl; extra == "all"
|
|
195
|
-
Requires-Dist:
|
|
196
|
-
Requires-Dist:
|
|
197
|
-
Requires-Dist:
|
|
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
|
+
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"
|
|
198
190
|
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
199
|
-
Requires-Dist:
|
|
200
|
-
Requires-Dist:
|
|
201
|
-
Requires-Dist: bokeh; extra == "all"
|
|
202
|
-
Requires-Dist: beanie[odm]; extra == "all"
|
|
191
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
192
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
203
193
|
Requires-Dist: flet[all]; extra == "all"
|
|
204
|
-
Requires-Dist:
|
|
194
|
+
Requires-Dist: semver; extra == "all"
|
|
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"
|
|
205
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"
|
|
203
|
+
Requires-Dist: odfpy; extra == "all"
|
|
204
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
205
|
+
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
206
206
|
Requires-Dist: deepmerge; extra == "all"
|
|
207
|
-
Requires-Dist:
|
|
208
|
-
Requires-Dist: fastapi; extra == "all"
|
|
207
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
209
208
|
Requires-Dist: tokenizers; extra == "all"
|
|
210
|
-
Requires-Dist:
|
|
211
|
-
Requires-Dist:
|
|
209
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
210
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
211
|
+
Requires-Dist: google-auth; extra == "all"
|
|
212
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
213
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
214
|
+
Requires-Dist: torchvision; extra == "all"
|
|
215
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
216
|
+
Requires-Dist: pandas; extra == "all"
|
|
217
|
+
Requires-Dist: cachetools; extra == "all"
|
|
218
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
219
|
+
Requires-Dist: setuptools; extra == "all"
|
|
212
220
|
Requires-Dist: pytest-cov; extra == "all"
|
|
221
|
+
Requires-Dist: pycountry; extra == "all"
|
|
222
|
+
Requires-Dist: fastapi; extra == "all"
|
|
213
223
|
Requires-Dist: python-on-whales; extra == "all"
|
|
214
|
-
Requires-Dist:
|
|
215
|
-
Requires-Dist: google-auth; extra == "all"
|
|
224
|
+
Requires-Dist: json_repair; extra == "all"
|
|
216
225
|
Requires-Dist: httpx; extra == "all"
|
|
217
|
-
Requires-Dist:
|
|
218
|
-
Requires-Dist:
|
|
219
|
-
Requires-Dist:
|
|
220
|
-
Requires-Dist:
|
|
221
|
-
Requires-Dist: cachetools; extra == "all"
|
|
222
|
-
Requires-Dist: diskcache; extra == "all"
|
|
223
|
-
Requires-Dist: pandas; extra == "all"
|
|
224
|
-
Requires-Dist: regex; extra == "all"
|
|
225
|
-
Requires-Dist: faker; extra == "all"
|
|
226
|
-
Requires-Dist: pydantic; extra == "all"
|
|
227
|
-
Requires-Dist: peft; extra == "all"
|
|
228
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
229
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
226
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
227
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
228
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
229
|
+
Requires-Dist: tabulate; extra == "all"
|
|
230
230
|
Dynamic: author
|
|
231
231
|
Dynamic: author-email
|
|
232
232
|
Dynamic: description
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
1
|
import flet as ft
|
|
2
|
+
from dataclasses import dataclass
|
|
4
3
|
from flet.core.gesture_detector import TapEvent
|
|
4
|
+
from flet.core.page import Page
|
|
5
|
+
from flet.core.types import ColorValue, IconValue
|
|
6
|
+
from functools import cached_property
|
|
7
|
+
from typing import Optional
|
|
5
8
|
|
|
6
9
|
from fmtr.tools.logging_tools import logger
|
|
7
10
|
|
|
@@ -127,8 +130,40 @@ class Row(ft.DataRow):
|
|
|
127
130
|
|
|
128
131
|
def __init__(self, series):
|
|
129
132
|
self.series = series
|
|
130
|
-
|
|
131
|
-
|
|
133
|
+
super().__init__(self.cells_controls, color=self.row_color)
|
|
134
|
+
|
|
135
|
+
@cached_property
|
|
136
|
+
def cells_data(self) -> dict[str, list[Cell]]:
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
Cell controls lookup
|
|
140
|
+
|
|
141
|
+
"""
|
|
142
|
+
data = {}
|
|
143
|
+
for col in self.series.index:
|
|
144
|
+
data.setdefault(col, []).append(self.TypeCell(self.series, col))
|
|
145
|
+
return data
|
|
146
|
+
|
|
147
|
+
@cached_property
|
|
148
|
+
def cells_controls(self) -> list[Cell]:
|
|
149
|
+
"""
|
|
150
|
+
|
|
151
|
+
Flat list of controls
|
|
152
|
+
|
|
153
|
+
"""
|
|
154
|
+
controls = []
|
|
155
|
+
for cells in self.cells_data.values():
|
|
156
|
+
for cell in cells:
|
|
157
|
+
controls.append(cell)
|
|
158
|
+
return controls
|
|
159
|
+
|
|
160
|
+
def __getitem__(self, item) -> list[Cell]:
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
Get cells by column name
|
|
164
|
+
|
|
165
|
+
"""
|
|
166
|
+
return self.cells_data[item]
|
|
132
167
|
|
|
133
168
|
@property
|
|
134
169
|
def row_color(self):
|
|
@@ -195,5 +230,96 @@ class Table(ft.DataTable):
|
|
|
195
230
|
"""
|
|
196
231
|
self.df = df
|
|
197
232
|
columns = [self.TypeColumn(col) for col in df.columns]
|
|
198
|
-
|
|
199
|
-
|
|
233
|
+
super().__init__(columns=columns, rows=self.rows_controls)
|
|
234
|
+
|
|
235
|
+
@cached_property
|
|
236
|
+
def rows_data(self) -> dict[str, list[Row]]:
|
|
237
|
+
"""
|
|
238
|
+
|
|
239
|
+
Row controls lookup
|
|
240
|
+
|
|
241
|
+
"""
|
|
242
|
+
data = {}
|
|
243
|
+
for index, row in self.df.iterrows():
|
|
244
|
+
data.setdefault(index, []).append(self.TypeRow(row))
|
|
245
|
+
return data
|
|
246
|
+
|
|
247
|
+
@cached_property
|
|
248
|
+
def rows_controls(self) -> list[Row]:
|
|
249
|
+
"""
|
|
250
|
+
|
|
251
|
+
Flat list of controls
|
|
252
|
+
|
|
253
|
+
"""
|
|
254
|
+
controls = []
|
|
255
|
+
for rows in self.rows_data.values():
|
|
256
|
+
for row in rows:
|
|
257
|
+
controls.append(row)
|
|
258
|
+
return controls
|
|
259
|
+
|
|
260
|
+
def __getitem__(self, item) -> list[Row]:
|
|
261
|
+
"""
|
|
262
|
+
|
|
263
|
+
Get row by index
|
|
264
|
+
|
|
265
|
+
"""
|
|
266
|
+
|
|
267
|
+
return self.rows_data[item]
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
@dataclass
|
|
271
|
+
class NotificationDatum:
|
|
272
|
+
"""
|
|
273
|
+
|
|
274
|
+
Color and icon for notification bar
|
|
275
|
+
|
|
276
|
+
"""
|
|
277
|
+
color: ColorValue
|
|
278
|
+
icon: IconValue
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
class NotificationBar(ft.SnackBar):
|
|
282
|
+
"""
|
|
283
|
+
|
|
284
|
+
Combined logging and notification bar: infers the appropriate UI representation from the log level
|
|
285
|
+
|
|
286
|
+
"""
|
|
287
|
+
DATA = {
|
|
288
|
+
logger.info: NotificationDatum(color=ft.Colors.BLUE, icon=ft.Icons.INFO),
|
|
289
|
+
logger.warning: NotificationDatum(color=ft.Colors.AMBER, icon=ft.Icons.WARNING),
|
|
290
|
+
logger.error: NotificationDatum(color=ft.Colors.RED, icon=ft.Icons.ERROR),
|
|
291
|
+
logger.debug: NotificationDatum(color=ft.Colors.GREY, icon=ft.Icons.BUG_REPORT),
|
|
292
|
+
logger.exception: NotificationDatum(color=ft.Colors.RED_ACCENT, icon=ft.Icons.REPORT),
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
def __init__(self, msg: str, method=logger.info):
|
|
296
|
+
"""
|
|
297
|
+
|
|
298
|
+
Log the message immediately, otherwise configure notification bar icon/color.
|
|
299
|
+
|
|
300
|
+
"""
|
|
301
|
+
self.msg = msg
|
|
302
|
+
self.method = method
|
|
303
|
+
self.method(msg)
|
|
304
|
+
|
|
305
|
+
icon = ft.Icon(self.data.icon, color=self.data.color)
|
|
306
|
+
text = ft.Text(self.msg)
|
|
307
|
+
content = ft.Row(controls=[icon, text])
|
|
308
|
+
super().__init__(content=content)
|
|
309
|
+
|
|
310
|
+
@cached_property
|
|
311
|
+
def data(self) -> NotificationDatum:
|
|
312
|
+
"""
|
|
313
|
+
|
|
314
|
+
Fetching data using logging method.
|
|
315
|
+
|
|
316
|
+
"""
|
|
317
|
+
return self.DATA[self.method]
|
|
318
|
+
|
|
319
|
+
def show(self, page: Page):
|
|
320
|
+
"""
|
|
321
|
+
|
|
322
|
+
Show the notification on the relevant page.
|
|
323
|
+
|
|
324
|
+
"""
|
|
325
|
+
page.open(self)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.3.78
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.78
|
|
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: json_repair; extra == "all"
|
|
170
|
-
Requires-Dist: distributed; extra == "all"
|
|
171
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
172
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
173
|
-
Requires-Dist: ollama; extra == "all"
|
|
174
|
-
Requires-Dist: openai; extra == "all"
|
|
175
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
176
|
-
Requires-Dist: logfire[httpx]; extra == "all"
|
|
177
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
178
|
-
Requires-Dist: setuptools; extra == "all"
|
|
179
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
180
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
181
169
|
Requires-Dist: huggingface_hub; extra == "all"
|
|
182
|
-
Requires-Dist:
|
|
170
|
+
Requires-Dist: distributed; extra == "all"
|
|
183
171
|
Requires-Dist: torchaudio; extra == "all"
|
|
184
|
-
Requires-Dist: playwright; extra == "all"
|
|
185
|
-
Requires-Dist: torchvision; extra == "all"
|
|
186
|
-
Requires-Dist: deepdiff; extra == "all"
|
|
187
|
-
Requires-Dist: tabulate; extra == "all"
|
|
188
|
-
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
189
|
-
Requires-Dist: pycountry; extra == "all"
|
|
190
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
191
172
|
Requires-Dist: html2text; extra == "all"
|
|
192
|
-
Requires-Dist:
|
|
193
|
-
Requires-Dist:
|
|
173
|
+
Requires-Dist: logfire; extra == "all"
|
|
174
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
175
|
+
Requires-Dist: faker; extra == "all"
|
|
176
|
+
Requires-Dist: diskcache; extra == "all"
|
|
177
|
+
Requires-Dist: regex; extra == "all"
|
|
178
|
+
Requires-Dist: peft; extra == "all"
|
|
194
179
|
Requires-Dist: openpyxl; extra == "all"
|
|
195
|
-
Requires-Dist:
|
|
196
|
-
Requires-Dist:
|
|
197
|
-
Requires-Dist:
|
|
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
|
+
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"
|
|
198
190
|
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
199
|
-
Requires-Dist:
|
|
200
|
-
Requires-Dist:
|
|
201
|
-
Requires-Dist: bokeh; extra == "all"
|
|
202
|
-
Requires-Dist: beanie[odm]; extra == "all"
|
|
191
|
+
Requires-Dist: deepdiff; extra == "all"
|
|
192
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
203
193
|
Requires-Dist: flet[all]; extra == "all"
|
|
204
|
-
Requires-Dist:
|
|
194
|
+
Requires-Dist: semver; extra == "all"
|
|
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"
|
|
205
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"
|
|
203
|
+
Requires-Dist: odfpy; extra == "all"
|
|
204
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
205
|
+
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
206
206
|
Requires-Dist: deepmerge; extra == "all"
|
|
207
|
-
Requires-Dist:
|
|
208
|
-
Requires-Dist: fastapi; extra == "all"
|
|
207
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
209
208
|
Requires-Dist: tokenizers; extra == "all"
|
|
210
|
-
Requires-Dist:
|
|
211
|
-
Requires-Dist:
|
|
209
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
210
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
211
|
+
Requires-Dist: google-auth; extra == "all"
|
|
212
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
213
|
+
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
214
|
+
Requires-Dist: torchvision; extra == "all"
|
|
215
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
216
|
+
Requires-Dist: pandas; extra == "all"
|
|
217
|
+
Requires-Dist: cachetools; extra == "all"
|
|
218
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
219
|
+
Requires-Dist: setuptools; extra == "all"
|
|
212
220
|
Requires-Dist: pytest-cov; extra == "all"
|
|
221
|
+
Requires-Dist: pycountry; extra == "all"
|
|
222
|
+
Requires-Dist: fastapi; extra == "all"
|
|
213
223
|
Requires-Dist: python-on-whales; extra == "all"
|
|
214
|
-
Requires-Dist:
|
|
215
|
-
Requires-Dist: google-auth; extra == "all"
|
|
224
|
+
Requires-Dist: json_repair; extra == "all"
|
|
216
225
|
Requires-Dist: httpx; extra == "all"
|
|
217
|
-
Requires-Dist:
|
|
218
|
-
Requires-Dist:
|
|
219
|
-
Requires-Dist:
|
|
220
|
-
Requires-Dist:
|
|
221
|
-
Requires-Dist: cachetools; extra == "all"
|
|
222
|
-
Requires-Dist: diskcache; extra == "all"
|
|
223
|
-
Requires-Dist: pandas; extra == "all"
|
|
224
|
-
Requires-Dist: regex; extra == "all"
|
|
225
|
-
Requires-Dist: faker; extra == "all"
|
|
226
|
-
Requires-Dist: pydantic; extra == "all"
|
|
227
|
-
Requires-Dist: peft; extra == "all"
|
|
228
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
229
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
226
|
+
Requires-Dist: pydantic-extra-types; extra == "all"
|
|
227
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
228
|
+
Requires-Dist: beanie[odm]; extra == "all"
|
|
229
|
+
Requires-Dist: tabulate; extra == "all"
|
|
230
230
|
Dynamic: author
|
|
231
231
|
Dynamic: author-email
|
|
232
232
|
Dynamic: description
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.3.76
|
|
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
|
-
json_repair
|
|
22
|
-
distributed
|
|
23
|
-
pyyaml
|
|
24
|
-
Unidecode
|
|
25
|
-
ollama
|
|
26
|
-
openai
|
|
27
|
-
pymupdf
|
|
28
|
-
logfire[httpx]
|
|
29
|
-
sentence_transformers
|
|
30
|
-
setuptools
|
|
31
|
-
contexttimer
|
|
32
|
-
sre_yield
|
|
33
21
|
huggingface_hub
|
|
34
|
-
|
|
22
|
+
distributed
|
|
35
23
|
torchaudio
|
|
36
|
-
playwright
|
|
37
|
-
torchvision
|
|
38
|
-
deepdiff
|
|
39
|
-
tabulate
|
|
40
|
-
pydantic-extra-types
|
|
41
|
-
pycountry
|
|
42
|
-
dask[bag]
|
|
43
24
|
html2text
|
|
44
|
-
|
|
45
|
-
|
|
25
|
+
logfire
|
|
26
|
+
dask[bag]
|
|
27
|
+
faker
|
|
28
|
+
diskcache
|
|
29
|
+
regex
|
|
30
|
+
peft
|
|
46
31
|
openpyxl
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
32
|
+
sre_yield
|
|
33
|
+
flet-video
|
|
34
|
+
yamlscript
|
|
35
|
+
appdirs
|
|
36
|
+
playwright
|
|
37
|
+
pydantic
|
|
38
|
+
contexttimer
|
|
39
|
+
openai
|
|
40
|
+
google-auth-oauthlib
|
|
41
|
+
pydantic-ai[logfire,openai]
|
|
50
42
|
uvicorn[standard]
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
bokeh
|
|
54
|
-
beanie[odm]
|
|
43
|
+
deepdiff
|
|
44
|
+
pymupdf
|
|
55
45
|
flet[all]
|
|
56
|
-
|
|
46
|
+
semver
|
|
47
|
+
Unidecode
|
|
48
|
+
ollama
|
|
49
|
+
logfire[httpx]
|
|
50
|
+
pyyaml
|
|
57
51
|
filetype
|
|
52
|
+
bokeh
|
|
53
|
+
flet-webview
|
|
54
|
+
pydantic-settings
|
|
55
|
+
odfpy
|
|
56
|
+
google-api-python-client
|
|
57
|
+
transformers[sentencepiece]
|
|
58
58
|
deepmerge
|
|
59
|
-
|
|
60
|
-
fastapi
|
|
59
|
+
sentence_transformers
|
|
61
60
|
tokenizers
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
dnspython[doh]
|
|
62
|
+
httpx_retries
|
|
63
|
+
google-auth
|
|
64
|
+
pydevd-pycharm~=251.25410.159
|
|
65
|
+
logfire[fastapi]
|
|
66
|
+
torchvision
|
|
67
|
+
tinynetrc
|
|
68
|
+
pandas
|
|
69
|
+
cachetools
|
|
70
|
+
pymupdf4llm
|
|
71
|
+
setuptools
|
|
64
72
|
pytest-cov
|
|
73
|
+
pycountry
|
|
74
|
+
fastapi
|
|
65
75
|
python-on-whales
|
|
66
|
-
|
|
67
|
-
google-auth
|
|
76
|
+
json_repair
|
|
68
77
|
httpx
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
cachetools
|
|
74
|
-
diskcache
|
|
75
|
-
pandas
|
|
76
|
-
regex
|
|
77
|
-
faker
|
|
78
|
-
pydantic
|
|
79
|
-
peft
|
|
80
|
-
pydantic-settings
|
|
81
|
-
transformers[sentencepiece]
|
|
78
|
+
pydantic-extra-types
|
|
79
|
+
google-auth-httplib2
|
|
80
|
+
beanie[odm]
|
|
81
|
+
tabulate
|
|
82
82
|
|
|
83
83
|
[api]
|
|
84
84
|
fastapi
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|