fmtr.tools 1.3.55__tar.gz → 1.3.57__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 (101) hide show
  1. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/PKG-INFO +52 -52
  2. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/database_tools/document.py +8 -1
  3. fmtr_tools-1.3.57/fmtr/tools/interface_tools/controls.py +140 -0
  4. fmtr_tools-1.3.57/fmtr/tools/version +1 -0
  5. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr.tools.egg-info/PKG-INFO +52 -52
  6. fmtr_tools-1.3.55/fmtr/tools/interface_tools/controls.py +0 -13
  7. fmtr_tools-1.3.55/fmtr/tools/version +0 -1
  8. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/LICENSE +0 -0
  9. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/README.md +0 -0
  10. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/__init__.py +0 -0
  11. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/ai_tools/__init__.py +0 -0
  12. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  13. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  14. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/api_tools.py +0 -0
  15. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/async_tools.py +0 -0
  16. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/augmentation_tools.py +0 -0
  17. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/caching_tools.py +0 -0
  18. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/constants.py +0 -0
  19. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/context_tools.py +0 -0
  20. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/data_modelling_tools.py +0 -0
  21. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/database_tools/__init__.py +0 -0
  22. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/dataclass_tools.py +0 -0
  23. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/datatype_tools.py +0 -0
  24. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/datetime_tools.py +0 -0
  25. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/debugging_tools.py +0 -0
  26. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/dns_tools/__init__.py +0 -0
  27. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/dns_tools/client.py +0 -0
  28. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/dns_tools/dm.py +0 -0
  29. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/dns_tools/proxy.py +0 -0
  30. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/dns_tools/server.py +0 -0
  31. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/docker_tools/__init__.py +0 -0
  32. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/entrypoints/__init__.py +0 -0
  33. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  34. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/entrypoints/ep_test.py +0 -0
  35. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  36. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  37. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  38. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/environment_tools.py +0 -0
  39. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/function_tools.py +0 -0
  40. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/google_api_tools.py +0 -0
  41. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/hash_tools.py +0 -0
  42. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/hfh_tools.py +0 -0
  43. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/html_tools.py +0 -0
  44. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/http_tools.py +0 -0
  45. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/import_tools.py +0 -0
  46. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/inherit_tools.py +0 -0
  47. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/inspection_tools.py +0 -0
  48. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/interface_tools/__init__.py +0 -0
  49. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/interface_tools/context.py +0 -0
  50. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/interface_tools/interface_tools.py +0 -0
  51. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/iterator_tools.py +0 -0
  52. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/json_fix_tools.py +0 -0
  53. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/json_tools.py +0 -0
  54. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/logging_tools.py +0 -0
  55. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/merging_tools.py +0 -0
  56. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/metric_tools.py +0 -0
  57. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/name_tools.py +0 -0
  58. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/netrc_tools.py +0 -0
  59. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/openai_tools.py +0 -0
  60. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/packaging_tools.py +0 -0
  61. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/parallel_tools.py +0 -0
  62. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/path_tools/__init__.py +0 -0
  63. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  64. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/path_tools/path_tools.py +0 -0
  65. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  66. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/pattern_tools.py +0 -0
  67. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/pdf_tools.py +0 -0
  68. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/platform_tools.py +0 -0
  69. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/process_tools.py +0 -0
  70. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/profiling_tools.py +0 -0
  71. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/random_tools.py +0 -0
  72. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/semantic_tools.py +0 -0
  73. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/settings_tools.py +0 -0
  74. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/setup_tools/__init__.py +0 -0
  75. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  76. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/spaces_tools.py +0 -0
  77. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/string_tools.py +0 -0
  78. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tabular_tools.py +0 -0
  79. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tests/__init__.py +0 -0
  80. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tests/conftest.py +0 -0
  81. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tests/helpers.py +0 -0
  82. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tests/test_datatype.py +0 -0
  83. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tests/test_environment.py +0 -0
  84. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tests/test_json.py +0 -0
  85. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tests/test_path.py +0 -0
  86. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tests/test_yaml.py +0 -0
  87. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tokenization_tools.py +0 -0
  88. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/tools.py +0 -0
  89. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/unicode_tools.py +0 -0
  90. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/version_tools/__init__.py +0 -0
  91. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/version_tools/version_tools.py +0 -0
  92. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/webhook_tools.py +0 -0
  93. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr/tools/yaml_tools.py +0 -0
  94. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  95. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  96. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr.tools.egg-info/entry_points.txt +0 -0
  97. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr.tools.egg-info/requires.txt +51 -51
  98. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/fmtr.tools.egg-info/top_level.txt +0 -0
  99. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/pyproject.toml +0 -0
  100. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/setup.cfg +0 -0
  101. {fmtr_tools-1.3.55 → fmtr_tools-1.3.57}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.55
3
+ Version: 1.3.57
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
@@ -154,68 +154,68 @@ Provides-Extra: db-document
154
154
  Requires-Dist: beanie[odm]; extra == "db-document"
155
155
  Requires-Dist: motor; extra == "db-document"
156
156
  Provides-Extra: all
157
- Requires-Dist: logfire[fastapi]; extra == "all"
158
- Requires-Dist: deepdiff; extra == "all"
159
- Requires-Dist: flet-webview; extra == "all"
160
157
  Requires-Dist: tokenizers; extra == "all"
161
- Requires-Dist: sre_yield; extra == "all"
162
158
  Requires-Dist: uvicorn[standard]; extra == "all"
163
- Requires-Dist: bokeh; extra == "all"
164
- Requires-Dist: torchvision; extra == "all"
165
- Requires-Dist: google-api-python-client; extra == "all"
159
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
160
+ Requires-Dist: pydantic-extra-types; extra == "all"
161
+ Requires-Dist: openai; extra == "all"
162
+ Requires-Dist: deepdiff; extra == "all"
163
+ Requires-Dist: Unidecode; extra == "all"
164
+ Requires-Dist: faker; extra == "all"
166
165
  Requires-Dist: torchaudio; extra == "all"
167
- Requires-Dist: pandas; extra == "all"
168
- Requires-Dist: distributed; extra == "all"
169
- Requires-Dist: setuptools; extra == "all"
170
- Requires-Dist: diskcache; extra == "all"
171
- Requires-Dist: transformers[sentencepiece]; extra == "all"
172
- Requires-Dist: deepmerge; extra == "all"
173
- Requires-Dist: motor; extra == "all"
174
- Requires-Dist: appdirs; extra == "all"
175
- Requires-Dist: google-auth-httplib2; extra == "all"
176
- Requires-Dist: tinynetrc; extra == "all"
177
- Requires-Dist: sentence_transformers; extra == "all"
178
- Requires-Dist: html2text; extra == "all"
179
- Requires-Dist: openpyxl; extra == "all"
180
- Requires-Dist: google-auth; extra == "all"
166
+ Requires-Dist: flet-webview; extra == "all"
167
+ Requires-Dist: pycountry; extra == "all"
168
+ Requires-Dist: google-api-python-client; extra == "all"
169
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
170
+ Requires-Dist: pydantic-settings; extra == "all"
171
+ Requires-Dist: filetype; extra == "all"
172
+ Requires-Dist: httpx_retries; extra == "all"
181
173
  Requires-Dist: pymupdf4llm; extra == "all"
182
- Requires-Dist: httpx; extra == "all"
174
+ Requires-Dist: playwright; extra == "all"
183
175
  Requires-Dist: fastapi; extra == "all"
184
- Requires-Dist: yamlscript; extra == "all"
185
- Requires-Dist: openai; extra == "all"
186
- Requires-Dist: pymupdf; extra == "all"
176
+ Requires-Dist: flet-video; extra == "all"
177
+ Requires-Dist: deepmerge; extra == "all"
178
+ Requires-Dist: regex; extra == "all"
179
+ Requires-Dist: beanie[odm]; extra == "all"
180
+ Requires-Dist: tabulate; extra == "all"
181
+ Requires-Dist: html2text; extra == "all"
182
+ Requires-Dist: flet[all]; extra == "all"
187
183
  Requires-Dist: pytest-cov; extra == "all"
188
- Requires-Dist: python-on-whales; extra == "all"
189
- Requires-Dist: Unidecode; extra == "all"
190
- Requires-Dist: dnspython[doh]; extra == "all"
191
- Requires-Dist: logfire; extra == "all"
184
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
192
185
  Requires-Dist: contexttimer; extra == "all"
193
- Requires-Dist: tabulate; extra == "all"
194
- Requires-Dist: odfpy; extra == "all"
195
- Requires-Dist: beanie[odm]; extra == "all"
186
+ Requires-Dist: pydantic; extra == "all"
187
+ Requires-Dist: google-auth; extra == "all"
188
+ Requires-Dist: yamlscript; extra == "all"
189
+ Requires-Dist: google-auth-oauthlib; extra == "all"
190
+ Requires-Dist: diskcache; extra == "all"
196
191
  Requires-Dist: json_repair; extra == "all"
197
- Requires-Dist: flet-video; extra == "all"
198
- Requires-Dist: logfire[httpx]; extra == "all"
199
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
200
- Requires-Dist: playwright; extra == "all"
201
- Requires-Dist: ollama; extra == "all"
202
- Requires-Dist: httpx_retries; extra == "all"
192
+ Requires-Dist: logfire[fastapi]; extra == "all"
193
+ Requires-Dist: odfpy; extra == "all"
194
+ Requires-Dist: bokeh; extra == "all"
195
+ Requires-Dist: logfire; extra == "all"
196
+ Requires-Dist: sentence_transformers; extra == "all"
203
197
  Requires-Dist: peft; extra == "all"
204
- Requires-Dist: pyyaml; extra == "all"
205
- Requires-Dist: faker; extra == "all"
206
- Requires-Dist: pycountry; extra == "all"
207
- Requires-Dist: dask[bag]; extra == "all"
208
- Requires-Dist: pydantic-extra-types; extra == "all"
209
- Requires-Dist: huggingface_hub; extra == "all"
210
- Requires-Dist: google-auth-oauthlib; extra == "all"
211
- Requires-Dist: pydantic-settings; extra == "all"
212
- Requires-Dist: pydantic; extra == "all"
213
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
214
- Requires-Dist: flet[all]; extra == "all"
215
- Requires-Dist: regex; extra == "all"
198
+ Requires-Dist: ollama; extra == "all"
216
199
  Requires-Dist: cachetools; extra == "all"
200
+ Requires-Dist: motor; extra == "all"
201
+ Requires-Dist: huggingface_hub; extra == "all"
202
+ Requires-Dist: pymupdf; extra == "all"
203
+ Requires-Dist: httpx; extra == "all"
204
+ Requires-Dist: google-auth-httplib2; extra == "all"
217
205
  Requires-Dist: semver; extra == "all"
218
- Requires-Dist: filetype; extra == "all"
206
+ Requires-Dist: openpyxl; extra == "all"
207
+ Requires-Dist: appdirs; extra == "all"
208
+ Requires-Dist: pandas; extra == "all"
209
+ Requires-Dist: setuptools; extra == "all"
210
+ Requires-Dist: dnspython[doh]; extra == "all"
211
+ Requires-Dist: distributed; extra == "all"
212
+ Requires-Dist: python-on-whales; extra == "all"
213
+ Requires-Dist: torchvision; extra == "all"
214
+ Requires-Dist: pyyaml; extra == "all"
215
+ Requires-Dist: dask[bag]; extra == "all"
216
+ Requires-Dist: sre_yield; extra == "all"
217
+ Requires-Dist: tinynetrc; extra == "all"
218
+ Requires-Dist: logfire[httpx]; extra == "all"
219
219
  Dynamic: author
220
220
  Dynamic: author-email
221
221
  Dynamic: description
@@ -5,6 +5,7 @@ import beanie
5
5
  from motor.motor_asyncio import AsyncIOMotorClient
6
6
 
7
7
  from fmtr.tools.constants import Constants
8
+ from fmtr.tools.logging_tools import logger
8
9
 
9
10
 
10
11
  class Document(beanie.Document):
@@ -31,4 +32,10 @@ class Client:
31
32
  return f'mongodb://{self.host}:{self.port}'
32
33
 
33
34
  async def connect(self):
34
- return await beanie.init_beanie(database=self.db, document_models=self.documents)
35
+ """
36
+
37
+ Connect
38
+
39
+ """
40
+ with logger.span(f'Connecting to document database {self.uri=} {self.name=}'):
41
+ return await beanie.init_beanie(database=self.db, document_models=self.documents)
@@ -0,0 +1,140 @@
1
+ from typing import Optional
2
+
3
+ import flet as ft
4
+ from flet.core.gesture_detector import TapEvent
5
+
6
+ from fmtr.tools.logging_tools import logger
7
+
8
+
9
+ class SliderSteps(ft.Slider):
10
+ """
11
+
12
+ Slider control using step instead of divisions
13
+
14
+ """
15
+
16
+ def __init__(self, *args, min=10, max=100, step=10, **kwargs):
17
+ self.step = step
18
+ divisions = (max - min) // step
19
+ super().__init__(*args, min=min, max=max, divisions=divisions, **kwargs)
20
+
21
+
22
+ class Cell(ft.DataCell):
23
+ """
24
+
25
+ Context-aware, clickable data cell.
26
+
27
+ """
28
+
29
+ def __init__(self, series, column):
30
+ """
31
+
32
+ Store context
33
+
34
+ """
35
+ self.series = series
36
+ self.column = column
37
+ self.value = series[column]
38
+
39
+ super().__init__(self.gesture_detector)
40
+
41
+ @property
42
+ def text(self):
43
+ """
44
+
45
+ Cell contents text
46
+
47
+ """
48
+ return ft.Text(str(self.value))
49
+
50
+ @property
51
+ def gesture_detector(self):
52
+ """
53
+
54
+ Make arbitrary content clickable
55
+
56
+ """
57
+ return ft.GestureDetector(content=self.text, on_tap=self.click_tap)
58
+
59
+ async def click_tap(self, event: TapEvent):
60
+ """
61
+
62
+ Default cell click behavior — override in subclass if needed
63
+
64
+ """
65
+ value = await self.click(event=event)
66
+ event.page.update()
67
+ return value
68
+
69
+ async def click(self, event: Optional[TapEvent] = None):
70
+ """
71
+
72
+ Default cell click behavior — override in subclass if needed
73
+
74
+ """
75
+ logger.info(f"Clicked {self.column=} {self.series.id=} {self.value=}")
76
+
77
+
78
+ class Row(ft.DataRow):
79
+ """
80
+
81
+ Instantiate a row from a series
82
+
83
+ """
84
+
85
+ TypeCell = Cell
86
+
87
+ def __init__(self, series):
88
+ self.series = series
89
+ cells = [self.TypeCell(series, col) for col in series.index]
90
+ super().__init__(cells)
91
+
92
+
93
+ class Column(ft.DataColumn):
94
+ """
95
+
96
+ Column stub
97
+
98
+ """
99
+
100
+ def __init__(self, col_name: str):
101
+ """
102
+
103
+ Store context
104
+
105
+ """
106
+
107
+ self.col_name = col_name
108
+
109
+ super().__init__(label=self.text)
110
+
111
+ @property
112
+ def text(self):
113
+ """
114
+
115
+ Cell contents text
116
+
117
+ """
118
+ return ft.Text(str(self.col_name))
119
+
120
+
121
+ class Table(ft.DataTable):
122
+ """
123
+
124
+ Dataframe with clickable cells
125
+
126
+ """
127
+
128
+ TypeRow = Row
129
+ TypeColumn = Column
130
+
131
+ def __init__(self, df): # todo move to submodule with tabular deps
132
+ """
133
+
134
+ Set columns/rows using relevant types
135
+
136
+ """
137
+ self.df = df
138
+ columns = [self.TypeColumn(col) for col in df.columns]
139
+ rows = [self.TypeRow(row) for _, row in df.iterrows()]
140
+ super().__init__(columns=columns, rows=rows)
@@ -0,0 +1 @@
1
+ 1.3.57
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.55
3
+ Version: 1.3.57
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
@@ -154,68 +154,68 @@ Provides-Extra: db-document
154
154
  Requires-Dist: beanie[odm]; extra == "db-document"
155
155
  Requires-Dist: motor; extra == "db-document"
156
156
  Provides-Extra: all
157
- Requires-Dist: logfire[fastapi]; extra == "all"
158
- Requires-Dist: deepdiff; extra == "all"
159
- Requires-Dist: flet-webview; extra == "all"
160
157
  Requires-Dist: tokenizers; extra == "all"
161
- Requires-Dist: sre_yield; extra == "all"
162
158
  Requires-Dist: uvicorn[standard]; extra == "all"
163
- Requires-Dist: bokeh; extra == "all"
164
- Requires-Dist: torchvision; extra == "all"
165
- Requires-Dist: google-api-python-client; extra == "all"
159
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
160
+ Requires-Dist: pydantic-extra-types; extra == "all"
161
+ Requires-Dist: openai; extra == "all"
162
+ Requires-Dist: deepdiff; extra == "all"
163
+ Requires-Dist: Unidecode; extra == "all"
164
+ Requires-Dist: faker; extra == "all"
166
165
  Requires-Dist: torchaudio; extra == "all"
167
- Requires-Dist: pandas; extra == "all"
168
- Requires-Dist: distributed; extra == "all"
169
- Requires-Dist: setuptools; extra == "all"
170
- Requires-Dist: diskcache; extra == "all"
171
- Requires-Dist: transformers[sentencepiece]; extra == "all"
172
- Requires-Dist: deepmerge; extra == "all"
173
- Requires-Dist: motor; extra == "all"
174
- Requires-Dist: appdirs; extra == "all"
175
- Requires-Dist: google-auth-httplib2; extra == "all"
176
- Requires-Dist: tinynetrc; extra == "all"
177
- Requires-Dist: sentence_transformers; extra == "all"
178
- Requires-Dist: html2text; extra == "all"
179
- Requires-Dist: openpyxl; extra == "all"
180
- Requires-Dist: google-auth; extra == "all"
166
+ Requires-Dist: flet-webview; extra == "all"
167
+ Requires-Dist: pycountry; extra == "all"
168
+ Requires-Dist: google-api-python-client; extra == "all"
169
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
170
+ Requires-Dist: pydantic-settings; extra == "all"
171
+ Requires-Dist: filetype; extra == "all"
172
+ Requires-Dist: httpx_retries; extra == "all"
181
173
  Requires-Dist: pymupdf4llm; extra == "all"
182
- Requires-Dist: httpx; extra == "all"
174
+ Requires-Dist: playwright; extra == "all"
183
175
  Requires-Dist: fastapi; extra == "all"
184
- Requires-Dist: yamlscript; extra == "all"
185
- Requires-Dist: openai; extra == "all"
186
- Requires-Dist: pymupdf; extra == "all"
176
+ Requires-Dist: flet-video; extra == "all"
177
+ Requires-Dist: deepmerge; extra == "all"
178
+ Requires-Dist: regex; extra == "all"
179
+ Requires-Dist: beanie[odm]; extra == "all"
180
+ Requires-Dist: tabulate; extra == "all"
181
+ Requires-Dist: html2text; extra == "all"
182
+ Requires-Dist: flet[all]; extra == "all"
187
183
  Requires-Dist: pytest-cov; extra == "all"
188
- Requires-Dist: python-on-whales; extra == "all"
189
- Requires-Dist: Unidecode; extra == "all"
190
- Requires-Dist: dnspython[doh]; extra == "all"
191
- Requires-Dist: logfire; extra == "all"
184
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
192
185
  Requires-Dist: contexttimer; extra == "all"
193
- Requires-Dist: tabulate; extra == "all"
194
- Requires-Dist: odfpy; extra == "all"
195
- Requires-Dist: beanie[odm]; extra == "all"
186
+ Requires-Dist: pydantic; extra == "all"
187
+ Requires-Dist: google-auth; extra == "all"
188
+ Requires-Dist: yamlscript; extra == "all"
189
+ Requires-Dist: google-auth-oauthlib; extra == "all"
190
+ Requires-Dist: diskcache; extra == "all"
196
191
  Requires-Dist: json_repair; extra == "all"
197
- Requires-Dist: flet-video; extra == "all"
198
- Requires-Dist: logfire[httpx]; extra == "all"
199
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
200
- Requires-Dist: playwright; extra == "all"
201
- Requires-Dist: ollama; extra == "all"
202
- Requires-Dist: httpx_retries; extra == "all"
192
+ Requires-Dist: logfire[fastapi]; extra == "all"
193
+ Requires-Dist: odfpy; extra == "all"
194
+ Requires-Dist: bokeh; extra == "all"
195
+ Requires-Dist: logfire; extra == "all"
196
+ Requires-Dist: sentence_transformers; extra == "all"
203
197
  Requires-Dist: peft; extra == "all"
204
- Requires-Dist: pyyaml; extra == "all"
205
- Requires-Dist: faker; extra == "all"
206
- Requires-Dist: pycountry; extra == "all"
207
- Requires-Dist: dask[bag]; extra == "all"
208
- Requires-Dist: pydantic-extra-types; extra == "all"
209
- Requires-Dist: huggingface_hub; extra == "all"
210
- Requires-Dist: google-auth-oauthlib; extra == "all"
211
- Requires-Dist: pydantic-settings; extra == "all"
212
- Requires-Dist: pydantic; extra == "all"
213
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
214
- Requires-Dist: flet[all]; extra == "all"
215
- Requires-Dist: regex; extra == "all"
198
+ Requires-Dist: ollama; extra == "all"
216
199
  Requires-Dist: cachetools; extra == "all"
200
+ Requires-Dist: motor; extra == "all"
201
+ Requires-Dist: huggingface_hub; extra == "all"
202
+ Requires-Dist: pymupdf; extra == "all"
203
+ Requires-Dist: httpx; extra == "all"
204
+ Requires-Dist: google-auth-httplib2; extra == "all"
217
205
  Requires-Dist: semver; extra == "all"
218
- Requires-Dist: filetype; extra == "all"
206
+ Requires-Dist: openpyxl; extra == "all"
207
+ Requires-Dist: appdirs; extra == "all"
208
+ Requires-Dist: pandas; extra == "all"
209
+ Requires-Dist: setuptools; extra == "all"
210
+ Requires-Dist: dnspython[doh]; extra == "all"
211
+ Requires-Dist: distributed; extra == "all"
212
+ Requires-Dist: python-on-whales; extra == "all"
213
+ Requires-Dist: torchvision; extra == "all"
214
+ Requires-Dist: pyyaml; extra == "all"
215
+ Requires-Dist: dask[bag]; extra == "all"
216
+ Requires-Dist: sre_yield; extra == "all"
217
+ Requires-Dist: tinynetrc; extra == "all"
218
+ Requires-Dist: logfire[httpx]; extra == "all"
219
219
  Dynamic: author
220
220
  Dynamic: author-email
221
221
  Dynamic: description
@@ -1,13 +0,0 @@
1
- import flet as ft
2
-
3
- class SliderSteps(ft.Slider):
4
- """
5
-
6
- Slider control using step instead of divisions
7
-
8
- """
9
-
10
- def __init__(self, *args, min=10, max=100, step=10, **kwargs):
11
- self.step = step
12
- divisions = (max - min) // step
13
- super().__init__(*args, min=min, max=max, divisions=divisions, **kwargs)
@@ -1 +0,0 @@
1
- 1.3.55
File without changes
File without changes
@@ -18,68 +18,68 @@ pydantic-ai[logfire,openai]
18
18
  ollama
19
19
 
20
20
  [all]
21
- logfire[fastapi]
22
- deepdiff
23
- flet-webview
24
21
  tokenizers
25
- sre_yield
26
22
  uvicorn[standard]
27
- bokeh
28
- torchvision
29
- google-api-python-client
23
+ pydevd-pycharm~=251.25410.159
24
+ pydantic-extra-types
25
+ openai
26
+ deepdiff
27
+ Unidecode
28
+ faker
30
29
  torchaudio
31
- pandas
32
- distributed
33
- setuptools
34
- diskcache
35
- transformers[sentencepiece]
36
- deepmerge
37
- motor
38
- appdirs
39
- google-auth-httplib2
40
- tinynetrc
41
- sentence_transformers
42
- html2text
43
- openpyxl
44
- google-auth
30
+ flet-webview
31
+ pycountry
32
+ google-api-python-client
33
+ pydantic-ai[logfire,openai]
34
+ pydantic-settings
35
+ filetype
36
+ httpx_retries
45
37
  pymupdf4llm
46
- httpx
38
+ playwright
47
39
  fastapi
48
- yamlscript
49
- openai
50
- pymupdf
40
+ flet-video
41
+ deepmerge
42
+ regex
43
+ beanie[odm]
44
+ tabulate
45
+ html2text
46
+ flet[all]
51
47
  pytest-cov
52
- python-on-whales
53
- Unidecode
54
- dnspython[doh]
55
- logfire
48
+ transformers[sentencepiece]
56
49
  contexttimer
57
- tabulate
58
- odfpy
59
- beanie[odm]
50
+ pydantic
51
+ google-auth
52
+ yamlscript
53
+ google-auth-oauthlib
54
+ diskcache
60
55
  json_repair
61
- flet-video
62
- logfire[httpx]
63
- pydevd-pycharm~=251.25410.159
64
- playwright
65
- ollama
66
- httpx_retries
56
+ logfire[fastapi]
57
+ odfpy
58
+ bokeh
59
+ logfire
60
+ sentence_transformers
67
61
  peft
68
- pyyaml
69
- faker
70
- pycountry
71
- dask[bag]
72
- pydantic-extra-types
73
- huggingface_hub
74
- google-auth-oauthlib
75
- pydantic-settings
76
- pydantic
77
- pydantic-ai[logfire,openai]
78
- flet[all]
79
- regex
62
+ ollama
80
63
  cachetools
64
+ motor
65
+ huggingface_hub
66
+ pymupdf
67
+ httpx
68
+ google-auth-httplib2
81
69
  semver
82
- filetype
70
+ openpyxl
71
+ appdirs
72
+ pandas
73
+ setuptools
74
+ dnspython[doh]
75
+ distributed
76
+ python-on-whales
77
+ torchvision
78
+ pyyaml
79
+ dask[bag]
80
+ sre_yield
81
+ tinynetrc
82
+ logfire[httpx]
83
83
 
84
84
  [api]
85
85
  fastapi
File without changes
File without changes
File without changes