fmtr.tools 1.3.70__tar.gz → 1.3.72__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.70 → fmtr_tools-1.3.72}/PKG-INFO +50 -50
  2. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/data_modelling_tools.py +26 -17
  3. fmtr_tools-1.3.72/fmtr/tools/version +1 -0
  4. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/PKG-INFO +50 -50
  5. fmtr_tools-1.3.70/fmtr/tools/version +0 -1
  6. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/LICENSE +0 -0
  7. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/README.md +0 -0
  8. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/__init__.py +0 -0
  9. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/ai_tools/__init__.py +0 -0
  10. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  11. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  12. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/api_tools.py +0 -0
  13. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/async_tools.py +0 -0
  14. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/augmentation_tools.py +0 -0
  15. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/caching_tools.py +0 -0
  16. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/constants.py +0 -0
  17. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/context_tools.py +0 -0
  18. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/database_tools/__init__.py +0 -0
  19. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/database_tools/document.py +0 -0
  20. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dataclass_tools.py +0 -0
  21. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/datatype_tools.py +0 -0
  22. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/datetime_tools.py +0 -0
  23. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/debugging_tools.py +0 -0
  24. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/__init__.py +0 -0
  25. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/client.py +0 -0
  26. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/dm.py +0 -0
  27. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/proxy.py +0 -0
  28. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/dns_tools/server.py +0 -0
  29. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/docker_tools/__init__.py +0 -0
  30. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/__init__.py +0 -0
  31. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  32. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/ep_test.py +0 -0
  33. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  34. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  35. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  36. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/environment_tools.py +0 -0
  37. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/function_tools.py +0 -0
  38. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/google_api_tools.py +0 -0
  39. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/hash_tools.py +0 -0
  40. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/hfh_tools.py +0 -0
  41. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/html_tools.py +0 -0
  42. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/http_tools.py +0 -0
  43. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/import_tools.py +0 -0
  44. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/inherit_tools.py +0 -0
  45. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/inspection_tools.py +0 -0
  46. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/interface_tools/__init__.py +0 -0
  47. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/interface_tools/context.py +0 -0
  48. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/interface_tools/controls.py +0 -0
  49. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/interface_tools/interface_tools.py +0 -0
  50. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/iterator_tools.py +0 -0
  51. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/json_fix_tools.py +0 -0
  52. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/json_tools.py +0 -0
  53. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/logging_tools.py +0 -0
  54. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/merging_tools.py +0 -0
  55. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/metric_tools.py +0 -0
  56. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/name_tools.py +0 -0
  57. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/netrc_tools.py +0 -0
  58. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/openai_tools.py +0 -0
  59. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/packaging_tools.py +0 -0
  60. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/parallel_tools.py +0 -0
  61. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/path_tools/__init__.py +0 -0
  62. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  63. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/path_tools/path_tools.py +0 -0
  64. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  65. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/pattern_tools.py +0 -0
  66. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/pdf_tools.py +0 -0
  67. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/platform_tools.py +0 -0
  68. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/process_tools.py +0 -0
  69. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/profiling_tools.py +0 -0
  70. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/random_tools.py +0 -0
  71. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/semantic_tools.py +0 -0
  72. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/settings_tools.py +0 -0
  73. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/setup_tools/__init__.py +0 -0
  74. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  75. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/spaces_tools.py +0 -0
  76. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/string_tools.py +0 -0
  77. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tabular_tools.py +0 -0
  78. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/__init__.py +0 -0
  79. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/conftest.py +0 -0
  80. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/helpers.py +0 -0
  81. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_datatype.py +0 -0
  82. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_environment.py +0 -0
  83. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_json.py +0 -0
  84. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_path.py +0 -0
  85. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tests/test_yaml.py +0 -0
  86. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tokenization_tools.py +0 -0
  87. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/tools.py +0 -0
  88. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/unicode_tools.py +0 -0
  89. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/version_tools/__init__.py +0 -0
  90. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/version_tools/version_tools.py +0 -0
  91. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/webhook_tools.py +0 -0
  92. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr/tools/yaml_tools.py +0 -0
  93. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  94. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  95. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/entry_points.txt +0 -0
  96. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/requires.txt +49 -49
  97. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/fmtr.tools.egg-info/top_level.txt +0 -0
  98. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/pyproject.toml +0 -0
  99. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/setup.cfg +0 -0
  100. {fmtr_tools-1.3.70 → fmtr_tools-1.3.72}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.70
3
+ Version: 1.3.72
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
@@ -168,68 +168,68 @@ Provides-Extra: db-document
168
168
  Requires-Dist: beanie[odm]; extra == "db-document"
169
169
  Requires-Dist: motor; extra == "db-document"
170
170
  Provides-Extra: all
171
- Requires-Dist: html2text; extra == "all"
172
- Requires-Dist: yamlscript; extra == "all"
173
- Requires-Dist: pydantic-extra-types; extra == "all"
174
- Requires-Dist: openai; extra == "all"
175
- Requires-Dist: filetype; extra == "all"
176
- Requires-Dist: httpx_retries; extra == "all"
177
- Requires-Dist: pyyaml; extra == "all"
178
- Requires-Dist: ollama; extra == "all"
179
- Requires-Dist: uvicorn[standard]; extra == "all"
180
- Requires-Dist: json_repair; extra == "all"
181
- Requires-Dist: dnspython[doh]; extra == "all"
171
+ Requires-Dist: pytest-cov; extra == "all"
172
+ Requires-Dist: deepmerge; extra == "all"
182
173
  Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
183
- Requires-Dist: torchvision; extra == "all"
184
- Requires-Dist: diskcache; extra == "all"
185
- Requires-Dist: flet-video; extra == "all"
186
- Requires-Dist: deepdiff; extra == "all"
187
- Requires-Dist: huggingface_hub; extra == "all"
174
+ Requires-Dist: tabulate; extra == "all"
175
+ Requires-Dist: httpx; extra == "all"
176
+ Requires-Dist: playwright; extra == "all"
188
177
  Requires-Dist: pydantic; extra == "all"
189
- Requires-Dist: peft; extra == "all"
190
- Requires-Dist: beanie[odm]; extra == "all"
191
- Requires-Dist: regex; extra == "all"
192
- Requires-Dist: odfpy; extra == "all"
193
- Requires-Dist: cachetools; extra == "all"
178
+ Requires-Dist: pyyaml; extra == "all"
179
+ Requires-Dist: deepdiff; extra == "all"
180
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
181
+ Requires-Dist: logfire[fastapi]; extra == "all"
182
+ Requires-Dist: google-auth-oauthlib; extra == "all"
194
183
  Requires-Dist: openpyxl; extra == "all"
195
- Requires-Dist: pymupdf4llm; extra == "all"
196
- Requires-Dist: distributed; extra == "all"
197
- Requires-Dist: tabulate; extra == "all"
198
- Requires-Dist: flet[all]; extra == "all"
184
+ Requires-Dist: torchaudio; extra == "all"
185
+ Requires-Dist: flet-video; extra == "all"
186
+ Requires-Dist: logfire; extra == "all"
187
+ Requires-Dist: openai; extra == "all"
188
+ Requires-Dist: ollama; extra == "all"
189
+ Requires-Dist: google-auth; extra == "all"
190
+ Requires-Dist: appdirs; extra == "all"
199
191
  Requires-Dist: logfire[httpx]; extra == "all"
200
- Requires-Dist: logfire[fastapi]; extra == "all"
201
- Requires-Dist: google-auth-httplib2; extra == "all"
202
192
  Requires-Dist: bokeh; extra == "all"
203
- Requires-Dist: deepmerge; extra == "all"
204
193
  Requires-Dist: transformers[sentencepiece]; extra == "all"
205
- Requires-Dist: pymupdf; extra == "all"
206
- Requires-Dist: setuptools; extra == "all"
207
- Requires-Dist: dask[bag]; extra == "all"
208
- Requires-Dist: sentence_transformers; extra == "all"
209
194
  Requires-Dist: pydantic-settings; extra == "all"
210
195
  Requires-Dist: flet-webview; extra == "all"
211
- Requires-Dist: google-api-python-client; extra == "all"
196
+ Requires-Dist: regex; extra == "all"
197
+ Requires-Dist: pandas; extra == "all"
198
+ Requires-Dist: google-auth-httplib2; extra == "all"
212
199
  Requires-Dist: contexttimer; extra == "all"
213
- Requires-Dist: tokenizers; extra == "all"
214
- Requires-Dist: tinynetrc; extra == "all"
215
- Requires-Dist: faker; extra == "all"
216
200
  Requires-Dist: semver; extra == "all"
217
- Requires-Dist: torchaudio; extra == "all"
218
- Requires-Dist: pytest-cov; extra == "all"
219
- Requires-Dist: python-on-whales; extra == "all"
220
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
221
- Requires-Dist: motor; extra == "all"
222
- Requires-Dist: Unidecode; extra == "all"
223
201
  Requires-Dist: pycountry; extra == "all"
202
+ Requires-Dist: peft; extra == "all"
203
+ Requires-Dist: uvicorn[standard]; extra == "all"
204
+ Requires-Dist: pymupdf; extra == "all"
205
+ Requires-Dist: faker; extra == "all"
206
+ Requires-Dist: setuptools; extra == "all"
207
+ Requires-Dist: motor; extra == "all"
208
+ Requires-Dist: tokenizers; extra == "all"
209
+ Requires-Dist: diskcache; extra == "all"
210
+ Requires-Dist: huggingface_hub; extra == "all"
211
+ Requires-Dist: python-on-whales; extra == "all"
212
+ Requires-Dist: sentence_transformers; extra == "all"
213
+ Requires-Dist: flet[all]; extra == "all"
214
+ Requires-Dist: pydantic-extra-types; extra == "all"
215
+ Requires-Dist: filetype; extra == "all"
224
216
  Requires-Dist: fastapi; extra == "all"
217
+ Requires-Dist: cachetools; extra == "all"
218
+ Requires-Dist: dnspython[doh]; extra == "all"
219
+ Requires-Dist: httpx_retries; extra == "all"
220
+ Requires-Dist: dask[bag]; extra == "all"
225
221
  Requires-Dist: sre_yield; extra == "all"
226
- Requires-Dist: google-auth; extra == "all"
227
- Requires-Dist: httpx; extra == "all"
228
- Requires-Dist: playwright; extra == "all"
229
- Requires-Dist: appdirs; extra == "all"
230
- Requires-Dist: google-auth-oauthlib; extra == "all"
231
- Requires-Dist: logfire; extra == "all"
232
- Requires-Dist: pandas; extra == "all"
222
+ Requires-Dist: Unidecode; extra == "all"
223
+ Requires-Dist: torchvision; extra == "all"
224
+ Requires-Dist: html2text; extra == "all"
225
+ Requires-Dist: pymupdf4llm; extra == "all"
226
+ Requires-Dist: google-api-python-client; extra == "all"
227
+ Requires-Dist: yamlscript; extra == "all"
228
+ Requires-Dist: odfpy; extra == "all"
229
+ Requires-Dist: distributed; extra == "all"
230
+ Requires-Dist: json_repair; extra == "all"
231
+ Requires-Dist: beanie[odm]; extra == "all"
232
+ Requires-Dist: tinynetrc; extra == "all"
233
233
  Dynamic: author
234
234
  Dynamic: author-email
235
235
  Dynamic: description
@@ -5,9 +5,10 @@ from typing import ClassVar, List, Any, Dict
5
5
  from pydantic import BaseModel
6
6
  from pydantic import RootModel, ConfigDict
7
7
  from pydantic.fields import FieldInfo
8
+ from pydantic.json_schema import SkipJsonSchema
8
9
  from pydantic_core import PydanticUndefined, PydanticUndefinedType
9
10
 
10
- from fmtr.tools.datatype_tools import is_optional
11
+ from fmtr.tools.datatype_tools import is_optional, none_else
11
12
  from fmtr.tools.iterator_tools import get_class_lookup
12
13
  from fmtr.tools.string_tools import camel_to_snake
13
14
  from fmtr.tools.tools import Auto, Required, Empty
@@ -21,14 +22,14 @@ class Field(FieldInfo):
21
22
  """
22
23
  NAME = Auto
23
24
  ANNOTATION = Empty
24
- EXCLUDE = False
25
25
  DEFAULT = Auto
26
26
  FILLS = None
27
27
  DESCRIPTION = None
28
28
  TITLE = Auto
29
+ SKIP_SCHEMA = False
29
30
  CONFIG = None
30
31
 
31
- def __init__(self, annotation=Empty, default=Empty, description=None, title=None, fills=None, exclude=None, **kwargs):
32
+ def __init__(self, annotation=Empty, default=Empty, description=None, title=None, fills=None, skip_schema=None, **kwargs):
32
33
  """
33
34
 
34
35
  Infer default from type annotation, if enabled, use class/argument fills to create titles/descriptions, etc.
@@ -38,12 +39,15 @@ class Field(FieldInfo):
38
39
  fills_super = getattr(super(), 'FILLS', None)
39
40
  self.fills = (fills_super or {}) | (self.FILLS or {}) | (fills or {})
40
41
 
41
- exclude = exclude if exclude is not None else self.EXCLUDE
42
+ skip_schema = none_else(skip_schema, self.SKIP_SCHEMA)
42
43
 
43
44
  self.annotation = self.ANNOTATION if annotation is Empty else annotation
44
45
  if self.annotation is Empty:
45
46
  raise ValueError("Annotation must be specified.")
46
47
 
48
+ if skip_schema:
49
+ self.annotation = SkipJsonSchema[self.annotation]
50
+
47
51
  default = self.get_default_auto(default)
48
52
  if default is Required:
49
53
  default = PydanticUndefined
@@ -52,7 +56,7 @@ class Field(FieldInfo):
52
56
  title = self.get_title_auto(title)
53
57
  kwargs |= (self.CONFIG or {})
54
58
 
55
- super().__init__(annotation=self.annotation, default=default, title=title, description=description, exclude=exclude, **kwargs)
59
+ super().__init__(annotation=self.annotation, default=default, title=title, description=description, **kwargs)
56
60
 
57
61
  @classmethod
58
62
  def get_name_auto(cls) -> str:
@@ -220,21 +224,16 @@ class Base(BaseModel, MixinFromJson):
220
224
  setattr(cls, name, field)
221
225
  cls.__annotations__[name] = field.annotation
222
226
 
223
- def to_df(self, name_value='value'):
227
+ def to_df(self, **kwargs):
224
228
  """
225
229
 
226
- DataFrame representation with Fields as rows.
230
+ DataFrame representation of Data Model.
227
231
 
228
232
  """
233
+ from fmtr.tools import tabular
229
234
 
230
- objs = []
231
- for name in self.model_fields.keys():
232
- val = getattr(self, name)
233
- objs.append(val)
234
-
235
- df = to_df(*objs, name_value=name_value)
236
- df['id'] = list(self.model_fields.keys())
237
- df = df.set_index('id', drop=True)
235
+ data = self.model_dump(**kwargs)
236
+ df = tabular.pd.json_normalize(data, sep='_')
238
237
  return df
239
238
 
240
239
 
@@ -245,11 +244,21 @@ class Root(RootModel, MixinFromJson):
245
244
 
246
245
  """
247
246
 
248
- def to_df(self):
247
+ def to_df(self, **kwargs):
249
248
  """
250
249
 
251
250
  DataFrame representation with items as rows.
252
251
 
253
252
  """
254
253
 
255
- return to_df(*self.items)
254
+ """
255
+
256
+ DataFrame representation of Data Model.
257
+
258
+ """
259
+ from fmtr.tools import tabular
260
+
261
+ data = [item.model_dump(**kwargs) for item in self.items]
262
+ dfs = [tabular.pd.json_normalize(datum, sep='_') for datum in data]
263
+ df = tabular.pd.concat(dfs, axis=tabular.CONCAT_VERTICALLY)
264
+ return df
@@ -0,0 +1 @@
1
+ 1.3.72
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.70
3
+ Version: 1.3.72
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
@@ -168,68 +168,68 @@ Provides-Extra: db-document
168
168
  Requires-Dist: beanie[odm]; extra == "db-document"
169
169
  Requires-Dist: motor; extra == "db-document"
170
170
  Provides-Extra: all
171
- Requires-Dist: html2text; extra == "all"
172
- Requires-Dist: yamlscript; extra == "all"
173
- Requires-Dist: pydantic-extra-types; extra == "all"
174
- Requires-Dist: openai; extra == "all"
175
- Requires-Dist: filetype; extra == "all"
176
- Requires-Dist: httpx_retries; extra == "all"
177
- Requires-Dist: pyyaml; extra == "all"
178
- Requires-Dist: ollama; extra == "all"
179
- Requires-Dist: uvicorn[standard]; extra == "all"
180
- Requires-Dist: json_repair; extra == "all"
181
- Requires-Dist: dnspython[doh]; extra == "all"
171
+ Requires-Dist: pytest-cov; extra == "all"
172
+ Requires-Dist: deepmerge; extra == "all"
182
173
  Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
183
- Requires-Dist: torchvision; extra == "all"
184
- Requires-Dist: diskcache; extra == "all"
185
- Requires-Dist: flet-video; extra == "all"
186
- Requires-Dist: deepdiff; extra == "all"
187
- Requires-Dist: huggingface_hub; extra == "all"
174
+ Requires-Dist: tabulate; extra == "all"
175
+ Requires-Dist: httpx; extra == "all"
176
+ Requires-Dist: playwright; extra == "all"
188
177
  Requires-Dist: pydantic; extra == "all"
189
- Requires-Dist: peft; extra == "all"
190
- Requires-Dist: beanie[odm]; extra == "all"
191
- Requires-Dist: regex; extra == "all"
192
- Requires-Dist: odfpy; extra == "all"
193
- Requires-Dist: cachetools; extra == "all"
178
+ Requires-Dist: pyyaml; extra == "all"
179
+ Requires-Dist: deepdiff; extra == "all"
180
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
181
+ Requires-Dist: logfire[fastapi]; extra == "all"
182
+ Requires-Dist: google-auth-oauthlib; extra == "all"
194
183
  Requires-Dist: openpyxl; extra == "all"
195
- Requires-Dist: pymupdf4llm; extra == "all"
196
- Requires-Dist: distributed; extra == "all"
197
- Requires-Dist: tabulate; extra == "all"
198
- Requires-Dist: flet[all]; extra == "all"
184
+ Requires-Dist: torchaudio; extra == "all"
185
+ Requires-Dist: flet-video; extra == "all"
186
+ Requires-Dist: logfire; extra == "all"
187
+ Requires-Dist: openai; extra == "all"
188
+ Requires-Dist: ollama; extra == "all"
189
+ Requires-Dist: google-auth; extra == "all"
190
+ Requires-Dist: appdirs; extra == "all"
199
191
  Requires-Dist: logfire[httpx]; extra == "all"
200
- Requires-Dist: logfire[fastapi]; extra == "all"
201
- Requires-Dist: google-auth-httplib2; extra == "all"
202
192
  Requires-Dist: bokeh; extra == "all"
203
- Requires-Dist: deepmerge; extra == "all"
204
193
  Requires-Dist: transformers[sentencepiece]; extra == "all"
205
- Requires-Dist: pymupdf; extra == "all"
206
- Requires-Dist: setuptools; extra == "all"
207
- Requires-Dist: dask[bag]; extra == "all"
208
- Requires-Dist: sentence_transformers; extra == "all"
209
194
  Requires-Dist: pydantic-settings; extra == "all"
210
195
  Requires-Dist: flet-webview; extra == "all"
211
- Requires-Dist: google-api-python-client; extra == "all"
196
+ Requires-Dist: regex; extra == "all"
197
+ Requires-Dist: pandas; extra == "all"
198
+ Requires-Dist: google-auth-httplib2; extra == "all"
212
199
  Requires-Dist: contexttimer; extra == "all"
213
- Requires-Dist: tokenizers; extra == "all"
214
- Requires-Dist: tinynetrc; extra == "all"
215
- Requires-Dist: faker; extra == "all"
216
200
  Requires-Dist: semver; extra == "all"
217
- Requires-Dist: torchaudio; extra == "all"
218
- Requires-Dist: pytest-cov; extra == "all"
219
- Requires-Dist: python-on-whales; extra == "all"
220
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
221
- Requires-Dist: motor; extra == "all"
222
- Requires-Dist: Unidecode; extra == "all"
223
201
  Requires-Dist: pycountry; extra == "all"
202
+ Requires-Dist: peft; extra == "all"
203
+ Requires-Dist: uvicorn[standard]; extra == "all"
204
+ Requires-Dist: pymupdf; extra == "all"
205
+ Requires-Dist: faker; extra == "all"
206
+ Requires-Dist: setuptools; extra == "all"
207
+ Requires-Dist: motor; extra == "all"
208
+ Requires-Dist: tokenizers; extra == "all"
209
+ Requires-Dist: diskcache; extra == "all"
210
+ Requires-Dist: huggingface_hub; extra == "all"
211
+ Requires-Dist: python-on-whales; extra == "all"
212
+ Requires-Dist: sentence_transformers; extra == "all"
213
+ Requires-Dist: flet[all]; extra == "all"
214
+ Requires-Dist: pydantic-extra-types; extra == "all"
215
+ Requires-Dist: filetype; extra == "all"
224
216
  Requires-Dist: fastapi; extra == "all"
217
+ Requires-Dist: cachetools; extra == "all"
218
+ Requires-Dist: dnspython[doh]; extra == "all"
219
+ Requires-Dist: httpx_retries; extra == "all"
220
+ Requires-Dist: dask[bag]; extra == "all"
225
221
  Requires-Dist: sre_yield; extra == "all"
226
- Requires-Dist: google-auth; extra == "all"
227
- Requires-Dist: httpx; extra == "all"
228
- Requires-Dist: playwright; extra == "all"
229
- Requires-Dist: appdirs; extra == "all"
230
- Requires-Dist: google-auth-oauthlib; extra == "all"
231
- Requires-Dist: logfire; extra == "all"
232
- Requires-Dist: pandas; extra == "all"
222
+ Requires-Dist: Unidecode; extra == "all"
223
+ Requires-Dist: torchvision; extra == "all"
224
+ Requires-Dist: html2text; extra == "all"
225
+ Requires-Dist: pymupdf4llm; extra == "all"
226
+ Requires-Dist: google-api-python-client; extra == "all"
227
+ Requires-Dist: yamlscript; extra == "all"
228
+ Requires-Dist: odfpy; extra == "all"
229
+ Requires-Dist: distributed; extra == "all"
230
+ Requires-Dist: json_repair; extra == "all"
231
+ Requires-Dist: beanie[odm]; extra == "all"
232
+ Requires-Dist: tinynetrc; extra == "all"
233
233
  Dynamic: author
234
234
  Dynamic: author-email
235
235
  Dynamic: description
@@ -1 +0,0 @@
1
- 1.3.70
File without changes
File without changes
@@ -18,68 +18,68 @@ pydantic-ai[logfire,openai]
18
18
  ollama
19
19
 
20
20
  [all]
21
- html2text
22
- yamlscript
23
- pydantic-extra-types
24
- openai
25
- filetype
26
- httpx_retries
27
- pyyaml
28
- ollama
29
- uvicorn[standard]
30
- json_repair
31
- dnspython[doh]
21
+ pytest-cov
22
+ deepmerge
32
23
  pydantic-ai[logfire,openai]
33
- torchvision
34
- diskcache
35
- flet-video
36
- deepdiff
37
- huggingface_hub
24
+ tabulate
25
+ httpx
26
+ playwright
38
27
  pydantic
39
- peft
40
- beanie[odm]
41
- regex
42
- odfpy
43
- cachetools
28
+ pyyaml
29
+ deepdiff
30
+ pydevd-pycharm~=251.25410.159
31
+ logfire[fastapi]
32
+ google-auth-oauthlib
44
33
  openpyxl
45
- pymupdf4llm
46
- distributed
47
- tabulate
48
- flet[all]
34
+ torchaudio
35
+ flet-video
36
+ logfire
37
+ openai
38
+ ollama
39
+ google-auth
40
+ appdirs
49
41
  logfire[httpx]
50
- logfire[fastapi]
51
- google-auth-httplib2
52
42
  bokeh
53
- deepmerge
54
43
  transformers[sentencepiece]
55
- pymupdf
56
- setuptools
57
- dask[bag]
58
- sentence_transformers
59
44
  pydantic-settings
60
45
  flet-webview
61
- google-api-python-client
46
+ regex
47
+ pandas
48
+ google-auth-httplib2
62
49
  contexttimer
63
- tokenizers
64
- tinynetrc
65
- faker
66
50
  semver
67
- torchaudio
68
- pytest-cov
69
- python-on-whales
70
- pydevd-pycharm~=251.25410.159
71
- motor
72
- Unidecode
73
51
  pycountry
52
+ peft
53
+ uvicorn[standard]
54
+ pymupdf
55
+ faker
56
+ setuptools
57
+ motor
58
+ tokenizers
59
+ diskcache
60
+ huggingface_hub
61
+ python-on-whales
62
+ sentence_transformers
63
+ flet[all]
64
+ pydantic-extra-types
65
+ filetype
74
66
  fastapi
67
+ cachetools
68
+ dnspython[doh]
69
+ httpx_retries
70
+ dask[bag]
75
71
  sre_yield
76
- google-auth
77
- httpx
78
- playwright
79
- appdirs
80
- google-auth-oauthlib
81
- logfire
82
- pandas
72
+ Unidecode
73
+ torchvision
74
+ html2text
75
+ pymupdf4llm
76
+ google-api-python-client
77
+ yamlscript
78
+ odfpy
79
+ distributed
80
+ json_repair
81
+ beanie[odm]
82
+ tinynetrc
83
83
 
84
84
  [api]
85
85
  fastapi
File without changes
File without changes
File without changes