fmtr.tools 1.3.18__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.18 → fmtr_tools-1.3.20}/PKG-INFO +45 -45
  2. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/client.py +4 -5
  3. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/dm.py +16 -17
  4. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/server.py +5 -2
  5. fmtr_tools-1.3.20/fmtr/tools/version +1 -0
  6. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/PKG-INFO +45 -45
  7. fmtr_tools-1.3.18/fmtr/tools/version +0 -1
  8. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/LICENSE +0 -0
  9. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/README.md +0 -0
  10. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/__init__.py +0 -0
  11. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/ai_tools/__init__.py +0 -0
  12. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  13. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  14. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/api_tools.py +0 -0
  15. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/async_tools.py +0 -0
  16. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/augmentation_tools.py +0 -0
  17. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/caching_tools.py +0 -0
  18. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/constants.py +0 -0
  19. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/data_modelling_tools.py +0 -0
  20. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/dataclass_tools.py +0 -0
  21. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/datatype_tools.py +0 -0
  22. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/debugging_tools.py +0 -0
  23. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/__init__.py +0 -0
  24. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/dns_tools/proxy.py +0 -0
  25. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/docker_tools.py +0 -0
  26. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/__init__.py +0 -0
  27. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  28. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/ep_test.py +0 -0
  29. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  30. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  31. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  32. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/environment_tools.py +0 -0
  33. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/function_tools.py +0 -0
  34. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/google_api_tools.py +0 -0
  35. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/hash_tools.py +0 -0
  36. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/hfh_tools.py +0 -0
  37. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/html_tools.py +0 -0
  38. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/http_tools.py +0 -0
  39. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/import_tools.py +0 -0
  40. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/inspection_tools.py +0 -0
  41. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/interface_tools.py +0 -0
  42. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/iterator_tools.py +0 -0
  43. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/json_fix_tools.py +0 -0
  44. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/json_tools.py +0 -0
  45. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/logging_tools.py +0 -0
  46. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/merging_tools.py +0 -0
  47. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/metric_tools.py +0 -0
  48. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/name_tools.py +0 -0
  49. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/netrc_tools.py +0 -0
  50. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/openai_tools.py +0 -0
  51. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/packaging_tools.py +0 -0
  52. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/parallel_tools.py +0 -0
  53. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/path_tools/__init__.py +0 -0
  54. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  55. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/path_tools/path_tools.py +0 -0
  56. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  57. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/pattern_tools.py +0 -0
  58. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/pdf_tools.py +0 -0
  59. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/platform_tools.py +0 -0
  60. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/process_tools.py +0 -0
  61. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/profiling_tools.py +0 -0
  62. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/random_tools.py +0 -0
  63. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/semantic_tools.py +0 -0
  64. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/settings_tools.py +0 -0
  65. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/setup_tools/__init__.py +0 -0
  66. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  67. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/spaces_tools.py +0 -0
  68. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/string_tools.py +0 -0
  69. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tabular_tools.py +0 -0
  70. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tests/__init__.py +0 -0
  71. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tests/conftest.py +0 -0
  72. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tests/helpers.py +0 -0
  73. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_datatype.py +0 -0
  74. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_environment.py +0 -0
  75. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_json.py +0 -0
  76. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_path.py +0 -0
  77. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tests/test_yaml.py +0 -0
  78. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tokenization_tools.py +0 -0
  79. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/tools.py +0 -0
  80. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/unicode_tools.py +0 -0
  81. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/version_tools/__init__.py +0 -0
  82. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/version_tools/version_tools.py +0 -0
  83. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr/tools/yaml_tools.py +0 -0
  84. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  85. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  86. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/entry_points.txt +0 -0
  87. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/requires.txt +44 -44
  88. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/fmtr.tools.egg-info/top_level.txt +0 -0
  89. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/pyproject.toml +0 -0
  90. {fmtr_tools-1.3.18 → fmtr_tools-1.3.20}/setup.cfg +0 -0
  91. {fmtr_tools-1.3.18 → 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.18
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: tabulate; extra == "all"
130
- Requires-Dist: Unidecode; extra == "all"
131
- Requires-Dist: pytest-cov; extra == "all"
132
- Requires-Dist: torchvision; extra == "all"
133
- Requires-Dist: diskcache; extra == "all"
134
- Requires-Dist: google-api-python-client; extra == "all"
135
- Requires-Dist: faker; extra == "all"
136
- Requires-Dist: sentence_transformers; extra == "all"
137
- Requires-Dist: logfire[httpx]; extra == "all"
138
- Requires-Dist: logfire[fastapi]; extra == "all"
139
- Requires-Dist: peft; extra == "all"
140
- Requires-Dist: bokeh; extra == "all"
141
- Requires-Dist: semver; 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"
142
133
  Requires-Dist: ollama; extra == "all"
143
- Requires-Dist: flet[all]; extra == "all"
144
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
145
- Requires-Dist: logfire; extra == "all"
146
134
  Requires-Dist: contexttimer; extra == "all"
147
- Requires-Dist: google-auth-oauthlib; extra == "all"
148
- Requires-Dist: transformers[sentencepiece]; extra == "all"
149
- Requires-Dist: google-auth-httplib2; extra == "all"
150
- Requires-Dist: cachetools; extra == "all"
151
- Requires-Dist: deepmerge; extra == "all"
152
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
153
- Requires-Dist: openpyxl; 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"
154
141
  Requires-Dist: sre_yield; extra == "all"
155
142
  Requires-Dist: tinynetrc; extra == "all"
156
- Requires-Dist: flet-webview; extra == "all"
157
- Requires-Dist: pydantic; extra == "all"
158
- Requires-Dist: openai; extra == "all"
159
- Requires-Dist: google-auth; extra == "all"
160
- Requires-Dist: dnspython[doh]; extra == "all"
161
- Requires-Dist: httpx_retries; extra == "all"
143
+ Requires-Dist: logfire; extra == "all"
162
144
  Requires-Dist: flet-video; extra == "all"
163
- Requires-Dist: tokenizers; extra == "all"
164
- Requires-Dist: json_repair; extra == "all"
165
- Requires-Dist: docker; extra == "all"
166
- Requires-Dist: dask[bag]; extra == "all"
167
145
  Requires-Dist: pymupdf; extra == "all"
168
- Requires-Dist: yamlscript; extra == "all"
169
- Requires-Dist: fastapi; extra == "all"
170
- Requires-Dist: httpx; 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"
171
149
  Requires-Dist: pydantic-settings; extra == "all"
172
- Requires-Dist: torchaudio; extra == "all"
150
+ Requires-Dist: uvicorn[standard]; extra == "all"
151
+ Requires-Dist: google-auth-oauthlib; extra == "all"
152
+ Requires-Dist: torchvision; extra == "all"
153
+ Requires-Dist: docker; extra == "all"
154
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
155
+ Requires-Dist: pytest-cov; extra == "all"
156
+ Requires-Dist: sentence_transformers; extra == "all"
157
+ Requires-Dist: diskcache; extra == "all"
173
158
  Requires-Dist: huggingface_hub; extra == "all"
174
- Requires-Dist: pymupdf4llm; extra == "all"
175
- Requires-Dist: pandas; extra == "all"
176
- Requires-Dist: html2text; extra == "all"
177
- Requires-Dist: setuptools; 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"
178
163
  Requires-Dist: distributed; extra == "all"
179
- Requires-Dist: uvicorn[standard]; extra == "all"
180
- Requires-Dist: pyyaml; extra == "all"
181
- Requires-Dist: regex; extra == "all"
164
+ Requires-Dist: tabulate; extra == "all"
165
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
166
+ Requires-Dist: torchaudio; extra == "all"
167
+ Requires-Dist: deepmerge; 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"
172
+ Requires-Dist: google-auth; extra == "all"
173
+ Requires-Dist: httpx_retries; extra == "all"
182
174
  Requires-Dist: filetype; extra == "all"
175
+ Requires-Dist: fastapi; extra == "all"
176
+ Requires-Dist: flet-webview; extra == "all"
177
+ Requires-Dist: semver; extra == "all"
178
+ Requires-Dist: cachetools; extra == "all"
183
179
  Requires-Dist: appdirs; extra == "all"
180
+ Requires-Dist: pydantic; extra == "all"
181
+ Requires-Dist: tokenizers; extra == "all"
182
+ Requires-Dist: Unidecode; 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):
@@ -132,4 +132,7 @@ class Plain(asyncio.DatagramProtocol):
132
132
  self.log_dns_errors(exchange)
133
133
  self.log_response(exchange)
134
134
 
135
+ if exchange.is_internal:
136
+ return
137
+
135
138
  self.transport.sendto(exchange.response.message.to_wire(), exchange.addr)
@@ -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.18
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: tabulate; extra == "all"
130
- Requires-Dist: Unidecode; extra == "all"
131
- Requires-Dist: pytest-cov; extra == "all"
132
- Requires-Dist: torchvision; extra == "all"
133
- Requires-Dist: diskcache; extra == "all"
134
- Requires-Dist: google-api-python-client; extra == "all"
135
- Requires-Dist: faker; extra == "all"
136
- Requires-Dist: sentence_transformers; extra == "all"
137
- Requires-Dist: logfire[httpx]; extra == "all"
138
- Requires-Dist: logfire[fastapi]; extra == "all"
139
- Requires-Dist: peft; extra == "all"
140
- Requires-Dist: bokeh; extra == "all"
141
- Requires-Dist: semver; 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"
142
133
  Requires-Dist: ollama; extra == "all"
143
- Requires-Dist: flet[all]; extra == "all"
144
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
145
- Requires-Dist: logfire; extra == "all"
146
134
  Requires-Dist: contexttimer; extra == "all"
147
- Requires-Dist: google-auth-oauthlib; extra == "all"
148
- Requires-Dist: transformers[sentencepiece]; extra == "all"
149
- Requires-Dist: google-auth-httplib2; extra == "all"
150
- Requires-Dist: cachetools; extra == "all"
151
- Requires-Dist: deepmerge; extra == "all"
152
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
153
- Requires-Dist: openpyxl; 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"
154
141
  Requires-Dist: sre_yield; extra == "all"
155
142
  Requires-Dist: tinynetrc; extra == "all"
156
- Requires-Dist: flet-webview; extra == "all"
157
- Requires-Dist: pydantic; extra == "all"
158
- Requires-Dist: openai; extra == "all"
159
- Requires-Dist: google-auth; extra == "all"
160
- Requires-Dist: dnspython[doh]; extra == "all"
161
- Requires-Dist: httpx_retries; extra == "all"
143
+ Requires-Dist: logfire; extra == "all"
162
144
  Requires-Dist: flet-video; extra == "all"
163
- Requires-Dist: tokenizers; extra == "all"
164
- Requires-Dist: json_repair; extra == "all"
165
- Requires-Dist: docker; extra == "all"
166
- Requires-Dist: dask[bag]; extra == "all"
167
145
  Requires-Dist: pymupdf; extra == "all"
168
- Requires-Dist: yamlscript; extra == "all"
169
- Requires-Dist: fastapi; extra == "all"
170
- Requires-Dist: httpx; 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"
171
149
  Requires-Dist: pydantic-settings; extra == "all"
172
- Requires-Dist: torchaudio; extra == "all"
150
+ Requires-Dist: uvicorn[standard]; extra == "all"
151
+ Requires-Dist: google-auth-oauthlib; extra == "all"
152
+ Requires-Dist: torchvision; extra == "all"
153
+ Requires-Dist: docker; extra == "all"
154
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
155
+ Requires-Dist: pytest-cov; extra == "all"
156
+ Requires-Dist: sentence_transformers; extra == "all"
157
+ Requires-Dist: diskcache; extra == "all"
173
158
  Requires-Dist: huggingface_hub; extra == "all"
174
- Requires-Dist: pymupdf4llm; extra == "all"
175
- Requires-Dist: pandas; extra == "all"
176
- Requires-Dist: html2text; extra == "all"
177
- Requires-Dist: setuptools; 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"
178
163
  Requires-Dist: distributed; extra == "all"
179
- Requires-Dist: uvicorn[standard]; extra == "all"
180
- Requires-Dist: pyyaml; extra == "all"
181
- Requires-Dist: regex; extra == "all"
164
+ Requires-Dist: tabulate; extra == "all"
165
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
166
+ Requires-Dist: torchaudio; extra == "all"
167
+ Requires-Dist: deepmerge; 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"
172
+ Requires-Dist: google-auth; extra == "all"
173
+ Requires-Dist: httpx_retries; extra == "all"
182
174
  Requires-Dist: filetype; extra == "all"
175
+ Requires-Dist: fastapi; extra == "all"
176
+ Requires-Dist: flet-webview; extra == "all"
177
+ Requires-Dist: semver; extra == "all"
178
+ Requires-Dist: cachetools; extra == "all"
183
179
  Requires-Dist: appdirs; extra == "all"
180
+ Requires-Dist: pydantic; extra == "all"
181
+ Requires-Dist: tokenizers; extra == "all"
182
+ Requires-Dist: Unidecode; 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.18
File without changes
File without changes
@@ -14,61 +14,61 @@ pydantic-ai[logfire,openai]
14
14
  ollama
15
15
 
16
16
  [all]
17
- tabulate
18
- Unidecode
19
- pytest-cov
20
- torchvision
21
- diskcache
22
- google-api-python-client
23
- faker
24
- sentence_transformers
25
- logfire[httpx]
26
- logfire[fastapi]
27
- peft
28
- bokeh
29
- semver
17
+ json_repair
18
+ pymupdf4llm
19
+ setuptools
20
+ dask[bag]
30
21
  ollama
31
- flet[all]
32
- pydantic-ai[logfire,openai]
33
- logfire
34
22
  contexttimer
35
- google-auth-oauthlib
36
- transformers[sentencepiece]
37
- google-auth-httplib2
38
- cachetools
39
- deepmerge
40
- pydevd-pycharm~=251.25410.159
41
- openpyxl
23
+ logfire[fastapi]
24
+ html2text
25
+ pandas
26
+ faker
27
+ httpx
28
+ flet[all]
42
29
  sre_yield
43
30
  tinynetrc
44
- flet-webview
45
- pydantic
46
- openai
47
- google-auth
48
- dnspython[doh]
49
- httpx_retries
31
+ logfire
50
32
  flet-video
51
- tokenizers
52
- json_repair
53
- docker
54
- dask[bag]
55
33
  pymupdf
56
- yamlscript
57
- fastapi
58
- httpx
34
+ pydantic-ai[logfire,openai]
35
+ regex
36
+ google-auth-httplib2
59
37
  pydantic-settings
60
- torchaudio
38
+ uvicorn[standard]
39
+ google-auth-oauthlib
40
+ torchvision
41
+ docker
42
+ pydevd-pycharm~=251.25410.159
43
+ pytest-cov
44
+ sentence_transformers
45
+ diskcache
61
46
  huggingface_hub
62
- pymupdf4llm
63
- pandas
64
- html2text
65
- setuptools
47
+ openai
48
+ openpyxl
49
+ google-api-python-client
50
+ logfire[httpx]
66
51
  distributed
67
- uvicorn[standard]
68
- pyyaml
69
- regex
52
+ tabulate
53
+ transformers[sentencepiece]
54
+ torchaudio
55
+ deepmerge
56
+ peft
57
+ bokeh
58
+ dnspython[doh]
59
+ yamlscript
60
+ google-auth
61
+ httpx_retries
70
62
  filetype
63
+ fastapi
64
+ flet-webview
65
+ semver
66
+ cachetools
71
67
  appdirs
68
+ pydantic
69
+ tokenizers
70
+ Unidecode
71
+ pyyaml
72
72
 
73
73
  [api]
74
74
  fastapi
File without changes
File without changes
File without changes