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.

Files changed (100) hide show
  1. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/PKG-INFO +50 -50
  2. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/interface_tools/controls.py +132 -6
  3. fmtr_tools-1.3.78/fmtr/tools/version +1 -0
  4. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/PKG-INFO +50 -50
  5. fmtr_tools-1.3.76/fmtr/tools/version +0 -1
  6. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/LICENSE +0 -0
  7. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/README.md +0 -0
  8. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/__init__.py +0 -0
  9. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/ai_tools/__init__.py +0 -0
  10. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  11. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  12. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/api_tools.py +0 -0
  13. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/async_tools.py +0 -0
  14. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/augmentation_tools.py +0 -0
  15. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/caching_tools.py +0 -0
  16. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/constants.py +0 -0
  17. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/context_tools.py +0 -0
  18. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/data_modelling_tools.py +0 -0
  19. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/database_tools/__init__.py +0 -0
  20. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/database_tools/document.py +0 -0
  21. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dataclass_tools.py +0 -0
  22. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/datatype_tools.py +0 -0
  23. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/datetime_tools.py +0 -0
  24. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/debugging_tools.py +0 -0
  25. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/__init__.py +0 -0
  26. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/client.py +0 -0
  27. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/dm.py +0 -0
  28. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/proxy.py +0 -0
  29. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/dns_tools/server.py +0 -0
  30. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/docker_tools/__init__.py +0 -0
  31. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/__init__.py +0 -0
  32. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  33. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/ep_test.py +0 -0
  34. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  35. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  36. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  37. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/environment_tools.py +0 -0
  38. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/function_tools.py +0 -0
  39. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/google_api_tools.py +0 -0
  40. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/hash_tools.py +0 -0
  41. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/hfh_tools.py +0 -0
  42. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/html_tools.py +0 -0
  43. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/http_tools.py +0 -0
  44. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/import_tools.py +0 -0
  45. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/inherit_tools.py +0 -0
  46. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/inspection_tools.py +0 -0
  47. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/interface_tools/__init__.py +0 -0
  48. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/interface_tools/context.py +0 -0
  49. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/interface_tools/interface_tools.py +0 -0
  50. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/iterator_tools.py +0 -0
  51. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/json_fix_tools.py +0 -0
  52. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/json_tools.py +0 -0
  53. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/logging_tools.py +0 -0
  54. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/merging_tools.py +0 -0
  55. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/metric_tools.py +0 -0
  56. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/name_tools.py +0 -0
  57. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/netrc_tools.py +0 -0
  58. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/openai_tools.py +0 -0
  59. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/packaging_tools.py +0 -0
  60. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/parallel_tools.py +0 -0
  61. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/path_tools/__init__.py +0 -0
  62. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  63. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/path_tools/path_tools.py +0 -0
  64. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  65. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/pattern_tools.py +0 -0
  66. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/pdf_tools.py +0 -0
  67. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/platform_tools.py +0 -0
  68. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/process_tools.py +0 -0
  69. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/profiling_tools.py +0 -0
  70. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/random_tools.py +0 -0
  71. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/semantic_tools.py +0 -0
  72. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/settings_tools.py +0 -0
  73. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/setup_tools/__init__.py +0 -0
  74. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  75. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/spaces_tools.py +0 -0
  76. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/string_tools.py +0 -0
  77. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tabular_tools.py +0 -0
  78. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/__init__.py +0 -0
  79. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/conftest.py +0 -0
  80. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/helpers.py +0 -0
  81. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_datatype.py +0 -0
  82. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_environment.py +0 -0
  83. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_json.py +0 -0
  84. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_path.py +0 -0
  85. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tests/test_yaml.py +0 -0
  86. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tokenization_tools.py +0 -0
  87. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/tools.py +0 -0
  88. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/unicode_tools.py +0 -0
  89. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/version_tools/__init__.py +0 -0
  90. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/version_tools/version_tools.py +0 -0
  91. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/webhook_tools.py +0 -0
  92. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr/tools/yaml_tools.py +0 -0
  93. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  94. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  95. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/entry_points.txt +0 -0
  96. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/requires.txt +49 -49
  97. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/fmtr.tools.egg-info/top_level.txt +0 -0
  98. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/pyproject.toml +0 -0
  99. {fmtr_tools-1.3.76 → fmtr_tools-1.3.78}/setup.cfg +0 -0
  100. {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.76
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: logfire; extra == "all"
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: appdirs; extra == "all"
193
- Requires-Dist: logfire[fastapi]; extra == "all"
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: httpx_retries; extra == "all"
196
- Requires-Dist: dnspython[doh]; extra == "all"
197
- Requires-Dist: pymupdf4llm; 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
+ 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: google-api-python-client; extra == "all"
200
- Requires-Dist: google-auth-httplib2; extra == "all"
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: google-auth-oauthlib; extra == "all"
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: tinynetrc; extra == "all"
208
- Requires-Dist: fastapi; extra == "all"
207
+ Requires-Dist: sentence_transformers; extra == "all"
209
208
  Requires-Dist: tokenizers; extra == "all"
210
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
211
- Requires-Dist: odfpy; extra == "all"
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: pydevd-pycharm~=251.25410.159; extra == "all"
215
- Requires-Dist: google-auth; extra == "all"
224
+ Requires-Dist: json_repair; extra == "all"
216
225
  Requires-Dist: httpx; extra == "all"
217
- Requires-Dist: semver; extra == "all"
218
- Requires-Dist: flet-video; extra == "all"
219
- Requires-Dist: flet-webview; extra == "all"
220
- Requires-Dist: yamlscript; extra == "all"
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
- cells = [self.TypeCell(series, col) for col in series.index]
131
- super().__init__(cells, color=self.row_color)
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
- rows = [self.TypeRow(row) for _, row in df.iterrows()]
199
- super().__init__(columns=columns, rows=rows)
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.76
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: logfire; extra == "all"
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: appdirs; extra == "all"
193
- Requires-Dist: logfire[fastapi]; extra == "all"
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: httpx_retries; extra == "all"
196
- Requires-Dist: dnspython[doh]; extra == "all"
197
- Requires-Dist: pymupdf4llm; 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
+ 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: google-api-python-client; extra == "all"
200
- Requires-Dist: google-auth-httplib2; extra == "all"
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: google-auth-oauthlib; extra == "all"
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: tinynetrc; extra == "all"
208
- Requires-Dist: fastapi; extra == "all"
207
+ Requires-Dist: sentence_transformers; extra == "all"
209
208
  Requires-Dist: tokenizers; extra == "all"
210
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
211
- Requires-Dist: odfpy; extra == "all"
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: pydevd-pycharm~=251.25410.159; extra == "all"
215
- Requires-Dist: google-auth; extra == "all"
224
+ Requires-Dist: json_repair; extra == "all"
216
225
  Requires-Dist: httpx; extra == "all"
217
- Requires-Dist: semver; extra == "all"
218
- Requires-Dist: flet-video; extra == "all"
219
- Requires-Dist: flet-webview; extra == "all"
220
- Requires-Dist: yamlscript; extra == "all"
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
@@ -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
- logfire
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
- appdirs
45
- logfire[fastapi]
25
+ logfire
26
+ dask[bag]
27
+ faker
28
+ diskcache
29
+ regex
30
+ peft
46
31
  openpyxl
47
- httpx_retries
48
- dnspython[doh]
49
- pymupdf4llm
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
- google-api-python-client
52
- google-auth-httplib2
53
- bokeh
54
- beanie[odm]
43
+ deepdiff
44
+ pymupdf
55
45
  flet[all]
56
- google-auth-oauthlib
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
- tinynetrc
60
- fastapi
59
+ sentence_transformers
61
60
  tokenizers
62
- pydantic-ai[logfire,openai]
63
- odfpy
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
- pydevd-pycharm~=251.25410.159
67
- google-auth
76
+ json_repair
68
77
  httpx
69
- semver
70
- flet-video
71
- flet-webview
72
- yamlscript
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