fmtr.tools 1.2.5__tar.gz → 1.2.6__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.
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/PKG-INFO +44 -42
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/dns_tools/client.py +9 -7
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/dns_tools/server.py +10 -17
- fmtr_tools-1.2.6/fmtr/tools/version +1 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr.tools.egg-info/PKG-INFO +44 -42
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr.tools.egg-info/requires.txt +43 -41
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/setup.py +1 -1
- fmtr_tools-1.2.5/fmtr/tools/version +0 -1
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/LICENSE +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/README.md +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/constants.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/data_modelling_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/dns_tools/__init__.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/dns_tools/dm.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/docker_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/entrypoints/__init__.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/entrypoints/ep_test.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/entrypoints/shell_debug.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/google_api_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/interface_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/settings_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/setup_tools/setup_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/version_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr.tools.egg-info/SOURCES.txt +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/pyproject.toml +0 -0
- {fmtr_tools-1.2.5 → fmtr_tools-1.2.6}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.6
|
|
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/tools
|
|
6
6
|
Author: Frontmatter
|
|
@@ -106,6 +106,8 @@ Requires-Dist: pydevd-pycharm; extra == "debug"
|
|
|
106
106
|
Provides-Extra: sets
|
|
107
107
|
Requires-Dist: pydantic-settings; extra == "sets"
|
|
108
108
|
Requires-Dist: pydantic; extra == "sets"
|
|
109
|
+
Requires-Dist: yamlscript; extra == "sets"
|
|
110
|
+
Requires-Dist: pyyaml; extra == "sets"
|
|
109
111
|
Provides-Extra: path-app
|
|
110
112
|
Requires-Dist: appdirs; extra == "path-app"
|
|
111
113
|
Provides-Extra: path-type
|
|
@@ -128,60 +130,60 @@ Requires-Dist: logfire[httpx]; extra == "http"
|
|
|
128
130
|
Provides-Extra: setup
|
|
129
131
|
Requires-Dist: setuptools; extra == "setup"
|
|
130
132
|
Provides-Extra: all
|
|
131
|
-
Requires-Dist:
|
|
132
|
-
Requires-Dist:
|
|
133
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
134
|
-
Requires-Dist: httpx_retries; extra == "all"
|
|
135
|
-
Requires-Dist: regex; extra == "all"
|
|
136
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
137
|
-
Requires-Dist: pytest-cov; extra == "all"
|
|
138
|
-
Requires-Dist: flet-video; extra == "all"
|
|
133
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
134
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
139
135
|
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
136
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
140
137
|
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
141
|
-
Requires-Dist: logfire; extra == "all"
|
|
142
|
-
Requires-Dist: bokeh; extra == "all"
|
|
143
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
144
|
-
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
145
138
|
Requires-Dist: pymupdf4llm; extra == "all"
|
|
146
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
147
139
|
Requires-Dist: semver; extra == "all"
|
|
148
|
-
Requires-Dist: yamlscript; extra == "all"
|
|
149
|
-
Requires-Dist: torchvision; extra == "all"
|
|
150
|
-
Requires-Dist: pydevd-pycharm; extra == "all"
|
|
151
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
152
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
153
|
-
Requires-Dist: openai; extra == "all"
|
|
154
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
155
140
|
Requires-Dist: pymupdf; extra == "all"
|
|
156
|
-
Requires-Dist:
|
|
157
|
-
Requires-Dist:
|
|
158
|
-
Requires-Dist: tabulate; extra == "all"
|
|
159
|
-
Requires-Dist: setuptools; extra == "all"
|
|
141
|
+
Requires-Dist: bokeh; extra == "all"
|
|
142
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
160
143
|
Requires-Dist: diskcache; extra == "all"
|
|
161
|
-
Requires-Dist: distributed; extra == "all"
|
|
162
|
-
Requires-Dist: huggingface_hub; extra == "all"
|
|
163
|
-
Requires-Dist: flet-webview; extra == "all"
|
|
164
144
|
Requires-Dist: peft; extra == "all"
|
|
165
|
-
Requires-Dist:
|
|
166
|
-
Requires-Dist:
|
|
167
|
-
Requires-Dist: docker; extra == "all"
|
|
168
|
-
Requires-Dist: pydantic; extra == "all"
|
|
169
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
170
|
-
Requires-Dist: openpyxl; extra == "all"
|
|
171
|
-
Requires-Dist: filetype; extra == "all"
|
|
172
|
-
Requires-Dist: fastapi; extra == "all"
|
|
173
|
-
Requires-Dist: faker; extra == "all"
|
|
145
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
146
|
+
Requires-Dist: pydevd-pycharm; extra == "all"
|
|
174
147
|
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
175
|
-
Requires-Dist:
|
|
148
|
+
Requires-Dist: regex; extra == "all"
|
|
149
|
+
Requires-Dist: json_repair; extra == "all"
|
|
150
|
+
Requires-Dist: html2text; extra == "all"
|
|
151
|
+
Requires-Dist: faker; extra == "all"
|
|
152
|
+
Requires-Dist: openpyxl; extra == "all"
|
|
176
153
|
Requires-Dist: appdirs; extra == "all"
|
|
177
154
|
Requires-Dist: logfire[httpx]; extra == "all"
|
|
178
|
-
Requires-Dist:
|
|
179
|
-
Requires-Dist:
|
|
155
|
+
Requires-Dist: openai; extra == "all"
|
|
156
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
157
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
158
|
+
Requires-Dist: fastapi; extra == "all"
|
|
159
|
+
Requires-Dist: torchvision; extra == "all"
|
|
180
160
|
Requires-Dist: ollama; extra == "all"
|
|
181
|
-
Requires-Dist:
|
|
161
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
162
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
163
|
+
Requires-Dist: flet-video; extra == "all"
|
|
164
|
+
Requires-Dist: pandas; extra == "all"
|
|
165
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
166
|
+
Requires-Dist: filetype; extra == "all"
|
|
167
|
+
Requires-Dist: logfire; extra == "all"
|
|
168
|
+
Requires-Dist: tabulate; extra == "all"
|
|
169
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
182
170
|
Requires-Dist: flet[all]; extra == "all"
|
|
171
|
+
Requires-Dist: pydantic-settings; extra == "all"
|
|
172
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
173
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
174
|
+
Requires-Dist: distributed; extra == "all"
|
|
175
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
176
|
+
Requires-Dist: setuptools; extra == "all"
|
|
177
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
178
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
183
179
|
Requires-Dist: google-auth; extra == "all"
|
|
184
|
-
Requires-Dist:
|
|
180
|
+
Requires-Dist: torchaudio; extra == "all"
|
|
181
|
+
Requires-Dist: pydantic; extra == "all"
|
|
182
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
183
|
+
Requires-Dist: docker; extra == "all"
|
|
184
|
+
Requires-Dist: httpx; extra == "all"
|
|
185
|
+
Requires-Dist: pytest-cov; extra == "all"
|
|
186
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
185
187
|
Dynamic: author
|
|
186
188
|
Dynamic: author-email
|
|
187
189
|
Dynamic: description
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import dns
|
|
2
|
+
from dataclasses import dataclass
|
|
2
3
|
from dns import query
|
|
3
4
|
from functools import cached_property
|
|
4
5
|
from httpx_retries import Retry, RetryTransport
|
|
@@ -39,6 +40,7 @@ class ClientBasePlain:
|
|
|
39
40
|
exchange.response_upstream = Response.from_message(response)
|
|
40
41
|
|
|
41
42
|
|
|
43
|
+
@dataclass
|
|
42
44
|
class ClientDoH:
|
|
43
45
|
"""
|
|
44
46
|
|
|
@@ -47,19 +49,19 @@ class ClientDoH:
|
|
|
47
49
|
"""
|
|
48
50
|
|
|
49
51
|
HEADERS = {"Content-Type": "application/dns-message"}
|
|
50
|
-
|
|
52
|
+
CLIENT = HTTPClientDoH()
|
|
53
|
+
BOOTSTRAP = ClientBasePlain('8.8.8.8')
|
|
54
|
+
|
|
55
|
+
host: str
|
|
56
|
+
url: str
|
|
51
57
|
|
|
52
|
-
def __init__(self, host, url):
|
|
53
|
-
self.host = host
|
|
54
|
-
self.url = url
|
|
55
|
-
self.bootstrap = ClientBasePlain('8.8.8.8')
|
|
56
58
|
|
|
57
59
|
@cached_property
|
|
58
60
|
def ip(self):
|
|
59
61
|
message = dns.message.make_query(self.host, dns.rdatatype.A, flags=0)
|
|
60
62
|
request = Request.from_message(message)
|
|
61
63
|
exchange = Exchange(request=request, ip=None, port=None)
|
|
62
|
-
self.
|
|
64
|
+
self.BOOTSTRAP.resolve(exchange)
|
|
63
65
|
ip = next(iter(exchange.response_upstream.answer.items.keys())).address
|
|
64
66
|
return ip
|
|
65
67
|
|
|
@@ -72,7 +74,7 @@ class ClientDoH:
|
|
|
72
74
|
request = exchange.request
|
|
73
75
|
headers = self.HEADERS | dict(Host=self.host)
|
|
74
76
|
url = self.url.format(host=self.ip)
|
|
75
|
-
response_doh = self.
|
|
77
|
+
response_doh = self.CLIENT.post(url, headers=headers, content=request.wire)
|
|
76
78
|
response_doh.raise_for_status()
|
|
77
79
|
response = Response.from_http(response_doh)
|
|
78
80
|
exchange.response_upstream = response
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import socket
|
|
2
|
+
from dataclasses import dataclass
|
|
2
3
|
|
|
3
4
|
from fmtr.tools import logger
|
|
4
5
|
from fmtr.tools.dns_tools.client import ClientDoH
|
|
5
|
-
from fmtr.tools.dns_tools.dm import Exchange
|
|
6
|
+
from fmtr.tools.dns_tools.dm import Exchange
|
|
6
7
|
|
|
7
8
|
|
|
9
|
+
@dataclass
|
|
8
10
|
class ServerBasePlain:
|
|
9
11
|
"""
|
|
10
12
|
|
|
@@ -12,9 +14,11 @@ class ServerBasePlain:
|
|
|
12
14
|
|
|
13
15
|
"""
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
host: str
|
|
18
|
+
port: int
|
|
19
|
+
|
|
20
|
+
def __post_init__(self):
|
|
21
|
+
|
|
18
22
|
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
19
23
|
|
|
20
24
|
def resolve(self, exchange: Exchange):
|
|
@@ -36,6 +40,7 @@ class ServerBasePlain:
|
|
|
36
40
|
sock.sendto(exchange.response.wire, (ip, port))
|
|
37
41
|
|
|
38
42
|
|
|
43
|
+
@dataclass
|
|
39
44
|
class ServerBaseDoHProxy(ServerBasePlain):
|
|
40
45
|
"""
|
|
41
46
|
|
|
@@ -43,9 +48,7 @@ class ServerBaseDoHProxy(ServerBasePlain):
|
|
|
43
48
|
|
|
44
49
|
"""
|
|
45
50
|
|
|
46
|
-
|
|
47
|
-
super().__init__(host, port)
|
|
48
|
-
self.client = client
|
|
51
|
+
client: ClientDoH
|
|
49
52
|
|
|
50
53
|
def process_question(self, exchange: Exchange):
|
|
51
54
|
return
|
|
@@ -53,16 +56,6 @@ class ServerBaseDoHProxy(ServerBasePlain):
|
|
|
53
56
|
def process_upstream(self, exchange: Exchange):
|
|
54
57
|
return
|
|
55
58
|
|
|
56
|
-
def from_upstream(self, exchange: Exchange) -> Exchange:
|
|
57
|
-
|
|
58
|
-
request = exchange.request
|
|
59
|
-
response_doh = self.client.post(self.URL, headers=self.HEADERS, content=request.wire)
|
|
60
|
-
response_doh.raise_for_status()
|
|
61
|
-
response = Response.from_http(response_doh)
|
|
62
|
-
exchange.response_upstream = response
|
|
63
|
-
|
|
64
|
-
return exchange
|
|
65
|
-
|
|
66
59
|
def resolve(self, exchange: Exchange):
|
|
67
60
|
"""
|
|
68
61
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.2.6
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.6
|
|
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/tools
|
|
6
6
|
Author: Frontmatter
|
|
@@ -106,6 +106,8 @@ Requires-Dist: pydevd-pycharm; extra == "debug"
|
|
|
106
106
|
Provides-Extra: sets
|
|
107
107
|
Requires-Dist: pydantic-settings; extra == "sets"
|
|
108
108
|
Requires-Dist: pydantic; extra == "sets"
|
|
109
|
+
Requires-Dist: yamlscript; extra == "sets"
|
|
110
|
+
Requires-Dist: pyyaml; extra == "sets"
|
|
109
111
|
Provides-Extra: path-app
|
|
110
112
|
Requires-Dist: appdirs; extra == "path-app"
|
|
111
113
|
Provides-Extra: path-type
|
|
@@ -128,60 +130,60 @@ Requires-Dist: logfire[httpx]; extra == "http"
|
|
|
128
130
|
Provides-Extra: setup
|
|
129
131
|
Requires-Dist: setuptools; extra == "setup"
|
|
130
132
|
Provides-Extra: all
|
|
131
|
-
Requires-Dist:
|
|
132
|
-
Requires-Dist:
|
|
133
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
134
|
-
Requires-Dist: httpx_retries; extra == "all"
|
|
135
|
-
Requires-Dist: regex; extra == "all"
|
|
136
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
137
|
-
Requires-Dist: pytest-cov; extra == "all"
|
|
138
|
-
Requires-Dist: flet-video; extra == "all"
|
|
133
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
134
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
139
135
|
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
136
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
140
137
|
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
141
|
-
Requires-Dist: logfire; extra == "all"
|
|
142
|
-
Requires-Dist: bokeh; extra == "all"
|
|
143
|
-
Requires-Dist: sre_yield; extra == "all"
|
|
144
|
-
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
145
138
|
Requires-Dist: pymupdf4llm; extra == "all"
|
|
146
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
147
139
|
Requires-Dist: semver; extra == "all"
|
|
148
|
-
Requires-Dist: yamlscript; extra == "all"
|
|
149
|
-
Requires-Dist: torchvision; extra == "all"
|
|
150
|
-
Requires-Dist: pydevd-pycharm; extra == "all"
|
|
151
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
152
|
-
Requires-Dist: pyyaml; extra == "all"
|
|
153
|
-
Requires-Dist: openai; extra == "all"
|
|
154
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
155
140
|
Requires-Dist: pymupdf; extra == "all"
|
|
156
|
-
Requires-Dist:
|
|
157
|
-
Requires-Dist:
|
|
158
|
-
Requires-Dist: tabulate; extra == "all"
|
|
159
|
-
Requires-Dist: setuptools; extra == "all"
|
|
141
|
+
Requires-Dist: bokeh; extra == "all"
|
|
142
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
160
143
|
Requires-Dist: diskcache; extra == "all"
|
|
161
|
-
Requires-Dist: distributed; extra == "all"
|
|
162
|
-
Requires-Dist: huggingface_hub; extra == "all"
|
|
163
|
-
Requires-Dist: flet-webview; extra == "all"
|
|
164
144
|
Requires-Dist: peft; extra == "all"
|
|
165
|
-
Requires-Dist:
|
|
166
|
-
Requires-Dist:
|
|
167
|
-
Requires-Dist: docker; extra == "all"
|
|
168
|
-
Requires-Dist: pydantic; extra == "all"
|
|
169
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
170
|
-
Requires-Dist: openpyxl; extra == "all"
|
|
171
|
-
Requires-Dist: filetype; extra == "all"
|
|
172
|
-
Requires-Dist: fastapi; extra == "all"
|
|
173
|
-
Requires-Dist: faker; extra == "all"
|
|
145
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
146
|
+
Requires-Dist: pydevd-pycharm; extra == "all"
|
|
174
147
|
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
175
|
-
Requires-Dist:
|
|
148
|
+
Requires-Dist: regex; extra == "all"
|
|
149
|
+
Requires-Dist: json_repair; extra == "all"
|
|
150
|
+
Requires-Dist: html2text; extra == "all"
|
|
151
|
+
Requires-Dist: faker; extra == "all"
|
|
152
|
+
Requires-Dist: openpyxl; extra == "all"
|
|
176
153
|
Requires-Dist: appdirs; extra == "all"
|
|
177
154
|
Requires-Dist: logfire[httpx]; extra == "all"
|
|
178
|
-
Requires-Dist:
|
|
179
|
-
Requires-Dist:
|
|
155
|
+
Requires-Dist: openai; extra == "all"
|
|
156
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
157
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
158
|
+
Requires-Dist: fastapi; extra == "all"
|
|
159
|
+
Requires-Dist: torchvision; extra == "all"
|
|
180
160
|
Requires-Dist: ollama; extra == "all"
|
|
181
|
-
Requires-Dist:
|
|
161
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
162
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
163
|
+
Requires-Dist: flet-video; extra == "all"
|
|
164
|
+
Requires-Dist: pandas; extra == "all"
|
|
165
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
166
|
+
Requires-Dist: filetype; extra == "all"
|
|
167
|
+
Requires-Dist: logfire; extra == "all"
|
|
168
|
+
Requires-Dist: tabulate; extra == "all"
|
|
169
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
182
170
|
Requires-Dist: flet[all]; extra == "all"
|
|
171
|
+
Requires-Dist: pydantic-settings; extra == "all"
|
|
172
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
173
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
174
|
+
Requires-Dist: distributed; extra == "all"
|
|
175
|
+
Requires-Dist: flet-webview; extra == "all"
|
|
176
|
+
Requires-Dist: setuptools; extra == "all"
|
|
177
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
178
|
+
Requires-Dist: sre_yield; extra == "all"
|
|
183
179
|
Requires-Dist: google-auth; extra == "all"
|
|
184
|
-
Requires-Dist:
|
|
180
|
+
Requires-Dist: torchaudio; extra == "all"
|
|
181
|
+
Requires-Dist: pydantic; extra == "all"
|
|
182
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
183
|
+
Requires-Dist: docker; extra == "all"
|
|
184
|
+
Requires-Dist: httpx; extra == "all"
|
|
185
|
+
Requires-Dist: pytest-cov; extra == "all"
|
|
186
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
185
187
|
Dynamic: author
|
|
186
188
|
Dynamic: author-email
|
|
187
189
|
Dynamic: description
|
|
@@ -15,60 +15,60 @@ pydantic-ai[logfire,openai]
|
|
|
15
15
|
ollama
|
|
16
16
|
|
|
17
17
|
[all]
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
deepmerge
|
|
21
|
-
httpx_retries
|
|
22
|
-
regex
|
|
23
|
-
dask[bag]
|
|
24
|
-
pytest-cov
|
|
25
|
-
flet-video
|
|
18
|
+
google-api-python-client
|
|
19
|
+
Unidecode
|
|
26
20
|
uvicorn[standard]
|
|
21
|
+
huggingface_hub
|
|
27
22
|
logfire[fastapi]
|
|
28
|
-
logfire
|
|
29
|
-
bokeh
|
|
30
|
-
sre_yield
|
|
31
|
-
google-auth-httplib2
|
|
32
23
|
pymupdf4llm
|
|
33
|
-
pydantic-ai[logfire,openai]
|
|
34
24
|
semver
|
|
35
|
-
yamlscript
|
|
36
|
-
torchvision
|
|
37
|
-
pydevd-pycharm
|
|
38
|
-
tinynetrc
|
|
39
|
-
pyyaml
|
|
40
|
-
openai
|
|
41
|
-
sentence_transformers
|
|
42
25
|
pymupdf
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
tabulate
|
|
46
|
-
setuptools
|
|
26
|
+
bokeh
|
|
27
|
+
contexttimer
|
|
47
28
|
diskcache
|
|
48
|
-
distributed
|
|
49
|
-
huggingface_hub
|
|
50
|
-
flet-webview
|
|
51
29
|
peft
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
docker
|
|
55
|
-
pydantic
|
|
56
|
-
dnspython[doh]
|
|
57
|
-
openpyxl
|
|
58
|
-
filetype
|
|
59
|
-
fastapi
|
|
60
|
-
faker
|
|
30
|
+
dask[bag]
|
|
31
|
+
pydevd-pycharm
|
|
61
32
|
transformers[sentencepiece]
|
|
62
|
-
|
|
33
|
+
regex
|
|
34
|
+
json_repair
|
|
35
|
+
html2text
|
|
36
|
+
faker
|
|
37
|
+
openpyxl
|
|
63
38
|
appdirs
|
|
64
39
|
logfire[httpx]
|
|
65
|
-
|
|
66
|
-
|
|
40
|
+
openai
|
|
41
|
+
sentence_transformers
|
|
42
|
+
pydantic-ai[logfire,openai]
|
|
43
|
+
fastapi
|
|
44
|
+
torchvision
|
|
67
45
|
ollama
|
|
68
|
-
|
|
46
|
+
tokenizers
|
|
47
|
+
dnspython[doh]
|
|
48
|
+
flet-video
|
|
49
|
+
pandas
|
|
50
|
+
yamlscript
|
|
51
|
+
filetype
|
|
52
|
+
logfire
|
|
53
|
+
tabulate
|
|
54
|
+
google-auth-oauthlib
|
|
69
55
|
flet[all]
|
|
56
|
+
pydantic-settings
|
|
57
|
+
tinynetrc
|
|
58
|
+
deepmerge
|
|
59
|
+
distributed
|
|
60
|
+
flet-webview
|
|
61
|
+
setuptools
|
|
62
|
+
pyyaml
|
|
63
|
+
sre_yield
|
|
70
64
|
google-auth
|
|
71
|
-
|
|
65
|
+
torchaudio
|
|
66
|
+
pydantic
|
|
67
|
+
google-auth-httplib2
|
|
68
|
+
docker
|
|
69
|
+
httpx
|
|
70
|
+
pytest-cov
|
|
71
|
+
httpx_retries
|
|
72
72
|
|
|
73
73
|
[api]
|
|
74
74
|
fastapi
|
|
@@ -183,6 +183,8 @@ openpyxl
|
|
|
183
183
|
[sets]
|
|
184
184
|
pydantic-settings
|
|
185
185
|
pydantic
|
|
186
|
+
yamlscript
|
|
187
|
+
pyyaml
|
|
186
188
|
|
|
187
189
|
[setup]
|
|
188
190
|
setuptools
|
|
@@ -32,7 +32,7 @@ DEPENDENCIES = {
|
|
|
32
32
|
'caching': ['diskcache'],
|
|
33
33
|
'pdf': ['pymupdf', 'dm', 'pymupdf4llm'],
|
|
34
34
|
'debug': ['pydevd-pycharm'],
|
|
35
|
-
'sets': ['pydantic-settings', 'dm'],
|
|
35
|
+
'sets': ['pydantic-settings', 'dm', 'yaml'],
|
|
36
36
|
'path.app': ['appdirs'],
|
|
37
37
|
'path.type': ['filetype'],
|
|
38
38
|
'dns': ['dnspython[doh]', 'http'],
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.2.5
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|