fmtr.tools 1.3.19__tar.gz → 1.3.20__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 (91) hide show
  1. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/PKG-INFO +45 -45
  2. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/client.py +4 -5
  3. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/dm.py +16 -17
  4. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/server.py +2 -2
  5. fmtr_tools-1.3.20/fmtr/tools/version +1 -0
  6. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/PKG-INFO +45 -45
  7. fmtr_tools-1.3.19/fmtr/tools/version +0 -1
  8. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/LICENSE +0 -0
  9. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/README.md +0 -0
  10. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/__init__.py +0 -0
  11. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/ai_tools/__init__.py +0 -0
  12. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  13. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  14. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/api_tools.py +0 -0
  15. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/async_tools.py +0 -0
  16. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/augmentation_tools.py +0 -0
  17. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/caching_tools.py +0 -0
  18. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/constants.py +0 -0
  19. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/data_modelling_tools.py +0 -0
  20. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/dataclass_tools.py +0 -0
  21. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/datatype_tools.py +0 -0
  22. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/debugging_tools.py +0 -0
  23. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/__init__.py +0 -0
  24. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/proxy.py +0 -0
  25. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/docker_tools.py +0 -0
  26. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/__init__.py +0 -0
  27. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  28. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/ep_test.py +0 -0
  29. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  30. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  31. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  32. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/environment_tools.py +0 -0
  33. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/function_tools.py +0 -0
  34. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/google_api_tools.py +0 -0
  35. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/hash_tools.py +0 -0
  36. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/hfh_tools.py +0 -0
  37. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/html_tools.py +0 -0
  38. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/http_tools.py +0 -0
  39. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/import_tools.py +0 -0
  40. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/inspection_tools.py +0 -0
  41. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/interface_tools.py +0 -0
  42. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/iterator_tools.py +0 -0
  43. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/json_fix_tools.py +0 -0
  44. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/json_tools.py +0 -0
  45. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/logging_tools.py +0 -0
  46. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/merging_tools.py +0 -0
  47. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/metric_tools.py +0 -0
  48. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/name_tools.py +0 -0
  49. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/netrc_tools.py +0 -0
  50. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/openai_tools.py +0 -0
  51. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/packaging_tools.py +0 -0
  52. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/parallel_tools.py +0 -0
  53. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/path_tools/__init__.py +0 -0
  54. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  55. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/path_tools/path_tools.py +0 -0
  56. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  57. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/pattern_tools.py +0 -0
  58. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/pdf_tools.py +0 -0
  59. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/platform_tools.py +0 -0
  60. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/process_tools.py +0 -0
  61. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/profiling_tools.py +0 -0
  62. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/random_tools.py +0 -0
  63. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/semantic_tools.py +0 -0
  64. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/settings_tools.py +0 -0
  65. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/setup_tools/__init__.py +0 -0
  66. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  67. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/spaces_tools.py +0 -0
  68. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/string_tools.py +0 -0
  69. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tabular_tools.py +0 -0
  70. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tests/__init__.py +0 -0
  71. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tests/conftest.py +0 -0
  72. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tests/helpers.py +0 -0
  73. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_datatype.py +0 -0
  74. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_environment.py +0 -0
  75. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_json.py +0 -0
  76. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_path.py +0 -0
  77. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_yaml.py +0 -0
  78. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tokenization_tools.py +0 -0
  79. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/tools.py +0 -0
  80. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/unicode_tools.py +0 -0
  81. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/version_tools/__init__.py +0 -0
  82. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/version_tools/version_tools.py +0 -0
  83. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr/tools/yaml_tools.py +0 -0
  84. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  85. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  86. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/entry_points.txt +0 -0
  87. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/requires.txt +44 -44
  88. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/top_level.txt +0 -0
  89. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/pyproject.toml +0 -0
  90. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/setup.cfg +0 -0
  91. {fmtr_tools-1.3.19 → fmtr_tools-1.3.20}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.19
3
+ Version: 1.3.20
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
@@ -126,61 +126,61 @@ Requires-Dist: logfire[httpx]; extra == "http"
126
126
  Provides-Extra: setup
127
127
  Requires-Dist: setuptools; extra == "setup"
128
128
  Provides-Extra: all
129
+ Requires-Dist: json_repair; extra == "all"
130
+ Requires-Dist: pymupdf4llm; extra == "all"
131
+ Requires-Dist: setuptools; extra == "all"
132
+ Requires-Dist: dask[bag]; extra == "all"
133
+ Requires-Dist: ollama; extra == "all"
134
+ Requires-Dist: contexttimer; extra == "all"
135
+ Requires-Dist: logfire[fastapi]; extra == "all"
136
+ Requires-Dist: html2text; extra == "all"
137
+ Requires-Dist: pandas; extra == "all"
138
+ Requires-Dist: faker; extra == "all"
139
+ Requires-Dist: httpx; extra == "all"
140
+ Requires-Dist: flet[all]; extra == "all"
141
+ Requires-Dist: sre_yield; extra == "all"
142
+ Requires-Dist: tinynetrc; extra == "all"
143
+ Requires-Dist: logfire; extra == "all"
144
+ Requires-Dist: flet-video; extra == "all"
145
+ Requires-Dist: pymupdf; extra == "all"
146
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
147
+ Requires-Dist: regex; extra == "all"
148
+ Requires-Dist: google-auth-httplib2; extra == "all"
149
+ Requires-Dist: pydantic-settings; extra == "all"
150
+ Requires-Dist: uvicorn[standard]; extra == "all"
151
+ Requires-Dist: google-auth-oauthlib; extra == "all"
152
+ Requires-Dist: torchvision; extra == "all"
129
153
  Requires-Dist: docker; extra == "all"
154
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
155
+ Requires-Dist: pytest-cov; extra == "all"
130
156
  Requires-Dist: sentence_transformers; extra == "all"
131
- Requires-Dist: openpyxl; extra == "all"
132
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
133
- Requires-Dist: appdirs; extra == "all"
134
- Requires-Dist: pydantic; extra == "all"
135
157
  Requires-Dist: diskcache; extra == "all"
136
- Requires-Dist: torchvision; extra == "all"
137
- Requires-Dist: uvicorn[standard]; extra == "all"
138
- Requires-Dist: google-auth-httplib2; extra == "all"
158
+ Requires-Dist: huggingface_hub; extra == "all"
159
+ Requires-Dist: openai; extra == "all"
160
+ Requires-Dist: openpyxl; extra == "all"
161
+ Requires-Dist: google-api-python-client; extra == "all"
162
+ Requires-Dist: logfire[httpx]; extra == "all"
139
163
  Requires-Dist: distributed; extra == "all"
140
- Requires-Dist: pyyaml; extra == "all"
141
- Requires-Dist: logfire; extra == "all"
164
+ Requires-Dist: tabulate; extra == "all"
142
165
  Requires-Dist: transformers[sentencepiece]; extra == "all"
143
- Requires-Dist: filetype; extra == "all"
144
- Requires-Dist: regex; extra == "all"
145
- Requires-Dist: ollama; extra == "all"
166
+ Requires-Dist: torchaudio; extra == "all"
146
167
  Requires-Dist: deepmerge; extra == "all"
147
- Requires-Dist: tinynetrc; extra == "all"
148
- Requires-Dist: semver; extra == "all"
149
- Requires-Dist: dask[bag]; extra == "all"
150
- Requires-Dist: huggingface_hub; extra == "all"
168
+ Requires-Dist: peft; extra == "all"
169
+ Requires-Dist: bokeh; extra == "all"
170
+ Requires-Dist: dnspython[doh]; extra == "all"
171
+ Requires-Dist: yamlscript; extra == "all"
151
172
  Requires-Dist: google-auth; extra == "all"
152
- Requires-Dist: pydantic-settings; extra == "all"
153
- Requires-Dist: tabulate; extra == "all"
154
173
  Requires-Dist: httpx_retries; extra == "all"
155
- Requires-Dist: html2text; extra == "all"
156
- Requires-Dist: google-auth-oauthlib; extra == "all"
157
- Requires-Dist: pymupdf4llm; extra == "all"
158
- Requires-Dist: sre_yield; extra == "all"
159
- Requires-Dist: faker; extra == "all"
160
- Requires-Dist: logfire[fastapi]; extra == "all"
161
- Requires-Dist: torchaudio; extra == "all"
162
- Requires-Dist: yamlscript; extra == "all"
174
+ Requires-Dist: filetype; extra == "all"
163
175
  Requires-Dist: fastapi; extra == "all"
164
- Requires-Dist: json_repair; extra == "all"
165
- Requires-Dist: tokenizers; extra == "all"
166
- Requires-Dist: peft; extra == "all"
167
- Requires-Dist: flet[all]; extra == "all"
168
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
169
- Requires-Dist: logfire[httpx]; extra == "all"
176
+ Requires-Dist: flet-webview; extra == "all"
177
+ Requires-Dist: semver; extra == "all"
170
178
  Requires-Dist: cachetools; extra == "all"
171
- Requires-Dist: openai; extra == "all"
172
- Requires-Dist: httpx; extra == "all"
173
- Requires-Dist: pymupdf; extra == "all"
174
- Requires-Dist: dnspython[doh]; extra == "all"
175
- Requires-Dist: google-api-python-client; extra == "all"
179
+ Requires-Dist: appdirs; extra == "all"
180
+ Requires-Dist: pydantic; extra == "all"
181
+ Requires-Dist: tokenizers; extra == "all"
176
182
  Requires-Dist: Unidecode; extra == "all"
177
- Requires-Dist: contexttimer; extra == "all"
178
- Requires-Dist: bokeh; extra == "all"
179
- Requires-Dist: setuptools; extra == "all"
180
- Requires-Dist: pytest-cov; extra == "all"
181
- Requires-Dist: pandas; extra == "all"
182
- Requires-Dist: flet-webview; extra == "all"
183
- Requires-Dist: flet-video; extra == "all"
183
+ Requires-Dist: pyyaml; extra == "all"
184
184
  Dynamic: author
185
185
  Dynamic: author-email
186
186
  Dynamic: description
@@ -1,6 +1,5 @@
1
- import dns as dnspython
2
1
  from dataclasses import dataclass
3
- from dns import query
2
+ from dns import query as dnspython_query, message as dnspython_message, rdatatype as dnspython_rdatatype, rcode as dnspython_rcode
4
3
  from functools import cached_property
5
4
  from httpx_retries import Retry, RetryTransport
6
5
  from typing import Optional
@@ -44,7 +43,7 @@ class Plain:
44
43
  def resolve(self, exchange: Exchange):
45
44
 
46
45
  with logger.span(f'UDP {self.host}:{self.port}'):
47
- response_plain = query.udp(q=exchange.query_last, where=self.host, port=self.port)
46
+ response_plain = dnspython_query.udp(q=exchange.query_last, where=self.host, port=self.port)
48
47
  response = Response.from_message(response_plain)
49
48
  for answer in response.message.answer:
50
49
  answer.ttl = max(answer.ttl, self.ttl_min or answer.ttl)
@@ -70,7 +69,7 @@ class HTTP:
70
69
 
71
70
  @cached_property
72
71
  def ip(self):
73
- message = dnspython.message.make_query(self.host, dnspython.rdatatype.A, flags=0)
72
+ message = dnspython_message.make_query(self.host, dnspython_rdatatype.A, flags=0)
74
73
  exchange = Exchange.from_wire(message.to_wire(), ip=None, port=None)
75
74
  self.BOOTSTRAP.resolve(exchange)
76
75
  ip = next(iter(exchange.response.answer.items.keys())).address
@@ -93,6 +92,6 @@ class HTTP:
93
92
  exchange.response = response
94
93
 
95
94
  except Exception as exception:
96
- exchange.response.message.set_rcode(dnspython.rcode.SERVFAIL)
95
+ exchange.response.message.set_rcode(dnspython_rcode.SERVFAIL)
97
96
  exchange.response.is_complete = True
98
97
  logger.exception(exception)
@@ -1,8 +1,7 @@
1
1
  import dns
2
2
  import httpx
3
3
  from dataclasses import dataclass, field
4
- from dns import rcode as dnsrcode
5
- from dns import reversename
4
+ from dns import rcode as dnspython_rcode, reversename as dnspython_reversename
6
5
  from dns.message import Message, QueryMessage
7
6
  from dns.rrset import RRset
8
7
  from functools import cached_property
@@ -11,17 +10,17 @@ from typing import Self, Optional, List
11
10
  from fmtr.tools.string_tools import join
12
11
 
13
12
  TTL_CODE_DEFAULTS = {
14
- dnsrcode.NOERROR: 300, # Successful query
15
- dnsrcode.FORMERR: 60, # Format error
16
- dnsrcode.SERVFAIL: 10, # Server failure
17
- dnsrcode.NXDOMAIN: 60 * 60, # Non-existent domain
18
- dnsrcode.NOTIMP: 60, # Not implemented
19
- dnsrcode.REFUSED: 60, # Refused
20
- dnsrcode.YXDOMAIN: 600, # Name exists when it should not
21
- dnsrcode.YXRRSET: 600, # RR Set exists when it should not
22
- dnsrcode.NXRRSET: 300, # RR Set that should exist does not
23
- dnsrcode.NOTAUTH: 60, # Not authorized
24
- dnsrcode.NOTZONE: 60 # Name not contained in zone
13
+ dnspython_rcode.NOERROR: 300, # Successful query
14
+ dnspython_rcode.FORMERR: 60, # Format error
15
+ dnspython_rcode.SERVFAIL: 10, # Server failure
16
+ dnspython_rcode.NXDOMAIN: 60 * 60, # Non-existent domain
17
+ dnspython_rcode.NOTIMP: 60, # Not implemented
18
+ dnspython_rcode.REFUSED: 60, # Refused
19
+ dnspython_rcode.YXDOMAIN: 600, # Name exists when it should not
20
+ dnspython_rcode.YXRRSET: 600, # RR Set exists when it should not
21
+ dnspython_rcode.NXRRSET: 300, # RR Set that should exist does not
22
+ dnspython_rcode.NOTAUTH: 60, # Not authorized
23
+ dnspython_rcode.NOTZONE: 60 # Name not contained in zone
25
24
  }
26
25
 
27
26
  @dataclass
@@ -74,12 +73,12 @@ class Response(BaseDNSData):
74
73
  return self.message.answer[-1]
75
74
 
76
75
  @property
77
- def rcode(self) -> dnsrcode.Rcode:
76
+ def rcode(self) -> dnspython_rcode.Rcode:
78
77
  return self.message.rcode()
79
78
 
80
79
  @property
81
80
  def rcode_text(self) -> str:
82
- return dnsrcode.to_text(self.rcode)
81
+ return dnspython_rcode.to_text(self.rcode)
83
82
 
84
83
  @property
85
84
  def ttl(self) -> int:
@@ -94,7 +93,7 @@ class Response(BaseDNSData):
94
93
  ttl = min(ttls)
95
94
  return ttl
96
95
 
97
- ttl = TTL_CODE_DEFAULTS.get(self.rcode, dnsrcode.NXDOMAIN)
96
+ ttl = TTL_CODE_DEFAULTS.get(self.rcode, dnspython_rcode.NXDOMAIN)
98
97
  return ttl
99
98
 
100
99
 
@@ -252,7 +251,7 @@ class Exchange:
252
251
  Create an Exchange for a reverse lookup of this Exchange's client IP.
253
252
 
254
253
  """
255
- name = reversename.from_address(self.ip)
254
+ name = dnspython_reversename.from_address(self.ip)
256
255
  query = dns.message.make_query(name, dns.rdatatype.PTR)
257
256
  exchange = self.__class__.from_wire(query.to_wire(), ip=self.ip, port=self.port, is_internal=True)
258
257
  return exchange
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
- import dns.rcode
3
2
  from dataclasses import dataclass, field
4
3
  from datetime import timedelta
4
+ from dns import rcode as dnspython_rcode
5
5
  from functools import cached_property
6
6
  from typing import Optional
7
7
 
@@ -102,7 +102,7 @@ class Plain(asyncio.DatagramProtocol):
102
102
  Warn about any errors
103
103
 
104
104
  """
105
- if exchange.response.rcode != dns.rcode.NOERROR:
105
+ if exchange.response.rcode != dnspython_rcode.NOERROR:
106
106
  logger.warning(f'Error {exchange.response.rcode_text=}')
107
107
 
108
108
  async def handle(self, exchange: Exchange):
@@ -0,0 +1 @@
1
+ 1.3.20
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.19
3
+ Version: 1.3.20
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
@@ -126,61 +126,61 @@ Requires-Dist: logfire[httpx]; extra == "http"
126
126
  Provides-Extra: setup
127
127
  Requires-Dist: setuptools; extra == "setup"
128
128
  Provides-Extra: all
129
+ Requires-Dist: json_repair; extra == "all"
130
+ Requires-Dist: pymupdf4llm; extra == "all"
131
+ Requires-Dist: setuptools; extra == "all"
132
+ Requires-Dist: dask[bag]; extra == "all"
133
+ Requires-Dist: ollama; extra == "all"
134
+ Requires-Dist: contexttimer; extra == "all"
135
+ Requires-Dist: logfire[fastapi]; extra == "all"
136
+ Requires-Dist: html2text; extra == "all"
137
+ Requires-Dist: pandas; extra == "all"
138
+ Requires-Dist: faker; extra == "all"
139
+ Requires-Dist: httpx; extra == "all"
140
+ Requires-Dist: flet[all]; extra == "all"
141
+ Requires-Dist: sre_yield; extra == "all"
142
+ Requires-Dist: tinynetrc; extra == "all"
143
+ Requires-Dist: logfire; extra == "all"
144
+ Requires-Dist: flet-video; extra == "all"
145
+ Requires-Dist: pymupdf; extra == "all"
146
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
147
+ Requires-Dist: regex; extra == "all"
148
+ Requires-Dist: google-auth-httplib2; extra == "all"
149
+ Requires-Dist: pydantic-settings; extra == "all"
150
+ Requires-Dist: uvicorn[standard]; extra == "all"
151
+ Requires-Dist: google-auth-oauthlib; extra == "all"
152
+ Requires-Dist: torchvision; extra == "all"
129
153
  Requires-Dist: docker; extra == "all"
154
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
155
+ Requires-Dist: pytest-cov; extra == "all"
130
156
  Requires-Dist: sentence_transformers; extra == "all"
131
- Requires-Dist: openpyxl; extra == "all"
132
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
133
- Requires-Dist: appdirs; extra == "all"
134
- Requires-Dist: pydantic; extra == "all"
135
157
  Requires-Dist: diskcache; extra == "all"
136
- Requires-Dist: torchvision; extra == "all"
137
- Requires-Dist: uvicorn[standard]; extra == "all"
138
- Requires-Dist: google-auth-httplib2; extra == "all"
158
+ Requires-Dist: huggingface_hub; extra == "all"
159
+ Requires-Dist: openai; extra == "all"
160
+ Requires-Dist: openpyxl; extra == "all"
161
+ Requires-Dist: google-api-python-client; extra == "all"
162
+ Requires-Dist: logfire[httpx]; extra == "all"
139
163
  Requires-Dist: distributed; extra == "all"
140
- Requires-Dist: pyyaml; extra == "all"
141
- Requires-Dist: logfire; extra == "all"
164
+ Requires-Dist: tabulate; extra == "all"
142
165
  Requires-Dist: transformers[sentencepiece]; extra == "all"
143
- Requires-Dist: filetype; extra == "all"
144
- Requires-Dist: regex; extra == "all"
145
- Requires-Dist: ollama; extra == "all"
166
+ Requires-Dist: torchaudio; extra == "all"
146
167
  Requires-Dist: deepmerge; extra == "all"
147
- Requires-Dist: tinynetrc; extra == "all"
148
- Requires-Dist: semver; extra == "all"
149
- Requires-Dist: dask[bag]; extra == "all"
150
- Requires-Dist: huggingface_hub; extra == "all"
168
+ Requires-Dist: peft; extra == "all"
169
+ Requires-Dist: bokeh; extra == "all"
170
+ Requires-Dist: dnspython[doh]; extra == "all"
171
+ Requires-Dist: yamlscript; extra == "all"
151
172
  Requires-Dist: google-auth; extra == "all"
152
- Requires-Dist: pydantic-settings; extra == "all"
153
- Requires-Dist: tabulate; extra == "all"
154
173
  Requires-Dist: httpx_retries; extra == "all"
155
- Requires-Dist: html2text; extra == "all"
156
- Requires-Dist: google-auth-oauthlib; extra == "all"
157
- Requires-Dist: pymupdf4llm; extra == "all"
158
- Requires-Dist: sre_yield; extra == "all"
159
- Requires-Dist: faker; extra == "all"
160
- Requires-Dist: logfire[fastapi]; extra == "all"
161
- Requires-Dist: torchaudio; extra == "all"
162
- Requires-Dist: yamlscript; extra == "all"
174
+ Requires-Dist: filetype; extra == "all"
163
175
  Requires-Dist: fastapi; extra == "all"
164
- Requires-Dist: json_repair; extra == "all"
165
- Requires-Dist: tokenizers; extra == "all"
166
- Requires-Dist: peft; extra == "all"
167
- Requires-Dist: flet[all]; extra == "all"
168
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
169
- Requires-Dist: logfire[httpx]; extra == "all"
176
+ Requires-Dist: flet-webview; extra == "all"
177
+ Requires-Dist: semver; extra == "all"
170
178
  Requires-Dist: cachetools; extra == "all"
171
- Requires-Dist: openai; extra == "all"
172
- Requires-Dist: httpx; extra == "all"
173
- Requires-Dist: pymupdf; extra == "all"
174
- Requires-Dist: dnspython[doh]; extra == "all"
175
- Requires-Dist: google-api-python-client; extra == "all"
179
+ Requires-Dist: appdirs; extra == "all"
180
+ Requires-Dist: pydantic; extra == "all"
181
+ Requires-Dist: tokenizers; extra == "all"
176
182
  Requires-Dist: Unidecode; extra == "all"
177
- Requires-Dist: contexttimer; extra == "all"
178
- Requires-Dist: bokeh; extra == "all"
179
- Requires-Dist: setuptools; extra == "all"
180
- Requires-Dist: pytest-cov; extra == "all"
181
- Requires-Dist: pandas; extra == "all"
182
- Requires-Dist: flet-webview; extra == "all"
183
- Requires-Dist: flet-video; extra == "all"
183
+ Requires-Dist: pyyaml; extra == "all"
184
184
  Dynamic: author
185
185
  Dynamic: author-email
186
186
  Dynamic: description
@@ -1 +0,0 @@
1
- 1.3.19
File without changes
File without changes
@@ -14,61 +14,61 @@ pydantic-ai[logfire,openai]
14
14
  ollama
15
15
 
16
16
  [all]
17
+ json_repair
18
+ pymupdf4llm
19
+ setuptools
20
+ dask[bag]
21
+ ollama
22
+ contexttimer
23
+ logfire[fastapi]
24
+ html2text
25
+ pandas
26
+ faker
27
+ httpx
28
+ flet[all]
29
+ sre_yield
30
+ tinynetrc
31
+ logfire
32
+ flet-video
33
+ pymupdf
34
+ pydantic-ai[logfire,openai]
35
+ regex
36
+ google-auth-httplib2
37
+ pydantic-settings
38
+ uvicorn[standard]
39
+ google-auth-oauthlib
40
+ torchvision
17
41
  docker
42
+ pydevd-pycharm~=251.25410.159
43
+ pytest-cov
18
44
  sentence_transformers
19
- openpyxl
20
- pydantic-ai[logfire,openai]
21
- appdirs
22
- pydantic
23
45
  diskcache
24
- torchvision
25
- uvicorn[standard]
26
- google-auth-httplib2
46
+ huggingface_hub
47
+ openai
48
+ openpyxl
49
+ google-api-python-client
50
+ logfire[httpx]
27
51
  distributed
28
- pyyaml
29
- logfire
52
+ tabulate
30
53
  transformers[sentencepiece]
31
- filetype
32
- regex
33
- ollama
54
+ torchaudio
34
55
  deepmerge
35
- tinynetrc
36
- semver
37
- dask[bag]
38
- huggingface_hub
56
+ peft
57
+ bokeh
58
+ dnspython[doh]
59
+ yamlscript
39
60
  google-auth
40
- pydantic-settings
41
- tabulate
42
61
  httpx_retries
43
- html2text
44
- google-auth-oauthlib
45
- pymupdf4llm
46
- sre_yield
47
- faker
48
- logfire[fastapi]
49
- torchaudio
50
- yamlscript
62
+ filetype
51
63
  fastapi
52
- json_repair
53
- tokenizers
54
- peft
55
- flet[all]
56
- pydevd-pycharm~=251.25410.159
57
- logfire[httpx]
64
+ flet-webview
65
+ semver
58
66
  cachetools
59
- openai
60
- httpx
61
- pymupdf
62
- dnspython[doh]
63
- google-api-python-client
67
+ appdirs
68
+ pydantic
69
+ tokenizers
64
70
  Unidecode
65
- contexttimer
66
- bokeh
67
- setuptools
68
- pytest-cov
69
- pandas
70
- flet-webview
71
- flet-video
71
+ pyyaml
72
72
 
73
73
  [api]
74
74
  fastapi
File without changes
File without changes
File without changes