fmtr.tools 1.3.40__tar.gz → 1.3.42__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 (99) hide show
  1. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/PKG-INFO +43 -44
  2. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/__init__.py +29 -28
  3. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/ai_tools/__init__.py +2 -2
  4. fmtr_tools-1.3.42/fmtr/tools/datetime_tools.py +5 -0
  5. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/dns_tools/__init__.py +1 -1
  6. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/interface_tools/__init__.py +1 -1
  7. fmtr_tools-1.3.42/fmtr/tools/interface_tools/context.py +13 -0
  8. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/interface_tools/interface_tools.py +7 -4
  9. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/path_tools/__init__.py +2 -2
  10. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/setup_tools/__init__.py +1 -1
  11. fmtr_tools-1.3.42/fmtr/tools/version +1 -0
  12. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/version_tools/__init__.py +1 -1
  13. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr.tools.egg-info/PKG-INFO +43 -44
  14. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr.tools.egg-info/SOURCES.txt +2 -0
  15. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr.tools.egg-info/requires.txt +42 -43
  16. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/setup.py +1 -1
  17. fmtr_tools-1.3.40/fmtr/tools/interface_tools/context.py +0 -12
  18. fmtr_tools-1.3.40/fmtr/tools/version +0 -1
  19. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/LICENSE +0 -0
  20. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/README.md +0 -0
  21. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  22. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  23. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/api_tools.py +0 -0
  24. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/async_tools.py +0 -0
  25. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/augmentation_tools.py +0 -0
  26. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/caching_tools.py +0 -0
  27. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/constants.py +0 -0
  28. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/context_tools.py +0 -0
  29. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/data_modelling_tools.py +0 -0
  30. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/dataclass_tools.py +0 -0
  31. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/datatype_tools.py +0 -0
  32. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/debugging_tools.py +0 -0
  33. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/dns_tools/client.py +0 -0
  34. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/dns_tools/dm.py +0 -0
  35. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/dns_tools/proxy.py +0 -0
  36. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/dns_tools/server.py +0 -0
  37. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/docker_tools.py +0 -0
  38. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/entrypoints/__init__.py +0 -0
  39. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  40. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/entrypoints/ep_test.py +0 -0
  41. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  42. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  43. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  44. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/environment_tools.py +0 -0
  45. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/function_tools.py +0 -0
  46. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/google_api_tools.py +0 -0
  47. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/hash_tools.py +0 -0
  48. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/hfh_tools.py +0 -0
  49. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/html_tools.py +0 -0
  50. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/http_tools.py +0 -0
  51. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/import_tools.py +0 -0
  52. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/inherit_tools.py +0 -0
  53. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/inspection_tools.py +0 -0
  54. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/interface_tools/controls.py +0 -0
  55. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/iterator_tools.py +0 -0
  56. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/json_fix_tools.py +0 -0
  57. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/json_tools.py +0 -0
  58. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/logging_tools.py +0 -0
  59. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/merging_tools.py +0 -0
  60. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/metric_tools.py +0 -0
  61. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/name_tools.py +0 -0
  62. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/netrc_tools.py +0 -0
  63. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/openai_tools.py +0 -0
  64. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/packaging_tools.py +0 -0
  65. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/parallel_tools.py +0 -0
  66. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  67. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/path_tools/path_tools.py +0 -0
  68. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  69. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/pattern_tools.py +0 -0
  70. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/pdf_tools.py +0 -0
  71. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/platform_tools.py +0 -0
  72. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/process_tools.py +0 -0
  73. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/profiling_tools.py +0 -0
  74. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/random_tools.py +0 -0
  75. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/semantic_tools.py +0 -0
  76. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/settings_tools.py +0 -0
  77. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  78. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/spaces_tools.py +0 -0
  79. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/string_tools.py +0 -0
  80. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tabular_tools.py +0 -0
  81. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tests/__init__.py +0 -0
  82. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tests/conftest.py +0 -0
  83. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tests/helpers.py +0 -0
  84. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tests/test_datatype.py +0 -0
  85. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tests/test_environment.py +0 -0
  86. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tests/test_json.py +0 -0
  87. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tests/test_path.py +0 -0
  88. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tests/test_yaml.py +0 -0
  89. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tokenization_tools.py +0 -0
  90. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/tools.py +0 -0
  91. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/unicode_tools.py +0 -0
  92. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/version_tools/version_tools.py +0 -0
  93. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/webhook_tools.py +0 -0
  94. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr/tools/yaml_tools.py +0 -0
  95. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  96. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr.tools.egg-info/entry_points.txt +0 -0
  97. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/fmtr.tools.egg-info/top_level.txt +0 -0
  98. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/pyproject.toml +0 -0
  99. {fmtr_tools-1.3.40 → fmtr_tools-1.3.42}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.40
3
+ Version: 1.3.42
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
@@ -86,7 +86,6 @@ Provides-Extra: interface
86
86
  Requires-Dist: flet[all]; extra == "interface"
87
87
  Requires-Dist: flet-video; extra == "interface"
88
88
  Requires-Dist: flet-webview; extra == "interface"
89
- Requires-Dist: pydantic; extra == "interface"
90
89
  Provides-Extra: google-api
91
90
  Requires-Dist: google-auth; extra == "google-api"
92
91
  Requires-Dist: google-auth-oauthlib; extra == "google-api"
@@ -133,62 +132,62 @@ Requires-Dist: logfire[httpx]; extra == "webhook"
133
132
  Provides-Extra: browsers
134
133
  Requires-Dist: playwright; extra == "browsers"
135
134
  Provides-Extra: all
136
- Requires-Dist: sentence_transformers; extra == "all"
137
- Requires-Dist: google-auth; extra == "all"
138
135
  Requires-Dist: flet[all]; extra == "all"
139
- Requires-Dist: html2text; extra == "all"
136
+ Requires-Dist: pymupdf; extra == "all"
137
+ Requires-Dist: appdirs; extra == "all"
138
+ Requires-Dist: bokeh; extra == "all"
140
139
  Requires-Dist: ollama; extra == "all"
141
- Requires-Dist: google-auth-oauthlib; extra == "all"
142
- Requires-Dist: docker; extra == "all"
143
- Requires-Dist: pytest-cov; extra == "all"
140
+ Requires-Dist: pymupdf4llm; extra == "all"
141
+ Requires-Dist: logfire[fastapi]; extra == "all"
144
142
  Requires-Dist: pandas; extra == "all"
145
- Requires-Dist: openpyxl; extra == "all"
146
- Requires-Dist: tokenizers; extra == "all"
147
- Requires-Dist: peft; extra == "all"
148
- Requires-Dist: google-api-python-client; extra == "all"
143
+ Requires-Dist: pydantic; extra == "all"
144
+ Requires-Dist: pytest-cov; extra == "all"
149
145
  Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
150
- Requires-Dist: transformers[sentencepiece]; extra == "all"
151
- Requires-Dist: google-auth-httplib2; extra == "all"
152
- Requires-Dist: Unidecode; extra == "all"
146
+ Requires-Dist: cachetools; extra == "all"
147
+ Requires-Dist: httpx; extra == "all"
148
+ Requires-Dist: tinynetrc; extra == "all"
153
149
  Requires-Dist: tabulate; extra == "all"
154
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
155
- Requires-Dist: dnspython[doh]; extra == "all"
156
- Requires-Dist: pydantic-settings; extra == "all"
157
- Requires-Dist: fastapi; extra == "all"
158
- Requires-Dist: json_repair; extra == "all"
159
- Requires-Dist: pymupdf4llm; extra == "all"
160
- Requires-Dist: pymupdf; extra == "all"
150
+ Requires-Dist: google-api-python-client; extra == "all"
151
+ Requires-Dist: contexttimer; extra == "all"
152
+ Requires-Dist: flet-webview; extra == "all"
153
+ Requires-Dist: torchvision; extra == "all"
154
+ Requires-Dist: html2text; extra == "all"
155
+ Requires-Dist: setuptools; extra == "all"
161
156
  Requires-Dist: logfire[httpx]; extra == "all"
162
- Requires-Dist: flet-video; extra == "all"
157
+ Requires-Dist: semver; extra == "all"
163
158
  Requires-Dist: httpx_retries; extra == "all"
159
+ Requires-Dist: huggingface_hub; extra == "all"
160
+ Requires-Dist: peft; extra == "all"
161
+ Requires-Dist: tokenizers; extra == "all"
162
+ Requires-Dist: sentence_transformers; extra == "all"
163
+ Requires-Dist: yamlscript; extra == "all"
164
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
165
+ Requires-Dist: filetype; extra == "all"
164
166
  Requires-Dist: deepmerge; extra == "all"
165
167
  Requires-Dist: logfire; extra == "all"
166
168
  Requires-Dist: distributed; extra == "all"
167
- Requires-Dist: playwright; extra == "all"
168
- Requires-Dist: pydantic; extra == "all"
169
- Requires-Dist: uvicorn[standard]; extra == "all"
170
- Requires-Dist: cachetools; extra == "all"
171
- Requires-Dist: pyyaml; extra == "all"
172
- Requires-Dist: bokeh; extra == "all"
169
+ Requires-Dist: google-auth-httplib2; extra == "all"
173
170
  Requires-Dist: openai; extra == "all"
174
- Requires-Dist: tinynetrc; extra == "all"
175
- Requires-Dist: huggingface_hub; extra == "all"
176
- Requires-Dist: appdirs; extra == "all"
177
- Requires-Dist: flet-webview; extra == "all"
178
- Requires-Dist: yamlscript; extra == "all"
179
- Requires-Dist: diskcache; extra == "all"
171
+ Requires-Dist: google-auth; extra == "all"
172
+ Requires-Dist: Unidecode; extra == "all"
173
+ Requires-Dist: google-auth-oauthlib; extra == "all"
174
+ Requires-Dist: dnspython[doh]; extra == "all"
175
+ Requires-Dist: pyyaml; extra == "all"
176
+ Requires-Dist: regex; extra == "all"
180
177
  Requires-Dist: sre_yield; extra == "all"
181
- Requires-Dist: semver; extra == "all"
178
+ Requires-Dist: docker; extra == "all"
179
+ Requires-Dist: json_repair; extra == "all"
180
+ Requires-Dist: diskcache; extra == "all"
181
+ Requires-Dist: playwright; extra == "all"
182
+ Requires-Dist: fastapi; extra == "all"
183
+ Requires-Dist: dask[bag]; extra == "all"
184
+ Requires-Dist: uvicorn[standard]; extra == "all"
185
+ Requires-Dist: flet-video; extra == "all"
182
186
  Requires-Dist: faker; extra == "all"
183
- Requires-Dist: contexttimer; extra == "all"
184
- Requires-Dist: setuptools; extra == "all"
185
- Requires-Dist: torchvision; extra == "all"
186
- Requires-Dist: logfire[fastapi]; extra == "all"
187
- Requires-Dist: regex; extra == "all"
187
+ Requires-Dist: pydantic-settings; extra == "all"
188
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
189
+ Requires-Dist: openpyxl; extra == "all"
188
190
  Requires-Dist: torchaudio; extra == "all"
189
- Requires-Dist: dask[bag]; extra == "all"
190
- Requires-Dist: httpx; extra == "all"
191
- Requires-Dist: filetype; extra == "all"
192
191
  Dynamic: author
193
192
  Dynamic: author-email
194
193
  Dynamic: description
@@ -18,6 +18,7 @@ import fmtr.tools.random_tools as random
18
18
  import fmtr.tools.setup_tools as setup
19
19
  import fmtr.tools.string_tools as string
20
20
  from fmtr.tools import ai_tools as ai
21
+ from fmtr.tools import datetime_tools as dt
21
22
  from fmtr.tools import dns_tools as dns
22
23
  from fmtr.tools import interface_tools as interface
23
24
  from fmtr.tools import version_tools as version
@@ -30,147 +31,147 @@ from fmtr.tools.setup_tools import Setup, SetupPaths, Dependencies, Tools
30
31
 
31
32
  try:
32
33
  from fmtr.tools import augmentation_tools as augmentation
33
- except ImportError as exception:
34
+ except ModuleNotFoundError as exception:
34
35
  augmentation = MissingExtraMockModule('augmentation', exception)
35
36
 
36
37
  try:
37
38
  from fmtr.tools import yaml_tools as yaml
38
- except ImportError as exception:
39
+ except ModuleNotFoundError as exception:
39
40
  yaml = MissingExtraMockModule('yaml', exception)
40
41
 
41
42
  try:
42
43
  from fmtr.tools import docker_tools as docker
43
44
  from fmtr.tools.docker_tools import Container
44
- except ImportError as exception:
45
+ except ModuleNotFoundError as exception:
45
46
  docker = Container = MissingExtraMockModule('docker.api', exception)
46
47
 
47
48
  try:
48
49
  from fmtr.tools import parallel_tools as parallel
49
- except ImportError as exception:
50
+ except ModuleNotFoundError as exception:
50
51
  parallel = MissingExtraMockModule('parallel', exception)
51
52
 
52
53
  try:
53
54
  from fmtr.tools import profiling_tools as profiling
54
55
  from fmtr.tools.profiling_tools import Timer
55
- except ImportError as exception:
56
+ except ModuleNotFoundError as exception:
56
57
  profiling = Timer = MissingExtraMockModule('profiling', exception)
57
58
 
58
59
  try:
59
60
  import fmtr.tools.process_tools as process
60
61
  from fmtr.tools.process_tools import ContextProcess
61
- except ImportError as exception:
62
+ except ModuleNotFoundError as exception:
62
63
  process = ContextProcess = MissingExtraMockModule('process', exception)
63
64
 
64
65
  try:
65
66
  from fmtr.tools import tokenization_tools as tokenization
66
- except ImportError as exception:
67
+ except ModuleNotFoundError as exception:
67
68
  tokenization = MissingExtraMockModule('tokenization', exception)
68
69
 
69
70
  try:
70
71
  from fmtr.tools import unicode_tools as unicode
71
- except ImportError as exception:
72
+ except ModuleNotFoundError as exception:
72
73
  unicode = MissingExtraMockModule('unicode', exception)
73
74
 
74
75
  try:
75
76
  from fmtr.tools import netrc_tools as netrc
76
- except ImportError as exception:
77
+ except ModuleNotFoundError as exception:
77
78
  netrc = MissingExtraMockModule('netrc', exception)
78
79
 
79
80
  try:
80
81
  from fmtr.tools import spaces_tools as spaces
81
- except ImportError as exception:
82
+ except ModuleNotFoundError as exception:
82
83
  spaces = MissingExtraMockModule('spaces', exception)
83
84
 
84
85
  try:
85
86
  from fmtr.tools import hfh_tools as hfh
86
- except ImportError as exception:
87
+ except ModuleNotFoundError as exception:
87
88
  hfh = MissingExtraMockModule('hfh', exception)
88
89
 
89
90
  try:
90
91
  from fmtr.tools import merging_tools as merging
91
92
  from fmtr.tools.merging_tools import merge
92
- except ImportError as exception:
93
+ except ModuleNotFoundError as exception:
93
94
  merging = merge = MissingExtraMockModule('merging', exception)
94
95
 
95
96
  try:
96
97
  from fmtr.tools import api_tools as api
97
- except ImportError as exception:
98
+ except ModuleNotFoundError as exception:
98
99
  api = MissingExtraMockModule('api', exception)
99
100
 
100
101
  try:
101
102
  from fmtr.tools import data_modelling_tools as dm
102
- except ImportError as exception:
103
+ except ModuleNotFoundError as exception:
103
104
  dm = MissingExtraMockModule('dm', exception)
104
105
 
105
106
  try:
106
107
  from fmtr.tools import json_fix_tools as json_fix
107
- except ImportError as exception:
108
+ except ModuleNotFoundError as exception:
108
109
  json_fix = MissingExtraMockModule('json_fix', exception)
109
110
 
110
111
  try:
111
112
  from fmtr.tools import semantic_tools as semantic
112
- except ImportError as exception:
113
+ except ModuleNotFoundError as exception:
113
114
  semantic = MissingExtraMockModule('semantic', exception)
114
115
 
115
116
  try:
116
117
  from fmtr.tools import metric_tools as metric
117
- except ImportError as exception:
118
+ except ModuleNotFoundError as exception:
118
119
  metric = MissingExtraMockModule('metric', exception)
119
120
 
120
121
  try:
121
122
  from fmtr.tools import html_tools as html
122
- except ImportError as exception:
123
+ except ModuleNotFoundError as exception:
123
124
  html = MissingExtraMockModule('html', exception)
124
125
 
125
126
  try:
126
127
  from fmtr.tools import openai_tools as openai
127
- except ImportError as exception:
128
+ except ModuleNotFoundError as exception:
128
129
  openai = MissingExtraMockModule('openai', exception)
129
130
 
130
131
  try:
131
132
  from fmtr.tools import google_api_tools as google_api
132
- except ImportError as exception:
133
+ except ModuleNotFoundError as exception:
133
134
  google_api = MissingExtraMockModule('google.api', exception)
134
135
 
135
136
  try:
136
137
  from fmtr.tools import caching_tools as caching
137
- except ImportError as exception:
138
+ except ModuleNotFoundError as exception:
138
139
  caching = MissingExtraMockModule('caching', exception)
139
140
 
140
141
  try:
141
142
  from fmtr.tools import pdf_tools as pdf
142
- except ImportError as exception:
143
+ except ModuleNotFoundError as exception:
143
144
  pdf = MissingExtraMockModule('pdf', exception)
144
145
 
145
146
  try:
146
147
  from fmtr.tools import tabular_tools as tabular
147
- except ImportError as exception:
148
+ except ModuleNotFoundError as exception:
148
149
  tabular = MissingExtraMockModule('tabular', exception)
149
150
 
150
151
  try:
151
152
  from fmtr.tools import debugging_tools as debug
152
- except ImportError as exception:
153
+ except ModuleNotFoundError as exception:
153
154
  debug = MissingExtraMockModule('debug', exception)
154
155
 
155
156
  try:
156
157
  from fmtr.tools import settings_tools as sets
157
- except ImportError as exception:
158
+ except ModuleNotFoundError as exception:
158
159
  sets = MissingExtraMockModule('sets', exception)
159
160
 
160
161
  try:
161
162
  from fmtr.tools import pattern_tools as patterns
162
- except ImportError as exception:
163
+ except ModuleNotFoundError as exception:
163
164
  patterns = MissingExtraMockModule('patterns', exception)
164
165
 
165
166
  try:
166
167
  from fmtr.tools import http_tools as http
167
168
  from fmtr.tools.http_tools import Client
168
- except ImportError as exception:
169
+ except ModuleNotFoundError as exception:
169
170
  http = Client = MissingExtraMockModule('http', exception)
170
171
 
171
172
  try:
172
173
  from fmtr.tools import webhook_tools as webhook
173
- except ImportError as exception:
174
+ except ModuleNotFoundError as exception:
174
175
  webhook = MissingExtraMockModule('webhook', exception)
175
176
 
176
177
 
@@ -2,10 +2,10 @@ from fmtr.tools.import_tools import MissingExtraMockModule
2
2
 
3
3
  try:
4
4
  from fmtr.tools.ai_tools import inference_tools as infer
5
- except ImportError as exception:
5
+ except ModuleNotFoundError as exception:
6
6
  infer = MissingExtraMockModule('ai', exception)
7
7
 
8
8
  try:
9
9
  from fmtr.tools.ai_tools import agentic_tools as agentic
10
- except ImportError as exception:
10
+ except ModuleNotFoundError as exception:
11
11
  agentic = MissingExtraMockModule('ai.client', exception)
@@ -0,0 +1,5 @@
1
+ from datetime import datetime, timezone
2
+
3
+
4
+ def now():
5
+ return datetime.now(tz=timezone.utc)
@@ -3,5 +3,5 @@ from fmtr.tools.import_tools import MissingExtraMockModule
3
3
  try:
4
4
  from fmtr.tools.dns_tools import server, client, dm, proxy
5
5
  import dns
6
- except ImportError as exception:
6
+ except ModuleNotFoundError as exception:
7
7
  dns = server = client = dm = proxy = MissingExtraMockModule('dns', exception)
@@ -4,5 +4,5 @@ try:
4
4
  from fmtr.tools.interface_tools.interface_tools import Interface, update, progress
5
5
  from fmtr.tools.interface_tools import controls
6
6
  from fmtr.tools.interface_tools.context import Context
7
- except ImportError as exception:
7
+ except ModuleNotFoundError as exception:
8
8
  Interface = update = progress = controls = MissingExtraMockModule('interface', exception)
@@ -0,0 +1,13 @@
1
+ from dataclasses import dataclass
2
+
3
+ from flet.core.page import Page
4
+
5
+
6
+ @dataclass
7
+ class Context:
8
+ """
9
+
10
+ Base context class
11
+
12
+ """
13
+ page: Page
@@ -163,17 +163,20 @@ class Interface(Generic[T], ft.Column):
163
163
  )
164
164
  return theme
165
165
 
166
- class Test(Interface):
166
+
167
+ class Test(Interface[Context]):
167
168
  """
168
169
 
169
- Simple test interface.
170
+ Simple test interface, showing typing example.
170
171
 
171
172
  """
173
+ TypeContext: Type[Context] = Context
174
+
172
175
  TITLE = 'Test Interface'
173
176
 
174
- def __init__(self):
177
+ def __init__(self, context: Context):
175
178
  controls = [ft.Text(self.TITLE)]
176
- super().__init__(controls=controls)
179
+ super().__init__(context=context, controls=controls)
177
180
 
178
181
  if __name__ == "__main__":
179
182
  Test.launch()
@@ -3,10 +3,10 @@ from fmtr.tools.path_tools.path_tools import Path, PackagePaths
3
3
 
4
4
  try:
5
5
  from fmtr.tools.path_tools.app_path_tools import AppPaths
6
- except ImportError as exception:
6
+ except ModuleNotFoundError as exception:
7
7
  AppPaths = MissingExtraMockModule('path.app', exception)
8
8
 
9
9
  try:
10
10
  from fmtr.tools.path_tools.type_path_tools import guess
11
- except ImportError as exception:
11
+ except ModuleNotFoundError as exception:
12
12
  guess = MissingExtraMockModule('path.type', exception)
@@ -4,5 +4,5 @@ from fmtr.tools.setup_tools.setup_tools import Setup, SetupPaths, Dependencies,
4
4
 
5
5
  try:
6
6
  from setuptools import find_namespace_packages, find_packages, setup as setup_setuptools
7
- except ImportError as exception:
7
+ except ModuleNotFoundError as exception:
8
8
  find_namespace_packages = find_packages = setup_setuptools = MissingExtraMockModule('setup', exception)
@@ -0,0 +1 @@
1
+ 1.3.42
@@ -8,5 +8,5 @@ try:
8
8
  semver = semver
9
9
  parse = semver.VersionInfo.parse
10
10
 
11
- except ImportError as exception:
11
+ except ModuleNotFoundError as exception:
12
12
  semver = parse = MissingExtraMockModule('version.dev', exception)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.40
3
+ Version: 1.3.42
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
@@ -86,7 +86,6 @@ Provides-Extra: interface
86
86
  Requires-Dist: flet[all]; extra == "interface"
87
87
  Requires-Dist: flet-video; extra == "interface"
88
88
  Requires-Dist: flet-webview; extra == "interface"
89
- Requires-Dist: pydantic; extra == "interface"
90
89
  Provides-Extra: google-api
91
90
  Requires-Dist: google-auth; extra == "google-api"
92
91
  Requires-Dist: google-auth-oauthlib; extra == "google-api"
@@ -133,62 +132,62 @@ Requires-Dist: logfire[httpx]; extra == "webhook"
133
132
  Provides-Extra: browsers
134
133
  Requires-Dist: playwright; extra == "browsers"
135
134
  Provides-Extra: all
136
- Requires-Dist: sentence_transformers; extra == "all"
137
- Requires-Dist: google-auth; extra == "all"
138
135
  Requires-Dist: flet[all]; extra == "all"
139
- Requires-Dist: html2text; extra == "all"
136
+ Requires-Dist: pymupdf; extra == "all"
137
+ Requires-Dist: appdirs; extra == "all"
138
+ Requires-Dist: bokeh; extra == "all"
140
139
  Requires-Dist: ollama; extra == "all"
141
- Requires-Dist: google-auth-oauthlib; extra == "all"
142
- Requires-Dist: docker; extra == "all"
143
- Requires-Dist: pytest-cov; extra == "all"
140
+ Requires-Dist: pymupdf4llm; extra == "all"
141
+ Requires-Dist: logfire[fastapi]; extra == "all"
144
142
  Requires-Dist: pandas; extra == "all"
145
- Requires-Dist: openpyxl; extra == "all"
146
- Requires-Dist: tokenizers; extra == "all"
147
- Requires-Dist: peft; extra == "all"
148
- Requires-Dist: google-api-python-client; extra == "all"
143
+ Requires-Dist: pydantic; extra == "all"
144
+ Requires-Dist: pytest-cov; extra == "all"
149
145
  Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
150
- Requires-Dist: transformers[sentencepiece]; extra == "all"
151
- Requires-Dist: google-auth-httplib2; extra == "all"
152
- Requires-Dist: Unidecode; extra == "all"
146
+ Requires-Dist: cachetools; extra == "all"
147
+ Requires-Dist: httpx; extra == "all"
148
+ Requires-Dist: tinynetrc; extra == "all"
153
149
  Requires-Dist: tabulate; extra == "all"
154
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
155
- Requires-Dist: dnspython[doh]; extra == "all"
156
- Requires-Dist: pydantic-settings; extra == "all"
157
- Requires-Dist: fastapi; extra == "all"
158
- Requires-Dist: json_repair; extra == "all"
159
- Requires-Dist: pymupdf4llm; extra == "all"
160
- Requires-Dist: pymupdf; extra == "all"
150
+ Requires-Dist: google-api-python-client; extra == "all"
151
+ Requires-Dist: contexttimer; extra == "all"
152
+ Requires-Dist: flet-webview; extra == "all"
153
+ Requires-Dist: torchvision; extra == "all"
154
+ Requires-Dist: html2text; extra == "all"
155
+ Requires-Dist: setuptools; extra == "all"
161
156
  Requires-Dist: logfire[httpx]; extra == "all"
162
- Requires-Dist: flet-video; extra == "all"
157
+ Requires-Dist: semver; extra == "all"
163
158
  Requires-Dist: httpx_retries; extra == "all"
159
+ Requires-Dist: huggingface_hub; extra == "all"
160
+ Requires-Dist: peft; extra == "all"
161
+ Requires-Dist: tokenizers; extra == "all"
162
+ Requires-Dist: sentence_transformers; extra == "all"
163
+ Requires-Dist: yamlscript; extra == "all"
164
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
165
+ Requires-Dist: filetype; extra == "all"
164
166
  Requires-Dist: deepmerge; extra == "all"
165
167
  Requires-Dist: logfire; extra == "all"
166
168
  Requires-Dist: distributed; extra == "all"
167
- Requires-Dist: playwright; extra == "all"
168
- Requires-Dist: pydantic; extra == "all"
169
- Requires-Dist: uvicorn[standard]; extra == "all"
170
- Requires-Dist: cachetools; extra == "all"
171
- Requires-Dist: pyyaml; extra == "all"
172
- Requires-Dist: bokeh; extra == "all"
169
+ Requires-Dist: google-auth-httplib2; extra == "all"
173
170
  Requires-Dist: openai; extra == "all"
174
- Requires-Dist: tinynetrc; extra == "all"
175
- Requires-Dist: huggingface_hub; extra == "all"
176
- Requires-Dist: appdirs; extra == "all"
177
- Requires-Dist: flet-webview; extra == "all"
178
- Requires-Dist: yamlscript; extra == "all"
179
- Requires-Dist: diskcache; extra == "all"
171
+ Requires-Dist: google-auth; extra == "all"
172
+ Requires-Dist: Unidecode; extra == "all"
173
+ Requires-Dist: google-auth-oauthlib; extra == "all"
174
+ Requires-Dist: dnspython[doh]; extra == "all"
175
+ Requires-Dist: pyyaml; extra == "all"
176
+ Requires-Dist: regex; extra == "all"
180
177
  Requires-Dist: sre_yield; extra == "all"
181
- Requires-Dist: semver; extra == "all"
178
+ Requires-Dist: docker; extra == "all"
179
+ Requires-Dist: json_repair; extra == "all"
180
+ Requires-Dist: diskcache; extra == "all"
181
+ Requires-Dist: playwright; extra == "all"
182
+ Requires-Dist: fastapi; extra == "all"
183
+ Requires-Dist: dask[bag]; extra == "all"
184
+ Requires-Dist: uvicorn[standard]; extra == "all"
185
+ Requires-Dist: flet-video; extra == "all"
182
186
  Requires-Dist: faker; extra == "all"
183
- Requires-Dist: contexttimer; extra == "all"
184
- Requires-Dist: setuptools; extra == "all"
185
- Requires-Dist: torchvision; extra == "all"
186
- Requires-Dist: logfire[fastapi]; extra == "all"
187
- Requires-Dist: regex; extra == "all"
187
+ Requires-Dist: pydantic-settings; extra == "all"
188
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
189
+ Requires-Dist: openpyxl; extra == "all"
188
190
  Requires-Dist: torchaudio; extra == "all"
189
- Requires-Dist: dask[bag]; extra == "all"
190
- Requires-Dist: httpx; extra == "all"
191
- Requires-Dist: filetype; extra == "all"
192
191
  Dynamic: author
193
192
  Dynamic: author-email
194
193
  Dynamic: description
@@ -12,6 +12,7 @@ setup.py
12
12
  ./fmtr/tools/data_modelling_tools.py
13
13
  ./fmtr/tools/dataclass_tools.py
14
14
  ./fmtr/tools/datatype_tools.py
15
+ ./fmtr/tools/datetime_tools.py
15
16
  ./fmtr/tools/debugging_tools.py
16
17
  ./fmtr/tools/docker_tools.py
17
18
  ./fmtr/tools/environment_tools.py
@@ -102,6 +103,7 @@ fmtr/tools/context_tools.py
102
103
  fmtr/tools/data_modelling_tools.py
103
104
  fmtr/tools/dataclass_tools.py
104
105
  fmtr/tools/datatype_tools.py
106
+ fmtr/tools/datetime_tools.py
105
107
  fmtr/tools/debugging_tools.py
106
108
  fmtr/tools/docker_tools.py
107
109
  fmtr/tools/environment_tools.py
@@ -14,62 +14,62 @@ pydantic-ai[logfire,openai]
14
14
  ollama
15
15
 
16
16
  [all]
17
- sentence_transformers
18
- google-auth
19
17
  flet[all]
20
- html2text
18
+ pymupdf
19
+ appdirs
20
+ bokeh
21
21
  ollama
22
- google-auth-oauthlib
23
- docker
24
- pytest-cov
22
+ pymupdf4llm
23
+ logfire[fastapi]
25
24
  pandas
26
- openpyxl
27
- tokenizers
28
- peft
29
- google-api-python-client
25
+ pydantic
26
+ pytest-cov
30
27
  pydantic-ai[logfire,openai]
31
- transformers[sentencepiece]
32
- google-auth-httplib2
33
- Unidecode
28
+ cachetools
29
+ httpx
30
+ tinynetrc
34
31
  tabulate
35
- pydevd-pycharm~=251.25410.159
36
- dnspython[doh]
37
- pydantic-settings
38
- fastapi
39
- json_repair
40
- pymupdf4llm
41
- pymupdf
32
+ google-api-python-client
33
+ contexttimer
34
+ flet-webview
35
+ torchvision
36
+ html2text
37
+ setuptools
42
38
  logfire[httpx]
43
- flet-video
39
+ semver
44
40
  httpx_retries
41
+ huggingface_hub
42
+ peft
43
+ tokenizers
44
+ sentence_transformers
45
+ yamlscript
46
+ transformers[sentencepiece]
47
+ filetype
45
48
  deepmerge
46
49
  logfire
47
50
  distributed
48
- playwright
49
- pydantic
50
- uvicorn[standard]
51
- cachetools
52
- pyyaml
53
- bokeh
51
+ google-auth-httplib2
54
52
  openai
55
- tinynetrc
56
- huggingface_hub
57
- appdirs
58
- flet-webview
59
- yamlscript
60
- diskcache
53
+ google-auth
54
+ Unidecode
55
+ google-auth-oauthlib
56
+ dnspython[doh]
57
+ pyyaml
58
+ regex
61
59
  sre_yield
62
- semver
60
+ docker
61
+ json_repair
62
+ diskcache
63
+ playwright
64
+ fastapi
65
+ dask[bag]
66
+ uvicorn[standard]
67
+ flet-video
63
68
  faker
64
- contexttimer
65
- setuptools
66
- torchvision
67
- logfire[fastapi]
68
- regex
69
+ pydantic-settings
70
+ pydevd-pycharm~=251.25410.159
71
+ openpyxl
69
72
  torchaudio
70
- dask[bag]
71
- httpx
72
- filetype
73
73
 
74
74
  [api]
75
75
  fastapi
@@ -127,7 +127,6 @@ logfire[httpx]
127
127
  flet[all]
128
128
  flet-video
129
129
  flet-webview
130
- pydantic
131
130
 
132
131
  [json-fix]
133
132
  json_repair
@@ -28,7 +28,7 @@ DEPENDENCIES = {
28
28
  'metric': ['tabular'],
29
29
  'tabular': ['pandas', 'tabulate', 'openpyxl'],
30
30
  'html': ['html2text'],
31
- 'interface': ['flet[all]', 'flet-video', 'flet-webview', 'dm'],
31
+ 'interface': ['flet[all]', 'flet-video', 'flet-webview'],
32
32
  'google.api': ['google-auth', 'google-auth-oauthlib', 'google-auth-httplib2', 'google-api-python-client'],
33
33
  'caching': ['diskcache', 'cachetools'],
34
34
  'pdf': ['pymupdf', 'dm', 'pymupdf4llm'],
@@ -1,12 +0,0 @@
1
- from flet.core.page import Page
2
-
3
- from fmtr.tools.data_modelling_tools import Base, MixinArbitraryTypes
4
-
5
-
6
- class Context(Base, MixinArbitraryTypes):
7
- """
8
-
9
- Base context class
10
-
11
- """
12
- page: Page
@@ -1 +0,0 @@
1
- 1.3.40
File without changes
File without changes
File without changes
File without changes