fmtr.tools 1.3.77__tar.gz → 1.3.79__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.77 → fmtr_tools-1.3.79}/PKG-INFO +52 -52
  2. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/interface_tools/controls.py +100 -10
  3. fmtr_tools-1.3.79/fmtr/tools/version +1 -0
  4. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr.tools.egg-info/PKG-INFO +52 -52
  5. fmtr_tools-1.3.77/fmtr/tools/version +0 -1
  6. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/LICENSE +0 -0
  7. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/README.md +0 -0
  8. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/__init__.py +0 -0
  9. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/ai_tools/__init__.py +0 -0
  10. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  11. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  12. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/api_tools.py +0 -0
  13. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/async_tools.py +0 -0
  14. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/augmentation_tools.py +0 -0
  15. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/caching_tools.py +0 -0
  16. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/constants.py +0 -0
  17. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/context_tools.py +0 -0
  18. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/data_modelling_tools.py +0 -0
  19. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/database_tools/__init__.py +0 -0
  20. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/database_tools/document.py +0 -0
  21. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/dataclass_tools.py +0 -0
  22. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/datatype_tools.py +0 -0
  23. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/datetime_tools.py +0 -0
  24. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/debugging_tools.py +0 -0
  25. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/dns_tools/__init__.py +0 -0
  26. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/dns_tools/client.py +0 -0
  27. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/dns_tools/dm.py +0 -0
  28. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/dns_tools/proxy.py +0 -0
  29. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/dns_tools/server.py +0 -0
  30. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/docker_tools/__init__.py +0 -0
  31. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/entrypoints/__init__.py +0 -0
  32. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  33. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/entrypoints/ep_test.py +0 -0
  34. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  35. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  36. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  37. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/environment_tools.py +0 -0
  38. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/function_tools.py +0 -0
  39. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/google_api_tools.py +0 -0
  40. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/hash_tools.py +0 -0
  41. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/hfh_tools.py +0 -0
  42. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/html_tools.py +0 -0
  43. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/http_tools.py +0 -0
  44. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/import_tools.py +0 -0
  45. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/inherit_tools.py +0 -0
  46. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/inspection_tools.py +0 -0
  47. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/interface_tools/__init__.py +0 -0
  48. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/interface_tools/context.py +0 -0
  49. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/interface_tools/interface_tools.py +0 -0
  50. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/iterator_tools.py +0 -0
  51. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/json_fix_tools.py +0 -0
  52. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/json_tools.py +0 -0
  53. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/logging_tools.py +0 -0
  54. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/merging_tools.py +0 -0
  55. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/metric_tools.py +0 -0
  56. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/name_tools.py +0 -0
  57. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/netrc_tools.py +0 -0
  58. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/openai_tools.py +0 -0
  59. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/packaging_tools.py +0 -0
  60. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/parallel_tools.py +0 -0
  61. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/path_tools/__init__.py +0 -0
  62. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  63. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/path_tools/path_tools.py +0 -0
  64. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  65. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/pattern_tools.py +0 -0
  66. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/pdf_tools.py +0 -0
  67. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/platform_tools.py +0 -0
  68. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/process_tools.py +0 -0
  69. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/profiling_tools.py +0 -0
  70. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/random_tools.py +0 -0
  71. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/semantic_tools.py +0 -0
  72. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/settings_tools.py +0 -0
  73. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/setup_tools/__init__.py +0 -0
  74. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  75. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/spaces_tools.py +0 -0
  76. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/string_tools.py +0 -0
  77. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tabular_tools.py +0 -0
  78. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tests/__init__.py +0 -0
  79. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tests/conftest.py +0 -0
  80. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tests/helpers.py +0 -0
  81. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tests/test_datatype.py +0 -0
  82. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tests/test_environment.py +0 -0
  83. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tests/test_json.py +0 -0
  84. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tests/test_path.py +0 -0
  85. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tests/test_yaml.py +0 -0
  86. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tokenization_tools.py +0 -0
  87. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/tools.py +0 -0
  88. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/unicode_tools.py +0 -0
  89. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/version_tools/__init__.py +0 -0
  90. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/version_tools/version_tools.py +0 -0
  91. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/webhook_tools.py +0 -0
  92. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr/tools/yaml_tools.py +0 -0
  93. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  94. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  95. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr.tools.egg-info/entry_points.txt +0 -0
  96. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr.tools.egg-info/requires.txt +51 -51
  97. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/fmtr.tools.egg-info/top_level.txt +0 -0
  98. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/pyproject.toml +0 -0
  99. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/setup.cfg +0 -0
  100. {fmtr_tools-1.3.77 → fmtr_tools-1.3.79}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.77
3
+ Version: 1.3.79
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: pyyaml; extra == "all"
170
- Requires-Dist: Unidecode; extra == "all"
171
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
172
- Requires-Dist: openai; extra == "all"
173
- Requires-Dist: json_repair; extra == "all"
174
- Requires-Dist: faker; extra == "all"
175
- Requires-Dist: semver; extra == "all"
176
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
177
- Requires-Dist: tabulate; extra == "all"
169
+ Requires-Dist: tinynetrc; extra == "all"
178
170
  Requires-Dist: huggingface_hub; extra == "all"
171
+ Requires-Dist: openpyxl; extra == "all"
172
+ Requires-Dist: torchvision; extra == "all"
173
+ Requires-Dist: logfire[httpx]; extra == "all"
174
+ Requires-Dist: pytest-cov; extra == "all"
175
+ Requires-Dist: httpx_retries; extra == "all"
176
+ Requires-Dist: flet-video; extra == "all"
177
+ Requires-Dist: google-auth-httplib2; extra == "all"
178
+ Requires-Dist: tokenizers; extra == "all"
179
+ Requires-Dist: yamlscript; extra == "all"
180
+ Requires-Dist: pymupdf4llm; extra == "all"
181
+ Requires-Dist: regex; extra == "all"
179
182
  Requires-Dist: dnspython[doh]; extra == "all"
180
- Requires-Dist: setuptools; extra == "all"
181
- Requires-Dist: filetype; extra == "all"
182
- Requires-Dist: distributed; extra == "all"
183
+ Requires-Dist: pycountry; extra == "all"
184
+ Requires-Dist: deepdiff; extra == "all"
185
+ Requires-Dist: google-auth-oauthlib; extra == "all"
186
+ Requires-Dist: openai; extra == "all"
187
+ Requires-Dist: sentence_transformers; extra == "all"
188
+ Requires-Dist: python-on-whales; extra == "all"
183
189
  Requires-Dist: bokeh; extra == "all"
184
- Requires-Dist: cachetools; extra == "all"
185
- Requires-Dist: httpx_retries; extra == "all"
186
- Requires-Dist: beanie[odm]; extra == "all"
190
+ Requires-Dist: flet[all]; extra == "all"
187
191
  Requires-Dist: transformers[sentencepiece]; extra == "all"
188
- Requires-Dist: playwright; extra == "all"
189
- Requires-Dist: odfpy; extra == "all"
190
- Requires-Dist: python-on-whales; extra == "all"
192
+ Requires-Dist: html2text; extra == "all"
191
193
  Requires-Dist: pymupdf; extra == "all"
192
- Requires-Dist: peft; extra == "all"
193
- Requires-Dist: regex; extra == "all"
194
- Requires-Dist: logfire; extra == "all"
195
- Requires-Dist: deepdiff; extra == "all"
196
- Requires-Dist: flet-webview; extra == "all"
194
+ Requires-Dist: filetype; extra == "all"
195
+ Requires-Dist: pydantic; extra == "all"
196
+ Requires-Dist: semver; extra == "all"
197
+ Requires-Dist: playwright; extra == "all"
198
+ Requires-Dist: sre_yield; extra == "all"
197
199
  Requires-Dist: uvicorn[standard]; extra == "all"
198
- Requires-Dist: deepmerge; extra == "all"
199
- Requires-Dist: pandas; extra == "all"
200
- Requires-Dist: google-api-python-client; extra == "all"
201
- Requires-Dist: pymupdf4llm; extra == "all"
202
- Requires-Dist: pycountry; extra == "all"
200
+ Requires-Dist: logfire; extra == "all"
201
+ Requires-Dist: distributed; extra == "all"
202
+ Requires-Dist: pyyaml; extra == "all"
203
+ Requires-Dist: diskcache; extra == "all"
204
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
205
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
206
+ Requires-Dist: tabulate; extra == "all"
207
+ Requires-Dist: cachetools; extra == "all"
208
+ Requires-Dist: Unidecode; extra == "all"
203
209
  Requires-Dist: ollama; extra == "all"
204
- Requires-Dist: tinynetrc; extra == "all"
205
- Requires-Dist: sre_yield; extra == "all"
206
- Requires-Dist: sentence_transformers; extra == "all"
207
- Requires-Dist: pydantic; extra == "all"
208
- Requires-Dist: html2text; extra == "all"
209
- Requires-Dist: flet[all]; extra == "all"
210
- Requires-Dist: google-auth; extra == "all"
211
- Requires-Dist: yamlscript; extra == "all"
212
- Requires-Dist: torchvision; extra == "all"
213
- Requires-Dist: pytest-cov; extra == "all"
214
- Requires-Dist: dask[bag]; extra == "all"
215
- Requires-Dist: flet-video; extra == "all"
210
+ Requires-Dist: pydantic-extra-types; extra == "all"
211
+ Requires-Dist: torchaudio; extra == "all"
216
212
  Requires-Dist: logfire[fastapi]; extra == "all"
217
- Requires-Dist: diskcache; extra == "all"
213
+ Requires-Dist: peft; extra == "all"
214
+ Requires-Dist: appdirs; extra == "all"
215
+ Requires-Dist: fastapi; extra == "all"
218
216
  Requires-Dist: contexttimer; extra == "all"
219
- Requires-Dist: httpx; extra == "all"
220
217
  Requires-Dist: pydantic-settings; extra == "all"
221
- Requires-Dist: tokenizers; extra == "all"
222
- Requires-Dist: torchaudio; extra == "all"
223
- Requires-Dist: openpyxl; extra == "all"
224
- Requires-Dist: fastapi; extra == "all"
225
- Requires-Dist: appdirs; extra == "all"
226
- Requires-Dist: pydantic-extra-types; extra == "all"
227
- Requires-Dist: google-auth-oauthlib; extra == "all"
228
- Requires-Dist: google-auth-httplib2; extra == "all"
229
- Requires-Dist: logfire[httpx]; extra == "all"
218
+ Requires-Dist: google-auth; extra == "all"
219
+ Requires-Dist: faker; extra == "all"
220
+ Requires-Dist: beanie[odm]; extra == "all"
221
+ Requires-Dist: deepmerge; extra == "all"
222
+ Requires-Dist: odfpy; extra == "all"
223
+ Requires-Dist: flet-webview; extra == "all"
224
+ Requires-Dist: setuptools; extra == "all"
225
+ Requires-Dist: google-api-python-client; extra == "all"
226
+ Requires-Dist: httpx; extra == "all"
227
+ Requires-Dist: dask[bag]; extra == "all"
228
+ Requires-Dist: json_repair; extra == "all"
229
+ Requires-Dist: pandas; extra == "all"
230
230
  Dynamic: author
231
231
  Dynamic: author-email
232
232
  Dynamic: description
@@ -1,8 +1,10 @@
1
- from functools import cached_property
2
- from typing import Optional
3
-
4
1
  import flet as ft
2
+ from dataclasses import dataclass
5
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
6
8
 
7
9
  from fmtr.tools.logging_tools import logger
8
10
 
@@ -124,7 +126,7 @@ class Row(ft.DataRow):
124
126
 
125
127
  """
126
128
 
127
- TypeCell = Cell
129
+ TypesCells = {None: Cell}
128
130
 
129
131
  def __init__(self, series):
130
132
  self.series = series
@@ -139,7 +141,9 @@ class Row(ft.DataRow):
139
141
  """
140
142
  data = {}
141
143
  for col in self.series.index:
142
- data.setdefault(col, []).append(self.TypeCell(self.series, col))
144
+ default = self.TypesCells[None]
145
+ TypeCell = self.TypesCells.get(col, default)
146
+ data.setdefault(col, []).append(TypeCell(self.series, col))
143
147
  return data
144
148
 
145
149
  @cached_property
@@ -217,8 +221,8 @@ class Table(ft.DataTable):
217
221
 
218
222
  """
219
223
 
220
- TypeRow = Row
221
- TypeColumn = Column
224
+ TypesRows = {None: Row}
225
+ TypesColumns = {None: Column}
222
226
 
223
227
  def __init__(self, df): # todo move to submodule with tabular deps
224
228
  """
@@ -227,8 +231,34 @@ class Table(ft.DataTable):
227
231
 
228
232
  """
229
233
  self.df = df
230
- columns = [self.TypeColumn(col) for col in df.columns]
231
- super().__init__(columns=columns, rows=self.rows_controls)
234
+ super().__init__(columns=self.columns_controls, rows=self.rows_controls)
235
+
236
+ @cached_property
237
+ def columns_data(self) -> dict[str, list[Column]]:
238
+ """
239
+
240
+ Columns controls lookup
241
+
242
+ """
243
+ data = {}
244
+ for col in self.df.columns:
245
+ default = self.TypesColumns[None]
246
+ TypeColumn = self.TypesColumns.get(col, default)
247
+ data.setdefault(col, []).append(TypeColumn(col))
248
+ return data
249
+
250
+ @cached_property
251
+ def columns_controls(self) -> list[Column]:
252
+ """
253
+
254
+ Flat list of controls
255
+
256
+ """
257
+ controls = []
258
+ for columns in self.columns_data.values():
259
+ for column in columns:
260
+ controls.append(column)
261
+ return controls
232
262
 
233
263
  @cached_property
234
264
  def rows_data(self) -> dict[str, list[Row]]:
@@ -239,7 +269,9 @@ class Table(ft.DataTable):
239
269
  """
240
270
  data = {}
241
271
  for index, row in self.df.iterrows():
242
- data.setdefault(index, []).append(self.TypeRow(row))
272
+ default = self.TypesRows[None]
273
+ TypeRow = self.TypesRows.get(index, default)
274
+ data.setdefault(index, []).append(TypeRow(row))
243
275
  return data
244
276
 
245
277
  @cached_property
@@ -263,3 +295,61 @@ class Table(ft.DataTable):
263
295
  """
264
296
 
265
297
  return self.rows_data[item]
298
+
299
+
300
+ @dataclass
301
+ class NotificationDatum:
302
+ """
303
+
304
+ Color and icon for notification bar
305
+
306
+ """
307
+ color: ColorValue
308
+ icon: IconValue
309
+
310
+
311
+ class NotificationBar(ft.SnackBar):
312
+ """
313
+
314
+ Combined logging and notification bar: infers the appropriate UI representation from the log level
315
+
316
+ """
317
+ DATA = {
318
+ logger.info: NotificationDatum(color=ft.Colors.BLUE, icon=ft.Icons.INFO),
319
+ logger.warning: NotificationDatum(color=ft.Colors.AMBER, icon=ft.Icons.WARNING),
320
+ logger.error: NotificationDatum(color=ft.Colors.RED, icon=ft.Icons.ERROR),
321
+ logger.debug: NotificationDatum(color=ft.Colors.GREY, icon=ft.Icons.BUG_REPORT),
322
+ logger.exception: NotificationDatum(color=ft.Colors.RED_ACCENT, icon=ft.Icons.REPORT),
323
+ }
324
+
325
+ def __init__(self, msg: str, method=logger.info):
326
+ """
327
+
328
+ Log the message immediately, otherwise configure notification bar icon/color.
329
+
330
+ """
331
+ self.msg = msg
332
+ self.method = method
333
+ self.method(msg)
334
+
335
+ icon = ft.Icon(self.data.icon, color=self.data.color)
336
+ text = ft.Text(self.msg)
337
+ content = ft.Row(controls=[icon, text])
338
+ super().__init__(content=content)
339
+
340
+ @cached_property
341
+ def data(self) -> NotificationDatum:
342
+ """
343
+
344
+ Fetching data using logging method.
345
+
346
+ """
347
+ return self.DATA[self.method]
348
+
349
+ def show(self, page: Page):
350
+ """
351
+
352
+ Show the notification on the relevant page.
353
+
354
+ """
355
+ page.open(self)
@@ -0,0 +1 @@
1
+ 1.3.79
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.77
3
+ Version: 1.3.79
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: pyyaml; extra == "all"
170
- Requires-Dist: Unidecode; extra == "all"
171
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
172
- Requires-Dist: openai; extra == "all"
173
- Requires-Dist: json_repair; extra == "all"
174
- Requires-Dist: faker; extra == "all"
175
- Requires-Dist: semver; extra == "all"
176
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
177
- Requires-Dist: tabulate; extra == "all"
169
+ Requires-Dist: tinynetrc; extra == "all"
178
170
  Requires-Dist: huggingface_hub; extra == "all"
171
+ Requires-Dist: openpyxl; extra == "all"
172
+ Requires-Dist: torchvision; extra == "all"
173
+ Requires-Dist: logfire[httpx]; extra == "all"
174
+ Requires-Dist: pytest-cov; extra == "all"
175
+ Requires-Dist: httpx_retries; extra == "all"
176
+ Requires-Dist: flet-video; extra == "all"
177
+ Requires-Dist: google-auth-httplib2; extra == "all"
178
+ Requires-Dist: tokenizers; extra == "all"
179
+ Requires-Dist: yamlscript; extra == "all"
180
+ Requires-Dist: pymupdf4llm; extra == "all"
181
+ Requires-Dist: regex; extra == "all"
179
182
  Requires-Dist: dnspython[doh]; extra == "all"
180
- Requires-Dist: setuptools; extra == "all"
181
- Requires-Dist: filetype; extra == "all"
182
- Requires-Dist: distributed; extra == "all"
183
+ Requires-Dist: pycountry; extra == "all"
184
+ Requires-Dist: deepdiff; extra == "all"
185
+ Requires-Dist: google-auth-oauthlib; extra == "all"
186
+ Requires-Dist: openai; extra == "all"
187
+ Requires-Dist: sentence_transformers; extra == "all"
188
+ Requires-Dist: python-on-whales; extra == "all"
183
189
  Requires-Dist: bokeh; extra == "all"
184
- Requires-Dist: cachetools; extra == "all"
185
- Requires-Dist: httpx_retries; extra == "all"
186
- Requires-Dist: beanie[odm]; extra == "all"
190
+ Requires-Dist: flet[all]; extra == "all"
187
191
  Requires-Dist: transformers[sentencepiece]; extra == "all"
188
- Requires-Dist: playwright; extra == "all"
189
- Requires-Dist: odfpy; extra == "all"
190
- Requires-Dist: python-on-whales; extra == "all"
192
+ Requires-Dist: html2text; extra == "all"
191
193
  Requires-Dist: pymupdf; extra == "all"
192
- Requires-Dist: peft; extra == "all"
193
- Requires-Dist: regex; extra == "all"
194
- Requires-Dist: logfire; extra == "all"
195
- Requires-Dist: deepdiff; extra == "all"
196
- Requires-Dist: flet-webview; extra == "all"
194
+ Requires-Dist: filetype; extra == "all"
195
+ Requires-Dist: pydantic; extra == "all"
196
+ Requires-Dist: semver; extra == "all"
197
+ Requires-Dist: playwright; extra == "all"
198
+ Requires-Dist: sre_yield; extra == "all"
197
199
  Requires-Dist: uvicorn[standard]; extra == "all"
198
- Requires-Dist: deepmerge; extra == "all"
199
- Requires-Dist: pandas; extra == "all"
200
- Requires-Dist: google-api-python-client; extra == "all"
201
- Requires-Dist: pymupdf4llm; extra == "all"
202
- Requires-Dist: pycountry; extra == "all"
200
+ Requires-Dist: logfire; extra == "all"
201
+ Requires-Dist: distributed; extra == "all"
202
+ Requires-Dist: pyyaml; extra == "all"
203
+ Requires-Dist: diskcache; extra == "all"
204
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
205
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
206
+ Requires-Dist: tabulate; extra == "all"
207
+ Requires-Dist: cachetools; extra == "all"
208
+ Requires-Dist: Unidecode; extra == "all"
203
209
  Requires-Dist: ollama; extra == "all"
204
- Requires-Dist: tinynetrc; extra == "all"
205
- Requires-Dist: sre_yield; extra == "all"
206
- Requires-Dist: sentence_transformers; extra == "all"
207
- Requires-Dist: pydantic; extra == "all"
208
- Requires-Dist: html2text; extra == "all"
209
- Requires-Dist: flet[all]; extra == "all"
210
- Requires-Dist: google-auth; extra == "all"
211
- Requires-Dist: yamlscript; extra == "all"
212
- Requires-Dist: torchvision; extra == "all"
213
- Requires-Dist: pytest-cov; extra == "all"
214
- Requires-Dist: dask[bag]; extra == "all"
215
- Requires-Dist: flet-video; extra == "all"
210
+ Requires-Dist: pydantic-extra-types; extra == "all"
211
+ Requires-Dist: torchaudio; extra == "all"
216
212
  Requires-Dist: logfire[fastapi]; extra == "all"
217
- Requires-Dist: diskcache; extra == "all"
213
+ Requires-Dist: peft; extra == "all"
214
+ Requires-Dist: appdirs; extra == "all"
215
+ Requires-Dist: fastapi; extra == "all"
218
216
  Requires-Dist: contexttimer; extra == "all"
219
- Requires-Dist: httpx; extra == "all"
220
217
  Requires-Dist: pydantic-settings; extra == "all"
221
- Requires-Dist: tokenizers; extra == "all"
222
- Requires-Dist: torchaudio; extra == "all"
223
- Requires-Dist: openpyxl; extra == "all"
224
- Requires-Dist: fastapi; extra == "all"
225
- Requires-Dist: appdirs; extra == "all"
226
- Requires-Dist: pydantic-extra-types; extra == "all"
227
- Requires-Dist: google-auth-oauthlib; extra == "all"
228
- Requires-Dist: google-auth-httplib2; extra == "all"
229
- Requires-Dist: logfire[httpx]; extra == "all"
218
+ Requires-Dist: google-auth; extra == "all"
219
+ Requires-Dist: faker; extra == "all"
220
+ Requires-Dist: beanie[odm]; extra == "all"
221
+ Requires-Dist: deepmerge; extra == "all"
222
+ Requires-Dist: odfpy; extra == "all"
223
+ Requires-Dist: flet-webview; extra == "all"
224
+ Requires-Dist: setuptools; extra == "all"
225
+ Requires-Dist: google-api-python-client; extra == "all"
226
+ Requires-Dist: httpx; extra == "all"
227
+ Requires-Dist: dask[bag]; extra == "all"
228
+ Requires-Dist: json_repair; extra == "all"
229
+ Requires-Dist: pandas; extra == "all"
230
230
  Dynamic: author
231
231
  Dynamic: author-email
232
232
  Dynamic: description
@@ -1 +0,0 @@
1
- 1.3.77
File without changes
File without changes
@@ -18,67 +18,67 @@ pydantic-ai[logfire,openai]
18
18
  ollama
19
19
 
20
20
  [all]
21
- pyyaml
22
- Unidecode
23
- pydevd-pycharm~=251.25410.159
24
- openai
25
- json_repair
26
- faker
27
- semver
28
- pydantic-ai[logfire,openai]
29
- tabulate
21
+ tinynetrc
30
22
  huggingface_hub
23
+ openpyxl
24
+ torchvision
25
+ logfire[httpx]
26
+ pytest-cov
27
+ httpx_retries
28
+ flet-video
29
+ google-auth-httplib2
30
+ tokenizers
31
+ yamlscript
32
+ pymupdf4llm
33
+ regex
31
34
  dnspython[doh]
32
- setuptools
33
- filetype
34
- distributed
35
+ pycountry
36
+ deepdiff
37
+ google-auth-oauthlib
38
+ openai
39
+ sentence_transformers
40
+ python-on-whales
35
41
  bokeh
36
- cachetools
37
- httpx_retries
38
- beanie[odm]
42
+ flet[all]
39
43
  transformers[sentencepiece]
40
- playwright
41
- odfpy
42
- python-on-whales
44
+ html2text
43
45
  pymupdf
44
- peft
45
- regex
46
- logfire
47
- deepdiff
48
- flet-webview
46
+ filetype
47
+ pydantic
48
+ semver
49
+ playwright
50
+ sre_yield
49
51
  uvicorn[standard]
50
- deepmerge
51
- pandas
52
- google-api-python-client
53
- pymupdf4llm
54
- pycountry
52
+ logfire
53
+ distributed
54
+ pyyaml
55
+ diskcache
56
+ pydantic-ai[logfire,openai]
57
+ pydevd-pycharm~=251.25410.159
58
+ tabulate
59
+ cachetools
60
+ Unidecode
55
61
  ollama
56
- tinynetrc
57
- sre_yield
58
- sentence_transformers
59
- pydantic
60
- html2text
61
- flet[all]
62
- google-auth
63
- yamlscript
64
- torchvision
65
- pytest-cov
66
- dask[bag]
67
- flet-video
62
+ pydantic-extra-types
63
+ torchaudio
68
64
  logfire[fastapi]
69
- diskcache
65
+ peft
66
+ appdirs
67
+ fastapi
70
68
  contexttimer
71
- httpx
72
69
  pydantic-settings
73
- tokenizers
74
- torchaudio
75
- openpyxl
76
- fastapi
77
- appdirs
78
- pydantic-extra-types
79
- google-auth-oauthlib
80
- google-auth-httplib2
81
- logfire[httpx]
70
+ google-auth
71
+ faker
72
+ beanie[odm]
73
+ deepmerge
74
+ odfpy
75
+ flet-webview
76
+ setuptools
77
+ google-api-python-client
78
+ httpx
79
+ dask[bag]
80
+ json_repair
81
+ pandas
82
82
 
83
83
  [api]
84
84
  fastapi
File without changes
File without changes
File without changes