fmtr.tools 1.3.54__tar.gz → 1.3.56__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.54 → fmtr_tools-1.3.56}/PKG-INFO +50 -50
  2. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/ai_tools/agentic_tools.py +5 -2
  3. fmtr_tools-1.3.56/fmtr/tools/interface_tools/controls.py +140 -0
  4. fmtr_tools-1.3.56/fmtr/tools/version +1 -0
  5. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr.tools.egg-info/PKG-INFO +50 -50
  6. fmtr_tools-1.3.54/fmtr/tools/interface_tools/controls.py +0 -13
  7. fmtr_tools-1.3.54/fmtr/tools/version +0 -1
  8. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/LICENSE +0 -0
  9. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/README.md +0 -0
  10. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/__init__.py +0 -0
  11. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/ai_tools/__init__.py +0 -0
  12. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  13. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/api_tools.py +0 -0
  14. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/async_tools.py +0 -0
  15. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/augmentation_tools.py +0 -0
  16. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/caching_tools.py +0 -0
  17. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/constants.py +0 -0
  18. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/context_tools.py +0 -0
  19. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/data_modelling_tools.py +0 -0
  20. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/database_tools/__init__.py +0 -0
  21. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/database_tools/document.py +0 -0
  22. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/dataclass_tools.py +0 -0
  23. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/datatype_tools.py +0 -0
  24. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/datetime_tools.py +0 -0
  25. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/debugging_tools.py +0 -0
  26. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/dns_tools/__init__.py +0 -0
  27. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/dns_tools/client.py +0 -0
  28. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/dns_tools/dm.py +0 -0
  29. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/dns_tools/proxy.py +0 -0
  30. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/dns_tools/server.py +0 -0
  31. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/docker_tools/__init__.py +0 -0
  32. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/entrypoints/__init__.py +0 -0
  33. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  34. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/entrypoints/ep_test.py +0 -0
  35. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  36. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  37. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  38. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/environment_tools.py +0 -0
  39. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/function_tools.py +0 -0
  40. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/google_api_tools.py +0 -0
  41. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/hash_tools.py +0 -0
  42. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/hfh_tools.py +0 -0
  43. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/html_tools.py +0 -0
  44. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/http_tools.py +0 -0
  45. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/import_tools.py +0 -0
  46. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/inherit_tools.py +0 -0
  47. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/inspection_tools.py +0 -0
  48. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/interface_tools/__init__.py +0 -0
  49. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/interface_tools/context.py +0 -0
  50. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/interface_tools/interface_tools.py +0 -0
  51. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/iterator_tools.py +0 -0
  52. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/json_fix_tools.py +0 -0
  53. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/json_tools.py +0 -0
  54. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/logging_tools.py +0 -0
  55. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/merging_tools.py +0 -0
  56. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/metric_tools.py +0 -0
  57. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/name_tools.py +0 -0
  58. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/netrc_tools.py +0 -0
  59. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/openai_tools.py +0 -0
  60. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/packaging_tools.py +0 -0
  61. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/parallel_tools.py +0 -0
  62. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/path_tools/__init__.py +0 -0
  63. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  64. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/path_tools/path_tools.py +0 -0
  65. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  66. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/pattern_tools.py +0 -0
  67. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/pdf_tools.py +0 -0
  68. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/platform_tools.py +0 -0
  69. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/process_tools.py +0 -0
  70. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/profiling_tools.py +0 -0
  71. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/random_tools.py +0 -0
  72. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/semantic_tools.py +0 -0
  73. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/settings_tools.py +0 -0
  74. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/setup_tools/__init__.py +0 -0
  75. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  76. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/spaces_tools.py +0 -0
  77. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/string_tools.py +0 -0
  78. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tabular_tools.py +0 -0
  79. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tests/__init__.py +0 -0
  80. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tests/conftest.py +0 -0
  81. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tests/helpers.py +0 -0
  82. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tests/test_datatype.py +0 -0
  83. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tests/test_environment.py +0 -0
  84. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tests/test_json.py +0 -0
  85. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tests/test_path.py +0 -0
  86. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tests/test_yaml.py +0 -0
  87. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tokenization_tools.py +0 -0
  88. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/tools.py +0 -0
  89. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/unicode_tools.py +0 -0
  90. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/version_tools/__init__.py +0 -0
  91. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/version_tools/version_tools.py +0 -0
  92. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/webhook_tools.py +0 -0
  93. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr/tools/yaml_tools.py +0 -0
  94. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  95. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  96. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr.tools.egg-info/entry_points.txt +0 -0
  97. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr.tools.egg-info/requires.txt +49 -49
  98. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/fmtr.tools.egg-info/top_level.txt +0 -0
  99. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/pyproject.toml +0 -0
  100. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/setup.cfg +0 -0
  101. {fmtr_tools-1.3.54 → fmtr_tools-1.3.56}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.54
3
+ Version: 1.3.56
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: appdirs; extra == "all"
158
- Requires-Dist: transformers[sentencepiece]; extra == "all"
157
+ Requires-Dist: pymupdf4llm; extra == "all"
158
+ Requires-Dist: tabulate; extra == "all"
159
+ Requires-Dist: tinynetrc; extra == "all"
160
+ Requires-Dist: fastapi; extra == "all"
161
+ Requires-Dist: httpx; extra == "all"
162
+ Requires-Dist: yamlscript; extra == "all"
163
+ Requires-Dist: regex; extra == "all"
164
+ Requires-Dist: pyyaml; extra == "all"
159
165
  Requires-Dist: odfpy; extra == "all"
160
- Requires-Dist: google-api-python-client; extra == "all"
166
+ Requires-Dist: logfire; extra == "all"
167
+ Requires-Dist: torchaudio; extra == "all"
168
+ Requires-Dist: flet-webview; extra == "all"
169
+ Requires-Dist: logfire[fastapi]; extra == "all"
161
170
  Requires-Dist: flet[all]; extra == "all"
162
- Requires-Dist: tokenizers; extra == "all"
163
- Requires-Dist: openpyxl; extra == "all"
164
- Requires-Dist: dnspython[doh]; extra == "all"
165
- Requires-Dist: deepdiff; extra == "all"
166
171
  Requires-Dist: pymupdf; extra == "all"
167
- Requires-Dist: json_repair; extra == "all"
168
- Requires-Dist: flet-webview; extra == "all"
169
- Requires-Dist: torchaudio; extra == "all"
170
- Requires-Dist: tabulate; extra == "all"
171
- Requires-Dist: pymupdf4llm; extra == "all"
172
172
  Requires-Dist: sentence_transformers; extra == "all"
173
- Requires-Dist: regex; extra == "all"
174
- Requires-Dist: beanie[odm]; extra == "all"
175
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
173
+ Requires-Dist: distributed; extra == "all"
174
+ Requires-Dist: logfire[httpx]; extra == "all"
175
+ Requires-Dist: json_repair; extra == "all"
176
+ Requires-Dist: diskcache; extra == "all"
177
+ Requires-Dist: motor; extra == "all"
178
+ Requires-Dist: deepdiff; extra == "all"
179
+ Requires-Dist: playwright; extra == "all"
180
+ Requires-Dist: pydantic-extra-types; extra == "all"
181
+ Requires-Dist: torchvision; extra == "all"
182
+ Requires-Dist: tokenizers; extra == "all"
176
183
  Requires-Dist: html2text; extra == "all"
177
184
  Requires-Dist: google-auth-httplib2; extra == "all"
178
- Requires-Dist: setuptools; extra == "all"
179
- Requires-Dist: bokeh; extra == "all"
180
- Requires-Dist: tinynetrc; extra == "all"
181
- Requires-Dist: openai; extra == "all"
182
- Requires-Dist: motor; extra == "all"
185
+ Requires-Dist: appdirs; extra == "all"
186
+ Requires-Dist: filetype; extra == "all"
187
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
188
+ Requires-Dist: beanie[odm]; extra == "all"
189
+ Requires-Dist: contexttimer; extra == "all"
183
190
  Requires-Dist: pytest-cov; extra == "all"
184
- Requires-Dist: distributed; extra == "all"
185
- Requires-Dist: Unidecode; extra == "all"
186
- Requires-Dist: logfire[fastapi]; extra == "all"
187
- Requires-Dist: google-auth-oauthlib; extra == "all"
188
- Requires-Dist: cachetools; extra == "all"
189
- Requires-Dist: httpx_retries; extra == "all"
190
- Requires-Dist: uvicorn[standard]; extra == "all"
191
- Requires-Dist: pydantic-extra-types; extra == "all"
192
- Requires-Dist: logfire[httpx]; extra == "all"
193
- Requires-Dist: deepmerge; extra == "all"
194
191
  Requires-Dist: semver; extra == "all"
195
192
  Requires-Dist: pycountry; extra == "all"
196
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
197
- Requires-Dist: filetype; extra == "all"
198
- Requires-Dist: playwright; extra == "all"
199
- Requires-Dist: sre_yield; extra == "all"
200
- Requires-Dist: fastapi; extra == "all"
201
- Requires-Dist: faker; extra == "all"
202
- Requires-Dist: httpx; extra == "all"
203
- Requires-Dist: torchvision; extra == "all"
204
- Requires-Dist: ollama; extra == "all"
205
193
  Requires-Dist: pydantic-settings; extra == "all"
206
- Requires-Dist: yamlscript; extra == "all"
207
- Requires-Dist: diskcache; extra == "all"
208
- Requires-Dist: pyyaml; extra == "all"
209
- Requires-Dist: python-on-whales; extra == "all"
210
- Requires-Dist: peft; extra == "all"
211
- Requires-Dist: contexttimer; extra == "all"
212
- Requires-Dist: pandas; extra == "all"
213
- Requires-Dist: google-auth; extra == "all"
194
+ Requires-Dist: dnspython[doh]; extra == "all"
195
+ Requires-Dist: deepmerge; extra == "all"
196
+ Requires-Dist: google-auth-oauthlib; extra == "all"
197
+ Requires-Dist: openai; extra == "all"
214
198
  Requires-Dist: dask[bag]; extra == "all"
199
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
200
+ Requires-Dist: openpyxl; extra == "all"
201
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
202
+ Requires-Dist: uvicorn[standard]; extra == "all"
203
+ Requires-Dist: google-api-python-client; extra == "all"
204
+ Requires-Dist: faker; extra == "all"
215
205
  Requires-Dist: huggingface_hub; extra == "all"
216
- Requires-Dist: pydantic; extra == "all"
206
+ Requires-Dist: sre_yield; extra == "all"
207
+ Requires-Dist: peft; extra == "all"
208
+ Requires-Dist: cachetools; extra == "all"
209
+ Requires-Dist: google-auth; extra == "all"
210
+ Requires-Dist: pandas; extra == "all"
211
+ Requires-Dist: Unidecode; extra == "all"
212
+ Requires-Dist: setuptools; extra == "all"
213
+ Requires-Dist: ollama; extra == "all"
217
214
  Requires-Dist: flet-video; extra == "all"
218
- Requires-Dist: logfire; extra == "all"
215
+ Requires-Dist: httpx_retries; extra == "all"
216
+ Requires-Dist: bokeh; extra == "all"
217
+ Requires-Dist: pydantic; extra == "all"
218
+ Requires-Dist: python-on-whales; extra == "all"
219
219
  Dynamic: author
220
220
  Dynamic: author-email
221
221
  Dynamic: description
@@ -1,3 +1,5 @@
1
+ from typing import List, Optional, Any, Annotated, Generic
2
+
1
3
  import pydantic_ai
2
4
  from pydantic import PlainValidator
3
5
  from pydantic_ai import RunContext, ModelRetry
@@ -6,7 +8,6 @@ from pydantic_ai.agent import AgentRunResult, Agent
6
8
  from pydantic_ai.models.openai import OpenAIModel
7
9
  from pydantic_ai.providers.openai import OpenAIProvider
8
10
  from pydantic_ai.tools import AgentDepsT
9
- from typing import List, Optional, Any, Annotated, Generic
10
11
 
11
12
  from fmtr.tools import environment_tools as env
12
13
  from fmtr.tools.constants import Constants
@@ -27,6 +28,8 @@ class Validator:
27
28
  raise NotImplementedError()
28
29
 
29
30
 
31
+ api_key = env.get(Constants.FMTR_OPENAI_API_KEY_KEY, None)
32
+
30
33
  class Task(Generic[AgentDepsT, OutputDataT]):
31
34
  """
32
35
 
@@ -37,7 +40,7 @@ class Task(Generic[AgentDepsT, OutputDataT]):
37
40
  TypeDeps = str
38
41
  TypeOutput = str
39
42
 
40
- PROVIDER = OpenAIProvider(api_key=env.get(Constants.FMTR_OPENAI_API_KEY_KEY))
43
+ PROVIDER = OpenAIProvider(api_key=api_key) if api_key else None
41
44
 
42
45
  API_HOST_FMTR = env.get(Constants.FMTR_AI_HOST_KEY, Constants.FMTR_AI_HOST_DEFAULT)
43
46
  API_URL_FMTR = f'https://{API_HOST_FMTR}/v1'
@@ -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.56
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.54
3
+ Version: 1.3.56
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: appdirs; extra == "all"
158
- Requires-Dist: transformers[sentencepiece]; extra == "all"
157
+ Requires-Dist: pymupdf4llm; extra == "all"
158
+ Requires-Dist: tabulate; extra == "all"
159
+ Requires-Dist: tinynetrc; extra == "all"
160
+ Requires-Dist: fastapi; extra == "all"
161
+ Requires-Dist: httpx; extra == "all"
162
+ Requires-Dist: yamlscript; extra == "all"
163
+ Requires-Dist: regex; extra == "all"
164
+ Requires-Dist: pyyaml; extra == "all"
159
165
  Requires-Dist: odfpy; extra == "all"
160
- Requires-Dist: google-api-python-client; extra == "all"
166
+ Requires-Dist: logfire; extra == "all"
167
+ Requires-Dist: torchaudio; extra == "all"
168
+ Requires-Dist: flet-webview; extra == "all"
169
+ Requires-Dist: logfire[fastapi]; extra == "all"
161
170
  Requires-Dist: flet[all]; extra == "all"
162
- Requires-Dist: tokenizers; extra == "all"
163
- Requires-Dist: openpyxl; extra == "all"
164
- Requires-Dist: dnspython[doh]; extra == "all"
165
- Requires-Dist: deepdiff; extra == "all"
166
171
  Requires-Dist: pymupdf; extra == "all"
167
- Requires-Dist: json_repair; extra == "all"
168
- Requires-Dist: flet-webview; extra == "all"
169
- Requires-Dist: torchaudio; extra == "all"
170
- Requires-Dist: tabulate; extra == "all"
171
- Requires-Dist: pymupdf4llm; extra == "all"
172
172
  Requires-Dist: sentence_transformers; extra == "all"
173
- Requires-Dist: regex; extra == "all"
174
- Requires-Dist: beanie[odm]; extra == "all"
175
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
173
+ Requires-Dist: distributed; extra == "all"
174
+ Requires-Dist: logfire[httpx]; extra == "all"
175
+ Requires-Dist: json_repair; extra == "all"
176
+ Requires-Dist: diskcache; extra == "all"
177
+ Requires-Dist: motor; extra == "all"
178
+ Requires-Dist: deepdiff; extra == "all"
179
+ Requires-Dist: playwright; extra == "all"
180
+ Requires-Dist: pydantic-extra-types; extra == "all"
181
+ Requires-Dist: torchvision; extra == "all"
182
+ Requires-Dist: tokenizers; extra == "all"
176
183
  Requires-Dist: html2text; extra == "all"
177
184
  Requires-Dist: google-auth-httplib2; extra == "all"
178
- Requires-Dist: setuptools; extra == "all"
179
- Requires-Dist: bokeh; extra == "all"
180
- Requires-Dist: tinynetrc; extra == "all"
181
- Requires-Dist: openai; extra == "all"
182
- Requires-Dist: motor; extra == "all"
185
+ Requires-Dist: appdirs; extra == "all"
186
+ Requires-Dist: filetype; extra == "all"
187
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
188
+ Requires-Dist: beanie[odm]; extra == "all"
189
+ Requires-Dist: contexttimer; extra == "all"
183
190
  Requires-Dist: pytest-cov; extra == "all"
184
- Requires-Dist: distributed; extra == "all"
185
- Requires-Dist: Unidecode; extra == "all"
186
- Requires-Dist: logfire[fastapi]; extra == "all"
187
- Requires-Dist: google-auth-oauthlib; extra == "all"
188
- Requires-Dist: cachetools; extra == "all"
189
- Requires-Dist: httpx_retries; extra == "all"
190
- Requires-Dist: uvicorn[standard]; extra == "all"
191
- Requires-Dist: pydantic-extra-types; extra == "all"
192
- Requires-Dist: logfire[httpx]; extra == "all"
193
- Requires-Dist: deepmerge; extra == "all"
194
191
  Requires-Dist: semver; extra == "all"
195
192
  Requires-Dist: pycountry; extra == "all"
196
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
197
- Requires-Dist: filetype; extra == "all"
198
- Requires-Dist: playwright; extra == "all"
199
- Requires-Dist: sre_yield; extra == "all"
200
- Requires-Dist: fastapi; extra == "all"
201
- Requires-Dist: faker; extra == "all"
202
- Requires-Dist: httpx; extra == "all"
203
- Requires-Dist: torchvision; extra == "all"
204
- Requires-Dist: ollama; extra == "all"
205
193
  Requires-Dist: pydantic-settings; extra == "all"
206
- Requires-Dist: yamlscript; extra == "all"
207
- Requires-Dist: diskcache; extra == "all"
208
- Requires-Dist: pyyaml; extra == "all"
209
- Requires-Dist: python-on-whales; extra == "all"
210
- Requires-Dist: peft; extra == "all"
211
- Requires-Dist: contexttimer; extra == "all"
212
- Requires-Dist: pandas; extra == "all"
213
- Requires-Dist: google-auth; extra == "all"
194
+ Requires-Dist: dnspython[doh]; extra == "all"
195
+ Requires-Dist: deepmerge; extra == "all"
196
+ Requires-Dist: google-auth-oauthlib; extra == "all"
197
+ Requires-Dist: openai; extra == "all"
214
198
  Requires-Dist: dask[bag]; extra == "all"
199
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
200
+ Requires-Dist: openpyxl; extra == "all"
201
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
202
+ Requires-Dist: uvicorn[standard]; extra == "all"
203
+ Requires-Dist: google-api-python-client; extra == "all"
204
+ Requires-Dist: faker; extra == "all"
215
205
  Requires-Dist: huggingface_hub; extra == "all"
216
- Requires-Dist: pydantic; extra == "all"
206
+ Requires-Dist: sre_yield; extra == "all"
207
+ Requires-Dist: peft; extra == "all"
208
+ Requires-Dist: cachetools; extra == "all"
209
+ Requires-Dist: google-auth; extra == "all"
210
+ Requires-Dist: pandas; extra == "all"
211
+ Requires-Dist: Unidecode; extra == "all"
212
+ Requires-Dist: setuptools; extra == "all"
213
+ Requires-Dist: ollama; extra == "all"
217
214
  Requires-Dist: flet-video; extra == "all"
218
- Requires-Dist: logfire; extra == "all"
215
+ Requires-Dist: httpx_retries; extra == "all"
216
+ Requires-Dist: bokeh; extra == "all"
217
+ Requires-Dist: pydantic; extra == "all"
218
+ Requires-Dist: python-on-whales; 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.54
File without changes
File without changes
@@ -18,68 +18,68 @@ pydantic-ai[logfire,openai]
18
18
  ollama
19
19
 
20
20
  [all]
21
- appdirs
22
- transformers[sentencepiece]
21
+ pymupdf4llm
22
+ tabulate
23
+ tinynetrc
24
+ fastapi
25
+ httpx
26
+ yamlscript
27
+ regex
28
+ pyyaml
23
29
  odfpy
24
- google-api-python-client
30
+ logfire
31
+ torchaudio
32
+ flet-webview
33
+ logfire[fastapi]
25
34
  flet[all]
26
- tokenizers
27
- openpyxl
28
- dnspython[doh]
29
- deepdiff
30
35
  pymupdf
31
- json_repair
32
- flet-webview
33
- torchaudio
34
- tabulate
35
- pymupdf4llm
36
36
  sentence_transformers
37
- regex
38
- beanie[odm]
39
- pydevd-pycharm~=251.25410.159
37
+ distributed
38
+ logfire[httpx]
39
+ json_repair
40
+ diskcache
41
+ motor
42
+ deepdiff
43
+ playwright
44
+ pydantic-extra-types
45
+ torchvision
46
+ tokenizers
40
47
  html2text
41
48
  google-auth-httplib2
42
- setuptools
43
- bokeh
44
- tinynetrc
45
- openai
46
- motor
49
+ appdirs
50
+ filetype
51
+ pydantic-ai[logfire,openai]
52
+ beanie[odm]
53
+ contexttimer
47
54
  pytest-cov
48
- distributed
49
- Unidecode
50
- logfire[fastapi]
51
- google-auth-oauthlib
52
- cachetools
53
- httpx_retries
54
- uvicorn[standard]
55
- pydantic-extra-types
56
- logfire[httpx]
57
- deepmerge
58
55
  semver
59
56
  pycountry
60
- pydantic-ai[logfire,openai]
61
- filetype
62
- playwright
63
- sre_yield
64
- fastapi
65
- faker
66
- httpx
67
- torchvision
68
- ollama
69
57
  pydantic-settings
70
- yamlscript
71
- diskcache
72
- pyyaml
73
- python-on-whales
74
- peft
75
- contexttimer
76
- pandas
77
- google-auth
58
+ dnspython[doh]
59
+ deepmerge
60
+ google-auth-oauthlib
61
+ openai
78
62
  dask[bag]
63
+ transformers[sentencepiece]
64
+ openpyxl
65
+ pydevd-pycharm~=251.25410.159
66
+ uvicorn[standard]
67
+ google-api-python-client
68
+ faker
79
69
  huggingface_hub
80
- pydantic
70
+ sre_yield
71
+ peft
72
+ cachetools
73
+ google-auth
74
+ pandas
75
+ Unidecode
76
+ setuptools
77
+ ollama
81
78
  flet-video
82
- logfire
79
+ httpx_retries
80
+ bokeh
81
+ pydantic
82
+ python-on-whales
83
83
 
84
84
  [api]
85
85
  fastapi
File without changes
File without changes
File without changes