fmtr.tools 1.3.69__tar.gz → 1.3.71__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.69 → fmtr_tools-1.3.71}/PKG-INFO +50 -50
  2. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/data_modelling_tools.py +9 -5
  3. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/datatype_tools.py +6 -2
  4. fmtr_tools-1.3.71/fmtr/tools/version +1 -0
  5. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr.tools.egg-info/PKG-INFO +50 -50
  6. fmtr_tools-1.3.69/fmtr/tools/version +0 -1
  7. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/LICENSE +0 -0
  8. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/README.md +0 -0
  9. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/__init__.py +0 -0
  10. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/ai_tools/__init__.py +0 -0
  11. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  12. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  13. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/api_tools.py +0 -0
  14. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/async_tools.py +0 -0
  15. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/augmentation_tools.py +0 -0
  16. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/caching_tools.py +0 -0
  17. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/constants.py +0 -0
  18. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/context_tools.py +0 -0
  19. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/database_tools/__init__.py +0 -0
  20. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/database_tools/document.py +0 -0
  21. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/dataclass_tools.py +0 -0
  22. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/datetime_tools.py +0 -0
  23. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/debugging_tools.py +0 -0
  24. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/dns_tools/__init__.py +0 -0
  25. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/dns_tools/client.py +0 -0
  26. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/dns_tools/dm.py +0 -0
  27. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/dns_tools/proxy.py +0 -0
  28. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/dns_tools/server.py +0 -0
  29. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/docker_tools/__init__.py +0 -0
  30. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/entrypoints/__init__.py +0 -0
  31. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  32. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/entrypoints/ep_test.py +0 -0
  33. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  34. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  35. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  36. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/environment_tools.py +0 -0
  37. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/function_tools.py +0 -0
  38. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/google_api_tools.py +0 -0
  39. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/hash_tools.py +0 -0
  40. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/hfh_tools.py +0 -0
  41. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/html_tools.py +0 -0
  42. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/http_tools.py +0 -0
  43. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/import_tools.py +0 -0
  44. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/inherit_tools.py +0 -0
  45. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/inspection_tools.py +0 -0
  46. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/interface_tools/__init__.py +0 -0
  47. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/interface_tools/context.py +0 -0
  48. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/interface_tools/controls.py +0 -0
  49. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/interface_tools/interface_tools.py +0 -0
  50. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/iterator_tools.py +0 -0
  51. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/json_fix_tools.py +0 -0
  52. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/json_tools.py +0 -0
  53. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/logging_tools.py +0 -0
  54. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/merging_tools.py +0 -0
  55. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/metric_tools.py +0 -0
  56. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/name_tools.py +0 -0
  57. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/netrc_tools.py +0 -0
  58. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/openai_tools.py +0 -0
  59. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/packaging_tools.py +0 -0
  60. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/parallel_tools.py +0 -0
  61. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/path_tools/__init__.py +0 -0
  62. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  63. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/path_tools/path_tools.py +0 -0
  64. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  65. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/pattern_tools.py +0 -0
  66. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/pdf_tools.py +0 -0
  67. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/platform_tools.py +0 -0
  68. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/process_tools.py +0 -0
  69. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/profiling_tools.py +0 -0
  70. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/random_tools.py +0 -0
  71. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/semantic_tools.py +0 -0
  72. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/settings_tools.py +0 -0
  73. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/setup_tools/__init__.py +0 -0
  74. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  75. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/spaces_tools.py +0 -0
  76. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/string_tools.py +0 -0
  77. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tabular_tools.py +0 -0
  78. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tests/__init__.py +0 -0
  79. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tests/conftest.py +0 -0
  80. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tests/helpers.py +0 -0
  81. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tests/test_datatype.py +0 -0
  82. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tests/test_environment.py +0 -0
  83. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tests/test_json.py +0 -0
  84. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tests/test_path.py +0 -0
  85. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tests/test_yaml.py +0 -0
  86. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tokenization_tools.py +0 -0
  87. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/tools.py +0 -0
  88. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/unicode_tools.py +0 -0
  89. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/version_tools/__init__.py +0 -0
  90. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/version_tools/version_tools.py +0 -0
  91. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/webhook_tools.py +0 -0
  92. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr/tools/yaml_tools.py +0 -0
  93. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  94. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  95. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr.tools.egg-info/entry_points.txt +0 -0
  96. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr.tools.egg-info/requires.txt +49 -49
  97. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/fmtr.tools.egg-info/top_level.txt +0 -0
  98. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/pyproject.toml +0 -0
  99. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/setup.cfg +0 -0
  100. {fmtr_tools-1.3.69 → fmtr_tools-1.3.71}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.69
3
+ Version: 1.3.71
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: pymupdf4llm; extra == "all"
172
- Requires-Dist: pydantic-settings; extra == "all"
173
- Requires-Dist: pydantic-extra-types; extra == "all"
171
+ Requires-Dist: regex; extra == "all"
172
+ Requires-Dist: playwright; extra == "all"
173
+ Requires-Dist: sre_yield; extra == "all"
174
+ Requires-Dist: pytest-cov; extra == "all"
174
175
  Requires-Dist: pyyaml; extra == "all"
175
- Requires-Dist: fastapi; extra == "all"
176
- Requires-Dist: uvicorn[standard]; extra == "all"
177
- Requires-Dist: Unidecode; extra == "all"
178
176
  Requires-Dist: torchvision; extra == "all"
179
- Requires-Dist: regex; extra == "all"
180
- Requires-Dist: dnspython[doh]; extra == "all"
181
177
  Requires-Dist: odfpy; extra == "all"
182
- Requires-Dist: deepmerge; extra == "all"
183
- Requires-Dist: flet-video; extra == "all"
184
- Requires-Dist: faker; extra == "all"
178
+ Requires-Dist: setuptools; extra == "all"
179
+ Requires-Dist: google-auth-oauthlib; extra == "all"
180
+ Requires-Dist: dask[bag]; extra == "all"
181
+ Requires-Dist: peft; extra == "all"
182
+ Requires-Dist: pydantic-settings; extra == "all"
183
+ Requires-Dist: ollama; extra == "all"
184
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
185
185
  Requires-Dist: tabulate; extra == "all"
186
- Requires-Dist: openpyxl; extra == "all"
187
- Requires-Dist: pycountry; extra == "all"
188
- Requires-Dist: logfire[fastapi]; extra == "all"
189
- Requires-Dist: flet-webview; extra == "all"
186
+ Requires-Dist: tinynetrc; extra == "all"
187
+ Requires-Dist: motor; extra == "all"
188
+ Requires-Dist: bokeh; extra == "all"
189
+ Requires-Dist: google-auth-httplib2; extra == "all"
190
+ Requires-Dist: dnspython[doh]; extra == "all"
190
191
  Requires-Dist: semver; extra == "all"
191
- Requires-Dist: logfire; extra == "all"
192
- Requires-Dist: contexttimer; extra == "all"
192
+ Requires-Dist: yamlscript; extra == "all"
193
+ Requires-Dist: Unidecode; extra == "all"
194
+ Requires-Dist: uvicorn[standard]; extra == "all"
195
+ Requires-Dist: pydantic-extra-types; extra == "all"
196
+ Requires-Dist: flet[all]; extra == "all"
197
+ Requires-Dist: deepmerge; extra == "all"
193
198
  Requires-Dist: torchaudio; extra == "all"
194
- Requires-Dist: appdirs; extra == "all"
195
- Requires-Dist: dask[bag]; extra == "all"
196
- Requires-Dist: huggingface_hub; extra == "all"
197
- Requires-Dist: ollama; extra == "all"
198
- Requires-Dist: beanie[odm]; extra == "all"
199
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
200
+ Requires-Dist: flet-video; extra == "all"
199
201
  Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
200
- Requires-Dist: html2text; extra == "all"
201
- Requires-Dist: setuptools; extra == "all"
202
+ Requires-Dist: distributed; extra == "all"
203
+ Requires-Dist: deepdiff; extra == "all"
204
+ Requires-Dist: google-api-python-client; extra == "all"
205
+ Requires-Dist: faker; extra == "all"
206
+ Requires-Dist: beanie[odm]; extra == "all"
202
207
  Requires-Dist: pymupdf; extra == "all"
203
- Requires-Dist: bokeh; extra == "all"
204
208
  Requires-Dist: pandas; extra == "all"
205
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
206
- Requires-Dist: flet[all]; extra == "all"
207
- Requires-Dist: httpx_retries; extra == "all"
208
- Requires-Dist: pydantic; extra == "all"
209
- Requires-Dist: motor; extra == "all"
210
- Requires-Dist: python-on-whales; extra == "all"
209
+ Requires-Dist: fastapi; extra == "all"
210
+ Requires-Dist: huggingface_hub; extra == "all"
211
+ Requires-Dist: logfire; extra == "all"
212
+ Requires-Dist: tokenizers; extra == "all"
213
+ Requires-Dist: html2text; extra == "all"
211
214
  Requires-Dist: json_repair; extra == "all"
212
- Requires-Dist: peft; extra == "all"
213
- Requires-Dist: diskcache; extra == "all"
214
- Requires-Dist: sentence_transformers; extra == "all"
215
- Requires-Dist: google-auth-oauthlib; extra == "all"
216
- Requires-Dist: transformers[sentencepiece]; extra == "all"
215
+ Requires-Dist: python-on-whales; extra == "all"
216
+ Requires-Dist: openai; extra == "all"
217
+ Requires-Dist: flet-webview; extra == "all"
218
+ Requires-Dist: openpyxl; extra == "all"
217
219
  Requires-Dist: filetype; extra == "all"
218
- Requires-Dist: distributed; extra == "all"
219
- Requires-Dist: tokenizers; extra == "all"
220
- Requires-Dist: deepdiff; extra == "all"
221
- Requires-Dist: google-api-python-client; extra == "all"
222
- Requires-Dist: cachetools; extra == "all"
223
- Requires-Dist: httpx; extra == "all"
220
+ Requires-Dist: appdirs; extra == "all"
221
+ Requires-Dist: pydantic; extra == "all"
222
+ Requires-Dist: sentence_transformers; extra == "all"
223
+ Requires-Dist: httpx_retries; extra == "all"
224
+ Requires-Dist: pymupdf4llm; extra == "all"
225
+ Requires-Dist: logfire[fastapi]; extra == "all"
224
226
  Requires-Dist: logfire[httpx]; extra == "all"
225
- Requires-Dist: openai; extra == "all"
226
- Requires-Dist: pytest-cov; extra == "all"
227
- Requires-Dist: playwright; extra == "all"
228
- Requires-Dist: sre_yield; extra == "all"
229
- Requires-Dist: tinynetrc; extra == "all"
230
- Requires-Dist: google-auth-httplib2; extra == "all"
227
+ Requires-Dist: pycountry; extra == "all"
231
228
  Requires-Dist: google-auth; extra == "all"
232
- Requires-Dist: yamlscript; extra == "all"
229
+ Requires-Dist: cachetools; extra == "all"
230
+ Requires-Dist: contexttimer; extra == "all"
231
+ Requires-Dist: diskcache; extra == "all"
232
+ Requires-Dist: httpx; 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:
@@ -1,5 +1,5 @@
1
1
  from types import UnionType, NoneType
2
- from typing import Any, get_origin, get_args
2
+ from typing import Any, get_origin, get_args, Union, Annotated
3
3
 
4
4
  from fmtr.tools.tools import Raise
5
5
 
@@ -98,5 +98,9 @@ def is_optional(annotation) -> bool:
98
98
 
99
99
  origin = get_origin(annotation)
100
100
  args = get_args(annotation)
101
- is_opt = origin is UnionType and NoneType in args
101
+
102
+ if origin is Annotated:
103
+ return is_optional(args[0])
104
+
105
+ is_opt = (origin is UnionType or origin is Union) and NoneType in args
102
106
  return is_opt
@@ -0,0 +1 @@
1
+ 1.3.71
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.69
3
+ Version: 1.3.71
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: pymupdf4llm; extra == "all"
172
- Requires-Dist: pydantic-settings; extra == "all"
173
- Requires-Dist: pydantic-extra-types; extra == "all"
171
+ Requires-Dist: regex; extra == "all"
172
+ Requires-Dist: playwright; extra == "all"
173
+ Requires-Dist: sre_yield; extra == "all"
174
+ Requires-Dist: pytest-cov; extra == "all"
174
175
  Requires-Dist: pyyaml; extra == "all"
175
- Requires-Dist: fastapi; extra == "all"
176
- Requires-Dist: uvicorn[standard]; extra == "all"
177
- Requires-Dist: Unidecode; extra == "all"
178
176
  Requires-Dist: torchvision; extra == "all"
179
- Requires-Dist: regex; extra == "all"
180
- Requires-Dist: dnspython[doh]; extra == "all"
181
177
  Requires-Dist: odfpy; extra == "all"
182
- Requires-Dist: deepmerge; extra == "all"
183
- Requires-Dist: flet-video; extra == "all"
184
- Requires-Dist: faker; extra == "all"
178
+ Requires-Dist: setuptools; extra == "all"
179
+ Requires-Dist: google-auth-oauthlib; extra == "all"
180
+ Requires-Dist: dask[bag]; extra == "all"
181
+ Requires-Dist: peft; extra == "all"
182
+ Requires-Dist: pydantic-settings; extra == "all"
183
+ Requires-Dist: ollama; extra == "all"
184
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
185
185
  Requires-Dist: tabulate; extra == "all"
186
- Requires-Dist: openpyxl; extra == "all"
187
- Requires-Dist: pycountry; extra == "all"
188
- Requires-Dist: logfire[fastapi]; extra == "all"
189
- Requires-Dist: flet-webview; extra == "all"
186
+ Requires-Dist: tinynetrc; extra == "all"
187
+ Requires-Dist: motor; extra == "all"
188
+ Requires-Dist: bokeh; extra == "all"
189
+ Requires-Dist: google-auth-httplib2; extra == "all"
190
+ Requires-Dist: dnspython[doh]; extra == "all"
190
191
  Requires-Dist: semver; extra == "all"
191
- Requires-Dist: logfire; extra == "all"
192
- Requires-Dist: contexttimer; extra == "all"
192
+ Requires-Dist: yamlscript; extra == "all"
193
+ Requires-Dist: Unidecode; extra == "all"
194
+ Requires-Dist: uvicorn[standard]; extra == "all"
195
+ Requires-Dist: pydantic-extra-types; extra == "all"
196
+ Requires-Dist: flet[all]; extra == "all"
197
+ Requires-Dist: deepmerge; extra == "all"
193
198
  Requires-Dist: torchaudio; extra == "all"
194
- Requires-Dist: appdirs; extra == "all"
195
- Requires-Dist: dask[bag]; extra == "all"
196
- Requires-Dist: huggingface_hub; extra == "all"
197
- Requires-Dist: ollama; extra == "all"
198
- Requires-Dist: beanie[odm]; extra == "all"
199
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
200
+ Requires-Dist: flet-video; extra == "all"
199
201
  Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
200
- Requires-Dist: html2text; extra == "all"
201
- Requires-Dist: setuptools; extra == "all"
202
+ Requires-Dist: distributed; extra == "all"
203
+ Requires-Dist: deepdiff; extra == "all"
204
+ Requires-Dist: google-api-python-client; extra == "all"
205
+ Requires-Dist: faker; extra == "all"
206
+ Requires-Dist: beanie[odm]; extra == "all"
202
207
  Requires-Dist: pymupdf; extra == "all"
203
- Requires-Dist: bokeh; extra == "all"
204
208
  Requires-Dist: pandas; extra == "all"
205
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
206
- Requires-Dist: flet[all]; extra == "all"
207
- Requires-Dist: httpx_retries; extra == "all"
208
- Requires-Dist: pydantic; extra == "all"
209
- Requires-Dist: motor; extra == "all"
210
- Requires-Dist: python-on-whales; extra == "all"
209
+ Requires-Dist: fastapi; extra == "all"
210
+ Requires-Dist: huggingface_hub; extra == "all"
211
+ Requires-Dist: logfire; extra == "all"
212
+ Requires-Dist: tokenizers; extra == "all"
213
+ Requires-Dist: html2text; extra == "all"
211
214
  Requires-Dist: json_repair; extra == "all"
212
- Requires-Dist: peft; extra == "all"
213
- Requires-Dist: diskcache; extra == "all"
214
- Requires-Dist: sentence_transformers; extra == "all"
215
- Requires-Dist: google-auth-oauthlib; extra == "all"
216
- Requires-Dist: transformers[sentencepiece]; extra == "all"
215
+ Requires-Dist: python-on-whales; extra == "all"
216
+ Requires-Dist: openai; extra == "all"
217
+ Requires-Dist: flet-webview; extra == "all"
218
+ Requires-Dist: openpyxl; extra == "all"
217
219
  Requires-Dist: filetype; extra == "all"
218
- Requires-Dist: distributed; extra == "all"
219
- Requires-Dist: tokenizers; extra == "all"
220
- Requires-Dist: deepdiff; extra == "all"
221
- Requires-Dist: google-api-python-client; extra == "all"
222
- Requires-Dist: cachetools; extra == "all"
223
- Requires-Dist: httpx; extra == "all"
220
+ Requires-Dist: appdirs; extra == "all"
221
+ Requires-Dist: pydantic; extra == "all"
222
+ Requires-Dist: sentence_transformers; extra == "all"
223
+ Requires-Dist: httpx_retries; extra == "all"
224
+ Requires-Dist: pymupdf4llm; extra == "all"
225
+ Requires-Dist: logfire[fastapi]; extra == "all"
224
226
  Requires-Dist: logfire[httpx]; extra == "all"
225
- Requires-Dist: openai; extra == "all"
226
- Requires-Dist: pytest-cov; extra == "all"
227
- Requires-Dist: playwright; extra == "all"
228
- Requires-Dist: sre_yield; extra == "all"
229
- Requires-Dist: tinynetrc; extra == "all"
230
- Requires-Dist: google-auth-httplib2; extra == "all"
227
+ Requires-Dist: pycountry; extra == "all"
231
228
  Requires-Dist: google-auth; extra == "all"
232
- Requires-Dist: yamlscript; extra == "all"
229
+ Requires-Dist: cachetools; extra == "all"
230
+ Requires-Dist: contexttimer; extra == "all"
231
+ Requires-Dist: diskcache; extra == "all"
232
+ Requires-Dist: httpx; extra == "all"
233
233
  Dynamic: author
234
234
  Dynamic: author-email
235
235
  Dynamic: description
@@ -1 +0,0 @@
1
- 1.3.69
File without changes
File without changes
@@ -18,68 +18,68 @@ pydantic-ai[logfire,openai]
18
18
  ollama
19
19
 
20
20
  [all]
21
- pymupdf4llm
22
- pydantic-settings
23
- pydantic-extra-types
21
+ regex
22
+ playwright
23
+ sre_yield
24
+ pytest-cov
24
25
  pyyaml
25
- fastapi
26
- uvicorn[standard]
27
- Unidecode
28
26
  torchvision
29
- regex
30
- dnspython[doh]
31
27
  odfpy
32
- deepmerge
33
- flet-video
34
- faker
28
+ setuptools
29
+ google-auth-oauthlib
30
+ dask[bag]
31
+ peft
32
+ pydantic-settings
33
+ ollama
34
+ transformers[sentencepiece]
35
35
  tabulate
36
- openpyxl
37
- pycountry
38
- logfire[fastapi]
39
- flet-webview
36
+ tinynetrc
37
+ motor
38
+ bokeh
39
+ google-auth-httplib2
40
+ dnspython[doh]
40
41
  semver
41
- logfire
42
- contexttimer
42
+ yamlscript
43
+ Unidecode
44
+ uvicorn[standard]
45
+ pydantic-extra-types
46
+ flet[all]
47
+ deepmerge
43
48
  torchaudio
44
- appdirs
45
- dask[bag]
46
- huggingface_hub
47
- ollama
48
- beanie[odm]
49
+ pydevd-pycharm~=251.25410.159
50
+ flet-video
49
51
  pydantic-ai[logfire,openai]
50
- html2text
51
- setuptools
52
+ distributed
53
+ deepdiff
54
+ google-api-python-client
55
+ faker
56
+ beanie[odm]
52
57
  pymupdf
53
- bokeh
54
58
  pandas
55
- pydevd-pycharm~=251.25410.159
56
- flet[all]
57
- httpx_retries
58
- pydantic
59
- motor
60
- python-on-whales
59
+ fastapi
60
+ huggingface_hub
61
+ logfire
62
+ tokenizers
63
+ html2text
61
64
  json_repair
62
- peft
63
- diskcache
64
- sentence_transformers
65
- google-auth-oauthlib
66
- transformers[sentencepiece]
65
+ python-on-whales
66
+ openai
67
+ flet-webview
68
+ openpyxl
67
69
  filetype
68
- distributed
69
- tokenizers
70
- deepdiff
71
- google-api-python-client
72
- cachetools
73
- httpx
70
+ appdirs
71
+ pydantic
72
+ sentence_transformers
73
+ httpx_retries
74
+ pymupdf4llm
75
+ logfire[fastapi]
74
76
  logfire[httpx]
75
- openai
76
- pytest-cov
77
- playwright
78
- sre_yield
79
- tinynetrc
80
- google-auth-httplib2
77
+ pycountry
81
78
  google-auth
82
- yamlscript
79
+ cachetools
80
+ contexttimer
81
+ diskcache
82
+ httpx
83
83
 
84
84
  [api]
85
85
  fastapi
File without changes
File without changes
File without changes