fmtr.tools 1.3.76__py3-none-any.whl → 1.3.77__py3-none-any.whl

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.

@@ -1,3 +1,4 @@
1
+ from functools import cached_property
1
2
  from typing import Optional
2
3
 
3
4
  import flet as ft
@@ -127,8 +128,40 @@ class Row(ft.DataRow):
127
128
 
128
129
  def __init__(self, series):
129
130
  self.series = series
130
- cells = [self.TypeCell(series, col) for col in series.index]
131
- super().__init__(cells, color=self.row_color)
131
+ super().__init__(self.cells_controls, color=self.row_color)
132
+
133
+ @cached_property
134
+ def cells_data(self) -> dict[str, list[Cell]]:
135
+ """
136
+
137
+ Cell controls lookup
138
+
139
+ """
140
+ data = {}
141
+ for col in self.series.index:
142
+ data.setdefault(col, []).append(self.TypeCell(self.series, col))
143
+ return data
144
+
145
+ @cached_property
146
+ def cells_controls(self) -> list[Cell]:
147
+ """
148
+
149
+ Flat list of controls
150
+
151
+ """
152
+ controls = []
153
+ for cells in self.cells_data.values():
154
+ for cell in cells:
155
+ controls.append(cell)
156
+ return controls
157
+
158
+ def __getitem__(self, item) -> list[Cell]:
159
+ """
160
+
161
+ Get cells by column name
162
+
163
+ """
164
+ return self.cells_data[item]
132
165
 
133
166
  @property
134
167
  def row_color(self):
@@ -195,5 +228,38 @@ class Table(ft.DataTable):
195
228
  """
196
229
  self.df = df
197
230
  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)
231
+ super().__init__(columns=columns, rows=self.rows_controls)
232
+
233
+ @cached_property
234
+ def rows_data(self) -> dict[str, list[Row]]:
235
+ """
236
+
237
+ Row controls lookup
238
+
239
+ """
240
+ data = {}
241
+ for index, row in self.df.iterrows():
242
+ data.setdefault(index, []).append(self.TypeRow(row))
243
+ return data
244
+
245
+ @cached_property
246
+ def rows_controls(self) -> list[Row]:
247
+ """
248
+
249
+ Flat list of controls
250
+
251
+ """
252
+ controls = []
253
+ for rows in self.rows_data.values():
254
+ for row in rows:
255
+ controls.append(row)
256
+ return controls
257
+
258
+ def __getitem__(self, item) -> list[Row]:
259
+ """
260
+
261
+ Get row by index
262
+
263
+ """
264
+
265
+ return self.rows_data[item]
fmtr/tools/version CHANGED
@@ -1 +1 @@
1
- 1.3.76
1
+ 1.3.77
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.76
3
+ Version: 1.3.77
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: tabulate; extra == "all"
170
+ Requires-Dist: Unidecode; extra == "all"
171
+ Requires-Dist: pycountry; extra == "all"
172
+ Requires-Dist: flet-webview; extra == "all"
173
+ Requires-Dist: appdirs; extra == "all"
174
+ Requires-Dist: html2text; extra == "all"
175
+ Requires-Dist: logfire; extra == "all"
176
+ Requires-Dist: bokeh; extra == "all"
177
+ Requires-Dist: google-auth-oauthlib; extra == "all"
169
178
  Requires-Dist: pytest-cov; extra == "all"
170
- Requires-Dist: peft; extra == "all"
171
- Requires-Dist: openpyxl; extra == "all"
172
179
  Requires-Dist: pymupdf; extra == "all"
173
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
174
- Requires-Dist: tinynetrc; extra == "all"
175
- Requires-Dist: torchvision; extra == "all"
176
- Requires-Dist: google-auth-httplib2; extra == "all"
177
- Requires-Dist: logfire[fastapi]; extra == "all"
178
- Requires-Dist: uvicorn[standard]; extra == "all"
180
+ Requires-Dist: httpx; extra == "all"
181
+ Requires-Dist: logfire[httpx]; extra == "all"
182
+ Requires-Dist: setuptools; extra == "all"
183
+ Requires-Dist: regex; extra == "all"
184
+ Requires-Dist: python-on-whales; extra == "all"
185
+ Requires-Dist: semver; extra == "all"
179
186
  Requires-Dist: pandas; extra == "all"
187
+ Requires-Dist: playwright; extra == "all"
188
+ Requires-Dist: faker; extra == "all"
180
189
  Requires-Dist: transformers[sentencepiece]; extra == "all"
181
- Requires-Dist: google-auth-oauthlib; extra == "all"
182
- Requires-Dist: flet[all]; extra == "all"
190
+ Requires-Dist: httpx_retries; extra == "all"
191
+ Requires-Dist: odfpy; extra == "all"
192
+ Requires-Dist: logfire[fastapi]; extra == "all"
193
+ Requires-Dist: pydantic-settings; extra == "all"
194
+ Requires-Dist: pymupdf4llm; extra == "all"
195
+ Requires-Dist: ollama; extra == "all"
183
196
  Requires-Dist: pyyaml; extra == "all"
184
- Requires-Dist: tokenizers; extra == "all"
185
- Requires-Dist: tabulate; extra == "all"
197
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
186
198
  Requires-Dist: dask[bag]; extra == "all"
187
- Requires-Dist: pydantic-settings; extra == "all"
188
- Requires-Dist: httpx; extra == "all"
189
- Requires-Dist: google-api-python-client; extra == "all"
190
- Requires-Dist: flet-webview; extra == "all"
191
- Requires-Dist: yamlscript; extra == "all"
192
- Requires-Dist: semver; extra == "all"
199
+ Requires-Dist: sre_yield; extra == "all"
200
+ Requires-Dist: deepdiff; extra == "all"
201
+ Requires-Dist: flet[all]; extra == "all"
202
+ Requires-Dist: openai; extra == "all"
203
+ Requires-Dist: dnspython[doh]; extra == "all"
193
204
  Requires-Dist: json_repair; extra == "all"
194
- Requires-Dist: distributed; extra == "all"
195
- Requires-Dist: diskcache; extra == "all"
196
- Requires-Dist: contexttimer; extra == "all"
197
- Requires-Dist: ollama; extra == "all"
198
- Requires-Dist: appdirs; extra == "all"
199
- Requires-Dist: google-auth; extra == "all"
200
- Requires-Dist: pycountry; extra == "all"
201
- Requires-Dist: deepmerge; extra == "all"
202
205
  Requires-Dist: pydantic-extra-types; extra == "all"
203
- Requires-Dist: python-on-whales; extra == "all"
204
- Requires-Dist: regex; extra == "all"
206
+ Requires-Dist: pydantic; extra == "all"
205
207
  Requires-Dist: flet-video; extra == "all"
206
208
  Requires-Dist: sentence_transformers; extra == "all"
207
- Requires-Dist: openai; extra == "all"
208
- Requires-Dist: deepdiff; extra == "all"
209
- Requires-Dist: fastapi; extra == "all"
210
- Requires-Dist: bokeh; extra == "all"
211
- Requires-Dist: logfire; extra == "all"
212
- Requires-Dist: beanie[odm]; extra == "all"
213
- Requires-Dist: pymupdf4llm; extra == "all"
214
- Requires-Dist: dnspython[doh]; extra == "all"
215
- Requires-Dist: setuptools; extra == "all"
216
- Requires-Dist: playwright; extra == "all"
209
+ Requires-Dist: google-auth; extra == "all"
217
210
  Requires-Dist: filetype; extra == "all"
218
- Requires-Dist: pydantic; extra == "all"
219
- Requires-Dist: sre_yield; extra == "all"
220
- Requires-Dist: huggingface_hub; extra == "all"
221
- Requires-Dist: Unidecode; extra == "all"
222
- Requires-Dist: faker; extra == "all"
223
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
224
- Requires-Dist: odfpy; extra == "all"
225
- Requires-Dist: logfire[httpx]; extra == "all"
226
- Requires-Dist: html2text; extra == "all"
227
- Requires-Dist: httpx_retries; extra == "all"
228
211
  Requires-Dist: torchaudio; extra == "all"
212
+ Requires-Dist: deepmerge; extra == "all"
213
+ Requires-Dist: google-auth-httplib2; extra == "all"
214
+ Requires-Dist: diskcache; extra == "all"
215
+ Requires-Dist: peft; extra == "all"
216
+ Requires-Dist: fastapi; extra == "all"
217
+ Requires-Dist: yamlscript; extra == "all"
218
+ Requires-Dist: contexttimer; extra == "all"
219
+ Requires-Dist: uvicorn[standard]; extra == "all"
220
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
221
+ Requires-Dist: google-api-python-client; extra == "all"
229
222
  Requires-Dist: cachetools; extra == "all"
223
+ Requires-Dist: huggingface_hub; extra == "all"
224
+ Requires-Dist: tinynetrc; extra == "all"
225
+ Requires-Dist: openpyxl; extra == "all"
226
+ Requires-Dist: beanie[odm]; extra == "all"
227
+ Requires-Dist: distributed; extra == "all"
228
+ Requires-Dist: torchvision; extra == "all"
229
+ Requires-Dist: tokenizers; extra == "all"
230
230
  Dynamic: author
231
231
  Dynamic: author-email
232
232
  Dynamic: description
@@ -45,7 +45,7 @@ fmtr/tools/tabular_tools.py,sha256=mw6vOij1Ch-pVAyHMPtm5zj__ULZN_TKeBYOfj33wFM,1
45
45
  fmtr/tools/tokenization_tools.py,sha256=me-IBzSLyNYejLybwjO9CNB6Mj2NYfKPaOVThXyaGNg,4268
46
46
  fmtr/tools/tools.py,sha256=sLMXk8juOL8_n_D776cJ-kzjyMHqFI_fctDEjy6PIKs,1115
47
47
  fmtr/tools/unicode_tools.py,sha256=yS_9wpu8ogNoiIL7s1G_8bETFFO_YQlo4LNPv1NLDeY,52
48
- fmtr/tools/version,sha256=NsbF2x120gFOktRo0UW0oi60P8h7eq7HQIUtLO66Zy8,6
48
+ fmtr/tools/version,sha256=na4GGRTt6420NX2ci0UNn8rQr1h_nmfw9KWI9iZSYNE,6
49
49
  fmtr/tools/webhook_tools.py,sha256=q3pVJ1NCem2SrMuFcLxiWd7DibFs7Q-uGtojfXd3Qcg,380
50
50
  fmtr/tools/yaml_tools.py,sha256=Bhhyd6GQVKO72Lp8ky7bAUjIB_65Hdh0Q45SKIEe6S8,1901
51
51
  fmtr/tools/ai_tools/__init__.py,sha256=O8VRlPnnQCncg2ZZ2l_VdWLJf4jkKH6dkZFVbv6o7IM,388
@@ -67,7 +67,7 @@ fmtr/tools/entrypoints/remote_debug_test.py,sha256=wmKg9o2pQq7eqeHmaO8oviujNgtns
67
67
  fmtr/tools/entrypoints/shell_debug.py,sha256=0No3tAg9Ri4_vvSlQCUtAY-11HR0nE45i0VVtiAViwY,106
68
68
  fmtr/tools/interface_tools/__init__.py,sha256=_bgZRTqmygtYM75o6_zyQRhT_XZnDERZEHmsYVrzyxw,393
69
69
  fmtr/tools/interface_tools/context.py,sha256=VpoR_ZCndDbwS0AzIPKi1hB2QckwJU5dJqAJavF3mqk,151
70
- fmtr/tools/interface_tools/controls.py,sha256=gm8mlgrV014r8fQYHd5pVwnDIvxWiNkS8g_9sYSir5Y,3870
70
+ fmtr/tools/interface_tools/controls.py,sha256=fsSK74VPdJ9QEo2nAE5Mn0pJOzHbWyWojnQ8Rg7s_Oc,5199
71
71
  fmtr/tools/interface_tools/interface_tools.py,sha256=jSRwpdHqOTmNLndE-wFqTQdkT4z2BBdclSxmvs11FnU,4400
72
72
  fmtr/tools/path_tools/__init__.py,sha256=XrJXt7Zzo90tYUVksMlDfKkWt775zJ9OSi2NbhnqMDI,459
73
73
  fmtr/tools/path_tools/app_path_tools.py,sha256=JrJvtTDd_gkCKcZtBCDTMktsM77PZwGV_hzQX0g5GU8,1722
@@ -85,9 +85,9 @@ fmtr/tools/tests/test_path.py,sha256=AkZQa6_8BQ-VaCyL_J-iKmdf2ZaM-xFYR37Kun3k4_g
85
85
  fmtr/tools/tests/test_yaml.py,sha256=jc0TwwKu9eC0LvFGNMERdgBue591xwLxYXFbtsRwXVM,287
86
86
  fmtr/tools/version_tools/__init__.py,sha256=cjE6nO6AoVOUp3RwgTbqL9wiw8J1l2pHJOz6Gn6bxjA,326
87
87
  fmtr/tools/version_tools/version_tools.py,sha256=Hcc6yferZS1hHbugRTdiHhSNmXEEG0hjCiTTXKna-YY,1127
88
- fmtr_tools-1.3.76.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
89
- fmtr_tools-1.3.76.dist-info/METADATA,sha256=qceqhfyIUdA5X0mZdsbNpOg2f59Mk_W0zxEiulcydIs,17916
90
- fmtr_tools-1.3.76.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
91
- fmtr_tools-1.3.76.dist-info/entry_points.txt,sha256=h-r__Xh5njtFqreMLg6cGuTFS4Qh-QqJPU1HB-_BS-Q,357
92
- fmtr_tools-1.3.76.dist-info/top_level.txt,sha256=LXem9xCgNOD72tE2gRKESdiQTL902mfFkwWb6-dlwEE,5
93
- fmtr_tools-1.3.76.dist-info/RECORD,,
88
+ fmtr_tools-1.3.77.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
89
+ fmtr_tools-1.3.77.dist-info/METADATA,sha256=hyS9qbFA6ohQeSv_fb31rRWFJvtlMszJx2u3LPH9YwI,17916
90
+ fmtr_tools-1.3.77.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
91
+ fmtr_tools-1.3.77.dist-info/entry_points.txt,sha256=h-r__Xh5njtFqreMLg6cGuTFS4Qh-QqJPU1HB-_BS-Q,357
92
+ fmtr_tools-1.3.77.dist-info/top_level.txt,sha256=LXem9xCgNOD72tE2gRKESdiQTL902mfFkwWb6-dlwEE,5
93
+ fmtr_tools-1.3.77.dist-info/RECORD,,