fmtr.tools 1.3.36__tar.gz → 1.3.38__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 (96) hide show
  1. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/PKG-INFO +48 -45
  2. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/ai_tools/agentic_tools.py +2 -3
  3. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/environment_tools.py +1 -1
  4. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/iterator_tools.py +12 -0
  5. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/string_tools.py +60 -6
  6. fmtr_tools-1.3.38/fmtr/tools/version +1 -0
  7. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr.tools.egg-info/PKG-INFO +48 -45
  8. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr.tools.egg-info/requires.txt +48 -44
  9. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/setup.py +2 -1
  10. fmtr_tools-1.3.36/fmtr/tools/version +0 -1
  11. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/LICENSE +0 -0
  12. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/README.md +0 -0
  13. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/__init__.py +0 -0
  14. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/ai_tools/__init__.py +0 -0
  15. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  16. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/api_tools.py +0 -0
  17. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/async_tools.py +0 -0
  18. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/augmentation_tools.py +0 -0
  19. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/caching_tools.py +0 -0
  20. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/constants.py +0 -0
  21. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/context_tools.py +0 -0
  22. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/data_modelling_tools.py +0 -0
  23. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/dataclass_tools.py +0 -0
  24. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/datatype_tools.py +0 -0
  25. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/debugging_tools.py +0 -0
  26. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/dns_tools/__init__.py +0 -0
  27. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/dns_tools/client.py +0 -0
  28. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/dns_tools/dm.py +0 -0
  29. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/dns_tools/proxy.py +0 -0
  30. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/dns_tools/server.py +0 -0
  31. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/docker_tools.py +0 -0
  32. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/entrypoints/__init__.py +0 -0
  33. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  34. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/entrypoints/ep_test.py +0 -0
  35. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  36. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  37. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  38. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/function_tools.py +0 -0
  39. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/google_api_tools.py +0 -0
  40. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/hash_tools.py +0 -0
  41. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/hfh_tools.py +0 -0
  42. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/html_tools.py +0 -0
  43. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/http_tools.py +0 -0
  44. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/import_tools.py +0 -0
  45. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/inherit_tools.py +0 -0
  46. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/inspection_tools.py +0 -0
  47. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/interface_tools/__init__.py +0 -0
  48. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/interface_tools/controls.py +0 -0
  49. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/interface_tools/interface_tools.py +0 -0
  50. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/json_fix_tools.py +0 -0
  51. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/json_tools.py +0 -0
  52. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/logging_tools.py +0 -0
  53. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/merging_tools.py +0 -0
  54. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/metric_tools.py +0 -0
  55. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/name_tools.py +0 -0
  56. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/netrc_tools.py +0 -0
  57. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/openai_tools.py +0 -0
  58. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/packaging_tools.py +0 -0
  59. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/parallel_tools.py +0 -0
  60. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/path_tools/__init__.py +0 -0
  61. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  62. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/path_tools/path_tools.py +0 -0
  63. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  64. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/pattern_tools.py +0 -0
  65. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/pdf_tools.py +0 -0
  66. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/platform_tools.py +0 -0
  67. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/process_tools.py +0 -0
  68. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/profiling_tools.py +0 -0
  69. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/random_tools.py +0 -0
  70. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/semantic_tools.py +0 -0
  71. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/settings_tools.py +0 -0
  72. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/setup_tools/__init__.py +0 -0
  73. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  74. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/spaces_tools.py +0 -0
  75. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tabular_tools.py +0 -0
  76. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tests/__init__.py +0 -0
  77. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tests/conftest.py +0 -0
  78. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tests/helpers.py +0 -0
  79. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tests/test_datatype.py +0 -0
  80. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tests/test_environment.py +0 -0
  81. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tests/test_json.py +0 -0
  82. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tests/test_path.py +0 -0
  83. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tests/test_yaml.py +0 -0
  84. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tokenization_tools.py +0 -0
  85. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/tools.py +0 -0
  86. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/unicode_tools.py +0 -0
  87. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/version_tools/__init__.py +0 -0
  88. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/version_tools/version_tools.py +0 -0
  89. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/webhook_tools.py +0 -0
  90. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr/tools/yaml_tools.py +0 -0
  91. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  92. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  93. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr.tools.egg-info/entry_points.txt +0 -0
  94. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/fmtr.tools.egg-info/top_level.txt +0 -0
  95. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/pyproject.toml +0 -0
  96. {fmtr_tools-1.3.36 → fmtr_tools-1.3.38}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.36
3
+ Version: 1.3.38
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
@@ -130,62 +130,65 @@ Requires-Dist: httpx; extra == "webhook"
130
130
  Requires-Dist: httpx_retries; extra == "webhook"
131
131
  Requires-Dist: logfire; extra == "webhook"
132
132
  Requires-Dist: logfire[httpx]; extra == "webhook"
133
+ Provides-Extra: browsers
134
+ Requires-Dist: playwright; extra == "browsers"
133
135
  Provides-Extra: all
134
- Requires-Dist: huggingface_hub; extra == "all"
135
- Requires-Dist: torchaudio; extra == "all"
136
- Requires-Dist: openpyxl; extra == "all"
137
- Requires-Dist: logfire; extra == "all"
136
+ Requires-Dist: json_repair; extra == "all"
138
137
  Requires-Dist: pytest-cov; extra == "all"
139
- Requires-Dist: httpx_retries; extra == "all"
140
- Requires-Dist: semver; extra == "all"
141
- Requires-Dist: logfire[fastapi]; extra == "all"
138
+ Requires-Dist: pydantic; extra == "all"
139
+ Requires-Dist: appdirs; extra == "all"
140
+ Requires-Dist: httpx; extra == "all"
141
+ Requires-Dist: contexttimer; extra == "all"
142
+ Requires-Dist: peft; extra == "all"
143
+ Requires-Dist: flet-webview; extra == "all"
144
+ Requires-Dist: diskcache; extra == "all"
145
+ Requires-Dist: google-auth; extra == "all"
146
+ Requires-Dist: cachetools; extra == "all"
147
+ Requires-Dist: google-api-python-client; extra == "all"
142
148
  Requires-Dist: uvicorn[standard]; extra == "all"
149
+ Requires-Dist: pandas; extra == "all"
150
+ Requires-Dist: pydantic-settings; extra == "all"
151
+ Requires-Dist: sre_yield; extra == "all"
152
+ Requires-Dist: tokenizers; extra == "all"
153
+ Requires-Dist: dask[bag]; extra == "all"
154
+ Requires-Dist: semver; extra == "all"
155
+ Requires-Dist: faker; extra == "all"
143
156
  Requires-Dist: torchvision; extra == "all"
144
- Requires-Dist: dnspython[doh]; extra == "all"
145
- Requires-Dist: google-auth; extra == "all"
146
- Requires-Dist: flet-video; extra == "all"
147
- Requires-Dist: json_repair; extra == "all"
148
- Requires-Dist: contexttimer; extra == "all"
157
+ Requires-Dist: google-auth-oauthlib; extra == "all"
158
+ Requires-Dist: openpyxl; extra == "all"
159
+ Requires-Dist: playwright; extra == "all"
160
+ Requires-Dist: google-auth-httplib2; extra == "all"
161
+ Requires-Dist: setuptools; extra == "all"
162
+ Requires-Dist: yamlscript; extra == "all"
163
+ Requires-Dist: regex; extra == "all"
149
164
  Requires-Dist: html2text; extra == "all"
165
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
166
+ Requires-Dist: logfire[fastapi]; extra == "all"
167
+ Requires-Dist: pyyaml; extra == "all"
168
+ Requires-Dist: huggingface_hub; extra == "all"
169
+ Requires-Dist: filetype; extra == "all"
170
+ Requires-Dist: deepmerge; extra == "all"
150
171
  Requires-Dist: transformers[sentencepiece]; extra == "all"
151
- Requires-Dist: dask[bag]; extra == "all"
152
- Requires-Dist: pandas; extra == "all"
153
172
  Requires-Dist: bokeh; extra == "all"
154
- Requires-Dist: httpx; extra == "all"
155
- Requires-Dist: flet[all]; extra == "all"
156
- Requires-Dist: fastapi; extra == "all"
157
- Requires-Dist: google-api-python-client; extra == "all"
158
173
  Requires-Dist: Unidecode; extra == "all"
159
- Requires-Dist: peft; extra == "all"
160
- Requires-Dist: tabulate; extra == "all"
161
- Requires-Dist: cachetools; extra == "all"
162
- Requires-Dist: pydantic; extra == "all"
163
- Requires-Dist: setuptools; extra == "all"
164
- Requires-Dist: openai; extra == "all"
174
+ Requires-Dist: fastapi; extra == "all"
165
175
  Requires-Dist: tinynetrc; extra == "all"
176
+ Requires-Dist: flet[all]; extra == "all"
166
177
  Requires-Dist: pymupdf4llm; extra == "all"
167
- Requires-Dist: docker; extra == "all"
168
- Requires-Dist: faker; extra == "all"
169
- Requires-Dist: ollama; extra == "all"
170
- Requires-Dist: flet-webview; extra == "all"
171
- Requires-Dist: google-auth-httplib2; extra == "all"
172
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
173
- Requires-Dist: sentence_transformers; extra == "all"
174
- Requires-Dist: filetype; extra == "all"
175
- Requires-Dist: yamlscript; extra == "all"
176
- Requires-Dist: diskcache; extra == "all"
177
- Requires-Dist: regex; extra == "all"
178
178
  Requires-Dist: distributed; extra == "all"
179
- Requires-Dist: deepmerge; extra == "all"
180
- Requires-Dist: google-auth-oauthlib; extra == "all"
181
- Requires-Dist: pymupdf; extra == "all"
182
- Requires-Dist: pyyaml; extra == "all"
183
- Requires-Dist: appdirs; extra == "all"
179
+ Requires-Dist: openai; extra == "all"
180
+ Requires-Dist: tabulate; extra == "all"
181
+ Requires-Dist: dnspython[doh]; extra == "all"
182
+ Requires-Dist: torchaudio; extra == "all"
183
+ Requires-Dist: flet-video; extra == "all"
184
+ Requires-Dist: ollama; extra == "all"
185
+ Requires-Dist: httpx_retries; extra == "all"
184
186
  Requires-Dist: logfire[httpx]; extra == "all"
185
- Requires-Dist: sre_yield; extra == "all"
186
- Requires-Dist: pydantic-settings; extra == "all"
187
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
188
- Requires-Dist: tokenizers; extra == "all"
187
+ Requires-Dist: pymupdf; extra == "all"
188
+ Requires-Dist: docker; extra == "all"
189
+ Requires-Dist: sentence_transformers; extra == "all"
190
+ Requires-Dist: logfire; extra == "all"
191
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
189
192
  Dynamic: author
190
193
  Dynamic: author-email
191
194
  Dynamic: description
@@ -1,11 +1,10 @@
1
- from typing import List, Optional, Any, Annotated
2
-
3
1
  import pydantic_ai
4
2
  from pydantic import PlainValidator
5
3
  from pydantic_ai import RunContext, ModelRetry
6
4
  from pydantic_ai.agent import AgentRunResult, Agent
7
5
  from pydantic_ai.models.openai import OpenAIModel
8
6
  from pydantic_ai.providers.openai import OpenAIProvider
7
+ from typing import List, Optional, Any, Annotated
9
8
 
10
9
  from fmtr.tools import environment_tools as env
11
10
  from fmtr.tools.constants import Constants
@@ -153,7 +152,7 @@ def default_prompt_none_specified(text):
153
152
  return text
154
153
 
155
154
 
156
- StringDefaultNoneSpecified = Annotated[str, PlainValidator(default_prompt_none_specified)]
155
+ StringDefaultNoneSpecified = Annotated[Optional[str], PlainValidator(default_prompt_none_specified)]
157
156
 
158
157
 
159
158
  if __name__ == '__main__':
@@ -28,7 +28,7 @@ def get_dict() -> Dict[str, str]:
28
28
  Return environment variables as a standard dictionary.
29
29
 
30
30
  """
31
- environment_dict = dict(os.environ)
31
+ environment_dict = dict(sorted(dict(os.environ).items()))
32
32
  return environment_dict
33
33
 
34
34
 
@@ -1,6 +1,9 @@
1
1
  from itertools import chain, batched
2
+
2
3
  from typing import List, Dict, Any
3
4
 
5
+ from fmtr.tools.datatype_tools import is_none
6
+
4
7
 
5
8
  def enlist(value) -> List[Any]:
6
9
  """
@@ -52,3 +55,12 @@ def rebatch(batches, size: int):
52
55
 
53
56
  """
54
57
  return batched(chain.from_iterable(batches), size)
58
+
59
+
60
+ def strip_none(*items):
61
+ """
62
+
63
+ Remove nones from a list of arguments
64
+
65
+ """
66
+ return [item for item in items if not is_none(item)]
@@ -1,7 +1,8 @@
1
1
  from collections import namedtuple
2
+ from string import Formatter
2
3
 
3
4
  import re
4
- from string import Formatter
5
+ from dataclasses import dataclass
5
6
  from textwrap import dedent
6
7
  from typing import List
7
8
 
@@ -84,17 +85,70 @@ def sanitize(*strings, sep: str = '-') -> str:
84
85
  return string
85
86
 
86
87
 
87
- def truncate_mid(text, length=None, sep=ELLIPSIS):
88
+ @dataclass
89
+ class Truncation:
90
+ """
91
+
92
+ Result type for truncation functions
93
+
94
+ """
95
+ text: str
96
+ text_without_sep: str | None
97
+ original: str
98
+ remainder: str | None
99
+ sep: str
100
+
101
+
102
+ def truncate(text, length=None, sep=ELLIPSIS, return_type=str):
103
+ """
104
+
105
+ Truncate a string to length characters
106
+
88
107
  """
108
+ text = flatten(text)
109
+ if len(text) <= length or not length:
110
+ return text if return_type is str else Truncation(text, text, text, None, sep)
111
+
112
+ cutoff = length - len(sep)
113
+ truncated = text[:cutoff] + sep
114
+
115
+ if return_type is str:
116
+ return truncated
117
+ else:
118
+ return Truncation(
119
+ text=truncated,
120
+ text_without_sep=text[:cutoff],
121
+ original=text,
122
+ remainder=text[cutoff:] or None,
123
+ sep=sep
124
+ )
89
125
 
90
- Truncate a string to `length` characters in the middle
126
+
127
+ def truncate_mid(text, length=None, sep=ELLIPSIS, return_type=str):
128
+ """
129
+
130
+ Truncate a string to `length` characters in the middle.
91
131
 
92
132
  """
93
133
  text = flatten(text)
94
134
  if len(text) <= length or not length:
95
- return text
96
- half_length = (length - 3) // 2
97
- return text[:half_length] + sep + text[-half_length:]
135
+ return text if return_type is str else Truncation(text, text, text, '', sep)
136
+
137
+ half = (length - len(sep)) // 2
138
+ left = text[:half]
139
+ right = text[-half:]
140
+ truncated = left + sep + right
141
+
142
+ if return_type is str:
143
+ return truncated
144
+ else:
145
+ return Truncation(
146
+ text=truncated,
147
+ text_without_sep=None,
148
+ original=text,
149
+ remainder=None,
150
+ sep=sep
151
+ )
98
152
 
99
153
 
100
154
  def flatten(raw):
@@ -0,0 +1 @@
1
+ 1.3.38
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.36
3
+ Version: 1.3.38
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
@@ -130,62 +130,65 @@ Requires-Dist: httpx; extra == "webhook"
130
130
  Requires-Dist: httpx_retries; extra == "webhook"
131
131
  Requires-Dist: logfire; extra == "webhook"
132
132
  Requires-Dist: logfire[httpx]; extra == "webhook"
133
+ Provides-Extra: browsers
134
+ Requires-Dist: playwright; extra == "browsers"
133
135
  Provides-Extra: all
134
- Requires-Dist: huggingface_hub; extra == "all"
135
- Requires-Dist: torchaudio; extra == "all"
136
- Requires-Dist: openpyxl; extra == "all"
137
- Requires-Dist: logfire; extra == "all"
136
+ Requires-Dist: json_repair; extra == "all"
138
137
  Requires-Dist: pytest-cov; extra == "all"
139
- Requires-Dist: httpx_retries; extra == "all"
140
- Requires-Dist: semver; extra == "all"
141
- Requires-Dist: logfire[fastapi]; extra == "all"
138
+ Requires-Dist: pydantic; extra == "all"
139
+ Requires-Dist: appdirs; extra == "all"
140
+ Requires-Dist: httpx; extra == "all"
141
+ Requires-Dist: contexttimer; extra == "all"
142
+ Requires-Dist: peft; extra == "all"
143
+ Requires-Dist: flet-webview; extra == "all"
144
+ Requires-Dist: diskcache; extra == "all"
145
+ Requires-Dist: google-auth; extra == "all"
146
+ Requires-Dist: cachetools; extra == "all"
147
+ Requires-Dist: google-api-python-client; extra == "all"
142
148
  Requires-Dist: uvicorn[standard]; extra == "all"
149
+ Requires-Dist: pandas; extra == "all"
150
+ Requires-Dist: pydantic-settings; extra == "all"
151
+ Requires-Dist: sre_yield; extra == "all"
152
+ Requires-Dist: tokenizers; extra == "all"
153
+ Requires-Dist: dask[bag]; extra == "all"
154
+ Requires-Dist: semver; extra == "all"
155
+ Requires-Dist: faker; extra == "all"
143
156
  Requires-Dist: torchvision; extra == "all"
144
- Requires-Dist: dnspython[doh]; extra == "all"
145
- Requires-Dist: google-auth; extra == "all"
146
- Requires-Dist: flet-video; extra == "all"
147
- Requires-Dist: json_repair; extra == "all"
148
- Requires-Dist: contexttimer; extra == "all"
157
+ Requires-Dist: google-auth-oauthlib; extra == "all"
158
+ Requires-Dist: openpyxl; extra == "all"
159
+ Requires-Dist: playwright; extra == "all"
160
+ Requires-Dist: google-auth-httplib2; extra == "all"
161
+ Requires-Dist: setuptools; extra == "all"
162
+ Requires-Dist: yamlscript; extra == "all"
163
+ Requires-Dist: regex; extra == "all"
149
164
  Requires-Dist: html2text; extra == "all"
165
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
166
+ Requires-Dist: logfire[fastapi]; extra == "all"
167
+ Requires-Dist: pyyaml; extra == "all"
168
+ Requires-Dist: huggingface_hub; extra == "all"
169
+ Requires-Dist: filetype; extra == "all"
170
+ Requires-Dist: deepmerge; extra == "all"
150
171
  Requires-Dist: transformers[sentencepiece]; extra == "all"
151
- Requires-Dist: dask[bag]; extra == "all"
152
- Requires-Dist: pandas; extra == "all"
153
172
  Requires-Dist: bokeh; extra == "all"
154
- Requires-Dist: httpx; extra == "all"
155
- Requires-Dist: flet[all]; extra == "all"
156
- Requires-Dist: fastapi; extra == "all"
157
- Requires-Dist: google-api-python-client; extra == "all"
158
173
  Requires-Dist: Unidecode; extra == "all"
159
- Requires-Dist: peft; extra == "all"
160
- Requires-Dist: tabulate; extra == "all"
161
- Requires-Dist: cachetools; extra == "all"
162
- Requires-Dist: pydantic; extra == "all"
163
- Requires-Dist: setuptools; extra == "all"
164
- Requires-Dist: openai; extra == "all"
174
+ Requires-Dist: fastapi; extra == "all"
165
175
  Requires-Dist: tinynetrc; extra == "all"
176
+ Requires-Dist: flet[all]; extra == "all"
166
177
  Requires-Dist: pymupdf4llm; extra == "all"
167
- Requires-Dist: docker; extra == "all"
168
- Requires-Dist: faker; extra == "all"
169
- Requires-Dist: ollama; extra == "all"
170
- Requires-Dist: flet-webview; extra == "all"
171
- Requires-Dist: google-auth-httplib2; extra == "all"
172
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
173
- Requires-Dist: sentence_transformers; extra == "all"
174
- Requires-Dist: filetype; extra == "all"
175
- Requires-Dist: yamlscript; extra == "all"
176
- Requires-Dist: diskcache; extra == "all"
177
- Requires-Dist: regex; extra == "all"
178
178
  Requires-Dist: distributed; extra == "all"
179
- Requires-Dist: deepmerge; extra == "all"
180
- Requires-Dist: google-auth-oauthlib; extra == "all"
181
- Requires-Dist: pymupdf; extra == "all"
182
- Requires-Dist: pyyaml; extra == "all"
183
- Requires-Dist: appdirs; extra == "all"
179
+ Requires-Dist: openai; extra == "all"
180
+ Requires-Dist: tabulate; extra == "all"
181
+ Requires-Dist: dnspython[doh]; extra == "all"
182
+ Requires-Dist: torchaudio; extra == "all"
183
+ Requires-Dist: flet-video; extra == "all"
184
+ Requires-Dist: ollama; extra == "all"
185
+ Requires-Dist: httpx_retries; extra == "all"
184
186
  Requires-Dist: logfire[httpx]; extra == "all"
185
- Requires-Dist: sre_yield; extra == "all"
186
- Requires-Dist: pydantic-settings; extra == "all"
187
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
188
- Requires-Dist: tokenizers; extra == "all"
187
+ Requires-Dist: pymupdf; extra == "all"
188
+ Requires-Dist: docker; extra == "all"
189
+ Requires-Dist: sentence_transformers; extra == "all"
190
+ Requires-Dist: logfire; extra == "all"
191
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
189
192
  Dynamic: author
190
193
  Dynamic: author-email
191
194
  Dynamic: description
@@ -14,61 +14,62 @@ pydantic-ai[logfire,openai]
14
14
  ollama
15
15
 
16
16
  [all]
17
- huggingface_hub
18
- torchaudio
19
- openpyxl
20
- logfire
17
+ json_repair
21
18
  pytest-cov
22
- httpx_retries
23
- semver
24
- logfire[fastapi]
19
+ pydantic
20
+ appdirs
21
+ httpx
22
+ contexttimer
23
+ peft
24
+ flet-webview
25
+ diskcache
26
+ google-auth
27
+ cachetools
28
+ google-api-python-client
25
29
  uvicorn[standard]
30
+ pandas
31
+ pydantic-settings
32
+ sre_yield
33
+ tokenizers
34
+ dask[bag]
35
+ semver
36
+ faker
26
37
  torchvision
27
- dnspython[doh]
28
- google-auth
29
- flet-video
30
- json_repair
31
- contexttimer
38
+ google-auth-oauthlib
39
+ openpyxl
40
+ playwright
41
+ google-auth-httplib2
42
+ setuptools
43
+ yamlscript
44
+ regex
32
45
  html2text
46
+ pydevd-pycharm~=251.25410.159
47
+ logfire[fastapi]
48
+ pyyaml
49
+ huggingface_hub
50
+ filetype
51
+ deepmerge
33
52
  transformers[sentencepiece]
34
- dask[bag]
35
- pandas
36
53
  bokeh
37
- httpx
38
- flet[all]
39
- fastapi
40
- google-api-python-client
41
54
  Unidecode
42
- peft
43
- tabulate
44
- cachetools
45
- pydantic
46
- setuptools
47
- openai
55
+ fastapi
48
56
  tinynetrc
57
+ flet[all]
49
58
  pymupdf4llm
50
- docker
51
- faker
52
- ollama
53
- flet-webview
54
- google-auth-httplib2
55
- pydantic-ai[logfire,openai]
56
- sentence_transformers
57
- filetype
58
- yamlscript
59
- diskcache
60
- regex
61
59
  distributed
62
- deepmerge
63
- google-auth-oauthlib
64
- pymupdf
65
- pyyaml
66
- appdirs
60
+ openai
61
+ tabulate
62
+ dnspython[doh]
63
+ torchaudio
64
+ flet-video
65
+ ollama
66
+ httpx_retries
67
67
  logfire[httpx]
68
- sre_yield
69
- pydantic-settings
70
- pydevd-pycharm~=251.25410.159
71
- tokenizers
68
+ pymupdf
69
+ docker
70
+ sentence_transformers
71
+ logfire
72
+ pydantic-ai[logfire,openai]
72
73
 
73
74
  [api]
74
75
  fastapi
@@ -81,6 +82,9 @@ logfire[fastapi]
81
82
  faker
82
83
  sre_yield
83
84
 
85
+ [browsers]
86
+ playwright
87
+
84
88
  [caching]
85
89
  diskcache
86
90
  cachetools
@@ -40,7 +40,8 @@ DEPENDENCIES = {
40
40
  'patterns': ['regex'],
41
41
  'http': ['httpx', 'httpx_retries', 'logging', 'logfire[httpx]'],
42
42
  'setup': ['setuptools'],
43
- 'webhook': ['http']
43
+ 'webhook': ['http'],
44
+ 'browsers': ['playwright']
44
45
  }
45
46
 
46
47
  setup = Setup(
@@ -1 +0,0 @@
1
- 1.3.36
File without changes
File without changes
File without changes
File without changes