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