fmtr.tools 1.1.24__py3-none-any.whl → 1.1.26__py3-none-any.whl
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/__init__.py +7 -1
- fmtr/tools/http_tools.py +26 -0
- fmtr/tools/pattern_tools.py +7 -72
- fmtr/tools/setup_tools/__init__.py +1 -1
- fmtr/tools/setup_tools/setup_tools.py +16 -11
- fmtr/tools/version +1 -1
- {fmtr_tools-1.1.24.dist-info → fmtr_tools-1.1.26.dist-info}/METADATA +43 -43
- {fmtr_tools-1.1.24.dist-info → fmtr_tools-1.1.26.dist-info}/RECORD +12 -11
- {fmtr_tools-1.1.24.dist-info → fmtr_tools-1.1.26.dist-info}/WHEEL +0 -0
- {fmtr_tools-1.1.24.dist-info → fmtr_tools-1.1.26.dist-info}/entry_points.txt +0 -0
- {fmtr_tools-1.1.24.dist-info → fmtr_tools-1.1.26.dist-info}/licenses/LICENSE +0 -0
- {fmtr_tools-1.1.24.dist-info → fmtr_tools-1.1.26.dist-info}/top_level.txt +0 -0
fmtr/tools/__init__.py
CHANGED
|
@@ -31,7 +31,7 @@ from fmtr.tools.path_tools import Path, PackagePaths, AppPaths
|
|
|
31
31
|
from fmtr.tools import ai_tools as ai
|
|
32
32
|
|
|
33
33
|
import fmtr.tools.setup_tools as setup
|
|
34
|
-
from fmtr.tools.setup_tools import Setup, SetupPaths, Dependencies
|
|
34
|
+
from fmtr.tools.setup_tools import Setup, SetupPaths, Dependencies, Tools
|
|
35
35
|
|
|
36
36
|
try:
|
|
37
37
|
from fmtr.tools import augmentation_tools as augmentation
|
|
@@ -176,3 +176,9 @@ try:
|
|
|
176
176
|
from fmtr.tools import dns_tools as dns
|
|
177
177
|
except ImportError as exception:
|
|
178
178
|
dns = MissingExtraMockModule('dns', exception)
|
|
179
|
+
|
|
180
|
+
try:
|
|
181
|
+
from fmtr.tools import http_tools as http
|
|
182
|
+
from fmtr.tools.http_tools import Client
|
|
183
|
+
except ImportError as exception:
|
|
184
|
+
http = Client = MissingExtraMockModule('http', exception)
|
fmtr/tools/http_tools.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx_retries import RetryTransport
|
|
3
|
+
|
|
4
|
+
from fmtr.tools import logging_tools
|
|
5
|
+
|
|
6
|
+
logging_tools.logger.instrument_httpx()
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Client(httpx.Client):
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
Instrumented client base
|
|
13
|
+
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
TRANSPORT = RetryTransport()
|
|
17
|
+
|
|
18
|
+
def __init__(self, *args, **kwargs):
|
|
19
|
+
super().__init__(*args, transport=self.TRANSPORT, **kwargs)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
client = Client()
|
|
23
|
+
|
|
24
|
+
if __name__ == '__main__':
|
|
25
|
+
resp = client.get('http://httpbin.org/delay/10')
|
|
26
|
+
resp
|
fmtr/tools/pattern_tools.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import regex as re
|
|
2
1
|
from dataclasses import dataclass
|
|
3
2
|
from functools import cached_property
|
|
4
3
|
from typing import List
|
|
5
4
|
|
|
5
|
+
import regex as re
|
|
6
|
+
|
|
6
7
|
from fmtr.tools.logging_tools import logger
|
|
7
8
|
|
|
8
9
|
|
|
@@ -15,7 +16,7 @@ class RewriteCircularLoopError(Exception):
|
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
@dataclass
|
|
18
|
-
class
|
|
19
|
+
class Rewrite:
|
|
19
20
|
"""
|
|
20
21
|
Represents a single rule for pattern matching and target string replacement.
|
|
21
22
|
|
|
@@ -66,7 +67,7 @@ class Rewriter:
|
|
|
66
67
|
recursive rewriting until a stable state is reached.
|
|
67
68
|
|
|
68
69
|
"""
|
|
69
|
-
rules: List[
|
|
70
|
+
rules: List[Rewrite]
|
|
70
71
|
|
|
71
72
|
@cached_property
|
|
72
73
|
def pattern(self):
|
|
@@ -106,7 +107,7 @@ class Rewriter:
|
|
|
106
107
|
|
|
107
108
|
"""
|
|
108
109
|
|
|
109
|
-
match = self.rx.
|
|
110
|
+
match = self.rx.fullmatch(source)
|
|
110
111
|
|
|
111
112
|
if not match:
|
|
112
113
|
return source
|
|
@@ -163,75 +164,9 @@ class Rewriter:
|
|
|
163
164
|
|
|
164
165
|
@classmethod
|
|
165
166
|
def from_data(cls, data):
|
|
166
|
-
rules = [
|
|
167
|
+
rules = [Rewrite(*pair) for pair in data.items()]
|
|
167
168
|
self = cls(rules=rules)
|
|
168
169
|
return self
|
|
169
170
|
|
|
170
171
|
|
|
171
|
-
|
|
172
|
-
data = {
|
|
173
|
-
|
|
174
|
-
r'(?P<name>[a-z]+)\.dev\.example\.com': '{name}.test.example.com',
|
|
175
|
-
r'img\d+\.static\.cdn\.example\.com': 'images.cdn.example.com',
|
|
176
|
-
r'service\.(?P<env>dev|staging|prod)\.example\.org': '{env}-service.example.org',
|
|
177
|
-
r'legacy\.(?P<region>[a-z]+)\.oldsite\.com': '{region}.newsitenow.com',
|
|
178
|
-
r'shop\.(?P<country_code>[a-z]{2})\.example\.net': 'store.{country_code}.example.net',
|
|
179
|
-
r'(?P<user>[a-z]+)\.mail\.example\.com': '{user}.email.example.com',
|
|
180
|
-
r'app1\.cluster(?P<num>[0-9]+)\.example\.cloud': 'service{num}.example.cloud',
|
|
181
|
-
r'(?P<project>[a-z]+)\.research\.corp\.com': '{project}.lab.corp.com',
|
|
182
|
-
r'cdn\.(?P<version>v[0-9]+)\.content\.net': 'static.{version}.content.net',
|
|
183
|
-
# Literal rule without named group
|
|
184
|
-
r'corp\.secureaccess\.com': 'access.corp.com',
|
|
185
|
-
# Literal rule without named group
|
|
186
|
-
r'redirect\.oldsite\.org': 'homepage.newsite.org',
|
|
187
|
-
# # Recursive rules
|
|
188
|
-
|
|
189
|
-
r'archive\.(?P<year>\d{4})\.oldsite\.net': 'legacy.{year}.oldsite.net', # Recursive matching
|
|
190
|
-
r'legacy\.(?P<year>\d{4})\.oldsite\.net': 'archive-backup.{year}.net', # Continuation
|
|
191
|
-
|
|
192
|
-
# r'(?P<subd>[a-zA-Z]+)\.vpn': '{subd}.loop.ts.net',
|
|
193
|
-
# r'(?P<subd>[a-zA-Z]+)\.loop\.ts\.net': '{subd}.vpn', # Recursive loop back to .vpn
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
rewriter = Rewriter.from_data(data)
|
|
197
|
-
|
|
198
|
-
tests = [
|
|
199
|
-
"sales.vpn",
|
|
200
|
-
"marketing.dev.example.com",
|
|
201
|
-
"img01.static.cdn.example.com",
|
|
202
|
-
"service.dev.example.org",
|
|
203
|
-
"legacy.eu.oldsite.com",
|
|
204
|
-
"shop.us.example.net",
|
|
205
|
-
"alice.mail.example.com",
|
|
206
|
-
"app1.cluster1.example.cloud",
|
|
207
|
-
"genetics.research.corp.com",
|
|
208
|
-
"cdn.v2.content.net",
|
|
209
|
-
"corp.secureaccess.com",
|
|
210
|
-
"redirect.oldsite.org",
|
|
211
|
-
"support.bbb.ts.net",
|
|
212
|
-
"support.ccc.ts.net",
|
|
213
|
-
"archive.2022.oldsite.net",
|
|
214
|
-
"legacy.2022.oldsite.net",
|
|
215
|
-
"finance.vpn",
|
|
216
|
-
"engineering.dev.example.com",
|
|
217
|
-
"img02.static.cdn.example.com",
|
|
218
|
-
"service.staging.example.org",
|
|
219
|
-
"legacy.apac.oldsite.com",
|
|
220
|
-
"shop.uk.example.net",
|
|
221
|
-
"bob.mail.example.com",
|
|
222
|
-
"app1.cluster2.example.cloud",
|
|
223
|
-
"astrophysics.research.corp.com",
|
|
224
|
-
"cdn.v3.content.net",
|
|
225
|
-
"archive.2021.oldsite.net",
|
|
226
|
-
"legacy.2021.oldsite.net",
|
|
227
|
-
"quality.bbb.ts.net",
|
|
228
|
-
"quality.ccc.ts.net"
|
|
229
|
-
]
|
|
230
|
-
|
|
231
|
-
logger.warning('hello?')
|
|
232
|
-
for test in tests:
|
|
233
|
-
print(test)
|
|
234
|
-
text = rewriter.rewrite(test)
|
|
235
|
-
text
|
|
236
|
-
|
|
237
|
-
tests
|
|
172
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from fmtr.tools.import_tools import MissingExtraMockModule
|
|
2
2
|
|
|
3
|
-
from fmtr.tools.setup_tools.setup_tools import Setup, SetupPaths, Dependencies
|
|
3
|
+
from fmtr.tools.setup_tools.setup_tools import Setup, SetupPaths, Dependencies, Tools
|
|
4
4
|
|
|
5
5
|
try:
|
|
6
6
|
from setuptools import find_namespace_packages, find_packages, setup as setup_setuptools
|
|
@@ -21,7 +21,6 @@ class SetupPaths(FromCallerMixin):
|
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
23
|
Use calling module path as default path, if not otherwise specified.
|
|
24
|
-
:param org:
|
|
25
24
|
|
|
26
25
|
"""
|
|
27
26
|
if not path:
|
|
@@ -30,8 +29,6 @@ class SetupPaths(FromCallerMixin):
|
|
|
30
29
|
self.org_name = org
|
|
31
30
|
self.repo = Path(path)
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
35
32
|
@property
|
|
36
33
|
def readme(self):
|
|
37
34
|
return self.repo / 'README.md'
|
|
@@ -43,12 +40,14 @@ class SetupPaths(FromCallerMixin):
|
|
|
43
40
|
@cached_property
|
|
44
41
|
def path(self):
|
|
45
42
|
|
|
43
|
+
from fmtr.tools import setup
|
|
44
|
+
|
|
46
45
|
if self.org:
|
|
47
46
|
base = self.org
|
|
48
47
|
else:
|
|
49
48
|
base = self.repo
|
|
50
49
|
|
|
51
|
-
directories = [base / dir for dir in
|
|
50
|
+
directories = [base / dir for dir in setup.find_packages(base)]
|
|
52
51
|
|
|
53
52
|
if len(directories) != 1:
|
|
54
53
|
dirs_str = ', '.join([str(dir) for dir in directories])
|
|
@@ -74,11 +73,6 @@ class SetupPaths(FromCallerMixin):
|
|
|
74
73
|
def name(self) -> str:
|
|
75
74
|
return self.path.stem
|
|
76
75
|
|
|
77
|
-
@property
|
|
78
|
-
def find(self):
|
|
79
|
-
from fmtr.tools import setup
|
|
80
|
-
return setup.find_packages
|
|
81
|
-
|
|
82
76
|
|
|
83
77
|
class Setup(FromCallerMixin):
|
|
84
78
|
AUTHOR = 'Frontmatter'
|
|
@@ -209,7 +203,7 @@ class Setup(FromCallerMixin):
|
|
|
209
203
|
|
|
210
204
|
@property
|
|
211
205
|
def data(self):
|
|
212
|
-
|
|
206
|
+
data = dict(
|
|
213
207
|
name=self.name,
|
|
214
208
|
version=self.version,
|
|
215
209
|
author=self.author,
|
|
@@ -225,6 +219,7 @@ class Setup(FromCallerMixin):
|
|
|
225
219
|
install_requires=self.dependencies.install,
|
|
226
220
|
extras_require=self.dependencies.extras,
|
|
227
221
|
) | self.kwargs
|
|
222
|
+
return data
|
|
228
223
|
|
|
229
224
|
def setup(self):
|
|
230
225
|
|
|
@@ -233,6 +228,16 @@ class Setup(FromCallerMixin):
|
|
|
233
228
|
return setup.setup_setuptools(**self.data)
|
|
234
229
|
|
|
235
230
|
|
|
231
|
+
class Tools:
|
|
232
|
+
MASK = f'{Constants.LIBRARY_NAME}[{{extras}}]'
|
|
233
|
+
|
|
234
|
+
def __init__(self, *extras):
|
|
235
|
+
self.extras = extras
|
|
236
|
+
|
|
237
|
+
def __str__(self):
|
|
238
|
+
extras_str = ','.join(self.extras)
|
|
239
|
+
return self.MASK.format(extras=extras_str)
|
|
240
|
+
|
|
236
241
|
|
|
237
242
|
|
|
238
243
|
class Dependencies:
|
|
@@ -254,7 +259,7 @@ class Dependencies:
|
|
|
254
259
|
for value in values:
|
|
255
260
|
if value == key or value not in self.dependencies:
|
|
256
261
|
# Add the value directly if it references itself or is not a dependency key.
|
|
257
|
-
values_resolved.append(value)
|
|
262
|
+
values_resolved.append(str(value))
|
|
258
263
|
else:
|
|
259
264
|
# Recurse into nested dependencies.
|
|
260
265
|
values_resolved += self.resolve_values(value)
|
fmtr/tools/version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.1.
|
|
1
|
+
1.1.26
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.26
|
|
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
|
|
@@ -9,60 +9,60 @@ License: Copyright © 2025 Frontmatter. All rights reserved.
|
|
|
9
9
|
Description-Content-Type: text/markdown
|
|
10
10
|
License-File: LICENSE
|
|
11
11
|
Provides-Extra: test
|
|
12
|
-
Requires-Dist:
|
|
13
|
-
Requires-Dist: Unidecode; extra == "test"
|
|
14
|
-
Requires-Dist: pyyaml; extra == "test"
|
|
15
|
-
Requires-Dist: flet-video; extra == "test"
|
|
16
|
-
Requires-Dist: dask[bag]; extra == "test"
|
|
17
|
-
Requires-Dist: appdirs; extra == "test"
|
|
12
|
+
Requires-Dist: torchaudio; extra == "test"
|
|
18
13
|
Requires-Dist: semver; extra == "test"
|
|
14
|
+
Requires-Dist: docker; extra == "test"
|
|
15
|
+
Requires-Dist: logfire; extra == "test"
|
|
16
|
+
Requires-Dist: ollama; extra == "test"
|
|
17
|
+
Requires-Dist: openpyxl; extra == "test"
|
|
18
|
+
Requires-Dist: flet[all]; extra == "test"
|
|
19
|
+
Requires-Dist: diskcache; extra == "test"
|
|
19
20
|
Requires-Dist: pymupdf; extra == "test"
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
23
|
-
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
24
|
-
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
25
|
-
Requires-Dist: dnspython[doh]; extra == "test"
|
|
21
|
+
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
22
|
+
Requires-Dist: filetype; extra == "test"
|
|
26
23
|
Requires-Dist: sentence_transformers; extra == "test"
|
|
27
|
-
Requires-Dist: pydantic-settings; extra == "test"
|
|
28
|
-
Requires-Dist: deepmerge; extra == "test"
|
|
29
|
-
Requires-Dist: pydantic; extra == "test"
|
|
30
|
-
Requires-Dist: httpx_retries; extra == "test"
|
|
31
|
-
Requires-Dist: logfire; extra == "test"
|
|
32
|
-
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
33
|
-
Requires-Dist: torchvision; extra == "test"
|
|
34
|
-
Requires-Dist: pymupdf4llm; extra == "test"
|
|
35
|
-
Requires-Dist: torchaudio; extra == "test"
|
|
36
|
-
Requires-Dist: contexttimer; extra == "test"
|
|
37
|
-
Requires-Dist: distributed; extra == "test"
|
|
38
24
|
Requires-Dist: peft; extra == "test"
|
|
39
|
-
Requires-Dist:
|
|
40
|
-
Requires-Dist:
|
|
41
|
-
Requires-Dist: yamlscript; extra == "test"
|
|
42
|
-
Requires-Dist: filetype; extra == "test"
|
|
43
|
-
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
25
|
+
Requires-Dist: flet-video; extra == "test"
|
|
26
|
+
Requires-Dist: appdirs; extra == "test"
|
|
44
27
|
Requires-Dist: huggingface_hub; extra == "test"
|
|
45
|
-
Requires-Dist: sre_yield; extra == "test"
|
|
46
28
|
Requires-Dist: flet-webview; extra == "test"
|
|
47
|
-
Requires-Dist:
|
|
29
|
+
Requires-Dist: httpx; extra == "test"
|
|
30
|
+
Requires-Dist: deepmerge; extra == "test"
|
|
48
31
|
Requires-Dist: pytest-cov; extra == "test"
|
|
49
|
-
Requires-Dist:
|
|
50
|
-
Requires-Dist:
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist: ollama; extra == "test"
|
|
53
|
-
Requires-Dist: tokenizers; extra == "test"
|
|
54
|
-
Requires-Dist: diskcache; extra == "test"
|
|
55
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
32
|
+
Requires-Dist: dnspython[doh]; extra == "test"
|
|
33
|
+
Requires-Dist: regex; extra == "test"
|
|
34
|
+
Requires-Dist: openai; extra == "test"
|
|
56
35
|
Requires-Dist: html2text; extra == "test"
|
|
36
|
+
Requires-Dist: yamlscript; extra == "test"
|
|
37
|
+
Requires-Dist: pydantic-settings; extra == "test"
|
|
38
|
+
Requires-Dist: dask[bag]; extra == "test"
|
|
39
|
+
Requires-Dist: tinynetrc; extra == "test"
|
|
57
40
|
Requires-Dist: pandas; extra == "test"
|
|
58
|
-
Requires-Dist:
|
|
41
|
+
Requires-Dist: bokeh; extra == "test"
|
|
42
|
+
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
43
|
+
Requires-Dist: torchvision; extra == "test"
|
|
44
|
+
Requires-Dist: logfire[fastapi]; extra == "test"
|
|
45
|
+
Requires-Dist: Unidecode; extra == "test"
|
|
46
|
+
Requires-Dist: tabulate; extra == "test"
|
|
47
|
+
Requires-Dist: distributed; extra == "test"
|
|
48
|
+
Requires-Dist: tokenizers; extra == "test"
|
|
59
49
|
Requires-Dist: faker; extra == "test"
|
|
60
|
-
Requires-Dist:
|
|
50
|
+
Requires-Dist: contexttimer; extra == "test"
|
|
51
|
+
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
52
|
+
Requires-Dist: fastapi; extra == "test"
|
|
53
|
+
Requires-Dist: google-api-python-client; extra == "test"
|
|
61
54
|
Requires-Dist: logfire[httpx]; extra == "test"
|
|
62
|
-
Requires-Dist:
|
|
63
|
-
Requires-Dist:
|
|
64
|
-
Requires-Dist:
|
|
55
|
+
Requires-Dist: json_repair; extra == "test"
|
|
56
|
+
Requires-Dist: pymupdf4llm; extra == "test"
|
|
57
|
+
Requires-Dist: sre_yield; extra == "test"
|
|
58
|
+
Requires-Dist: setuptools; extra == "test"
|
|
59
|
+
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
60
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
61
|
+
Requires-Dist: pydantic; extra == "test"
|
|
65
62
|
Requires-Dist: google-auth; extra == "test"
|
|
63
|
+
Requires-Dist: pyyaml; extra == "test"
|
|
64
|
+
Requires-Dist: google-auth-httplib2; extra == "test"
|
|
65
|
+
Requires-Dist: httpx_retries; extra == "test"
|
|
66
66
|
Provides-Extra: yaml
|
|
67
67
|
Requires-Dist: yamlscript; extra == "yaml"
|
|
68
68
|
Requires-Dist: pyyaml; extra == "yaml"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
fmtr/tools/__init__.py,sha256=
|
|
1
|
+
fmtr/tools/__init__.py,sha256=yXBnDJFPfv6qj4_KuLpMXoDZ92aiEzugLs0vcM31D5k,5770
|
|
2
2
|
fmtr/tools/api_tools.py,sha256=w8Zrp_EwN5KlUghwLoTCXo4z1irg5tAsReCqDLjASfE,2133
|
|
3
3
|
fmtr/tools/async_tools.py,sha256=ewz757WcveQJd-G5SVr2JDOQVbdLGecCgl-tsBGVZz4,284
|
|
4
4
|
fmtr/tools/augmentation_tools.py,sha256=-6ESbO4CDlKqVOV1J1V6qBeoBMzbFIinkDHRHnCBej0,55
|
|
@@ -17,6 +17,7 @@ fmtr/tools/google_api_tools.py,sha256=owWE0GlnJjmVbXus8ENxT2PH7Fnd3m_r-14xyR7lAn
|
|
|
17
17
|
fmtr/tools/hash_tools.py,sha256=tr4HXpeT6rRrDk6TvMlRPUSrLRRaov96y128OI2tzsc,729
|
|
18
18
|
fmtr/tools/hfh_tools.py,sha256=DCDIWuWlhtmIGCtp9cLcOTTEw_4yN_NocLX8w5NZsbk,2384
|
|
19
19
|
fmtr/tools/html_tools.py,sha256=0nN8Nz5HtG9bXyApYfHSKEivLlxjsm3Gn6Mg2TK0brI,394
|
|
20
|
+
fmtr/tools/http_tools.py,sha256=RVwGrBNMyjfbpgAPCSnxEkXfSzXXWARb3ayq981ONQE,464
|
|
20
21
|
fmtr/tools/import_tools.py,sha256=XJmiWLukRncJAcaGReDn4jIz1_IpVBjfYCQHH1hIg7c,588
|
|
21
22
|
fmtr/tools/inspection_tools.py,sha256=tLTRvzy9XVomQPi0dfnF_cgwc7KiDVZAr7gPTk4S_bQ,278
|
|
22
23
|
fmtr/tools/interface_tools.py,sha256=JVYUV7wuMr24BORuUtNaBlTeBFt8VDGJ3HPRajd7Y_4,1341
|
|
@@ -31,7 +32,7 @@ fmtr/tools/netrc_tools.py,sha256=PpNpz_mWlQi6VHGromKwFfTyLpHUXsd4LY6-OKLCbeI,376
|
|
|
31
32
|
fmtr/tools/openai_tools.py,sha256=6SUgejgzUzmlKKct2_ePXntvMegu3FJgfk9x7aqtqYc,742
|
|
32
33
|
fmtr/tools/packaging_tools.py,sha256=FlgOTnDRHZWQL2iR-wucTsyGEHRE-MlddKL30MPmUqE,253
|
|
33
34
|
fmtr/tools/parallel_tools.py,sha256=QEb_gN1StkxsqYaH4HSjiJX8Y3gpb2uKNsOzG4uFpaM,3071
|
|
34
|
-
fmtr/tools/pattern_tools.py,sha256=
|
|
35
|
+
fmtr/tools/pattern_tools.py,sha256=Tv67jftyfjp04QlRMD4pwS1IV_SIXCtDTD_uIlMZiSM,4229
|
|
35
36
|
fmtr/tools/pdf_tools.py,sha256=xvv9B84uAF81rFJRnXhSsxYuP42vY9ZdPVFrSMVe8G8,4069
|
|
36
37
|
fmtr/tools/platform_tools.py,sha256=7p69CmAHe_sF68Fx9uVhns1k5EewTHTWgUYzkl6ZQKA,308
|
|
37
38
|
fmtr/tools/process_tools.py,sha256=Ysh5Dk2QFBhXQerArjKdt7xZd3JrN5Ho02AaOjH0Nnw,1425
|
|
@@ -45,7 +46,7 @@ fmtr/tools/tabular_tools.py,sha256=tpIpZzYku1HcJrHZJL6BC39LmN3WUWVhFbK2N7nDVmE,1
|
|
|
45
46
|
fmtr/tools/tokenization_tools.py,sha256=me-IBzSLyNYejLybwjO9CNB6Mj2NYfKPaOVThXyaGNg,4268
|
|
46
47
|
fmtr/tools/tools.py,sha256=CAsApa1YwVdNE6H66Vjivs_mXYvOas3rh7fPELAnTpk,795
|
|
47
48
|
fmtr/tools/unicode_tools.py,sha256=yS_9wpu8ogNoiIL7s1G_8bETFFO_YQlo4LNPv1NLDeY,52
|
|
48
|
-
fmtr/tools/version,sha256=
|
|
49
|
+
fmtr/tools/version,sha256=qdONjQrKG26HBKWvtcv7oRITgNwT9_551G27tbp2pgI,6
|
|
49
50
|
fmtr/tools/version_tools.py,sha256=yNs_CGqWpqE4jbK9wsPIi14peJVXYbhIcMqHAFOw3yE,1480
|
|
50
51
|
fmtr/tools/yaml_tools.py,sha256=9kuYChqJelWQIjGlSnK4iDdOWWH06P0gp9jIcRrC3UI,1903
|
|
51
52
|
fmtr/tools/ai_tools/__init__.py,sha256=JZrLuOFNV1A3wvJgonxOgz_4WS-7MfCuowGWA5uYCjs,372
|
|
@@ -55,8 +56,8 @@ fmtr/tools/path_tools/__init__.py,sha256=v5CpmzXq5Ii90FtcmxAJKiLxmguZMrPnQ_HdT87
|
|
|
55
56
|
fmtr/tools/path_tools/app_path_tools.py,sha256=JrJvtTDd_gkCKcZtBCDTMktsM77PZwGV_hzQX0g5GU8,1722
|
|
56
57
|
fmtr/tools/path_tools/path_tools.py,sha256=8WBzNctpds5tVT1-FcizAORrBCGlkUbPcfOel-Js7ps,7878
|
|
57
58
|
fmtr/tools/path_tools/type_path_tools.py,sha256=Zgs-ek-GXRKDIlVDGdg3muB0PIxTg2ba0NeHw6y8FWQ,40
|
|
58
|
-
fmtr/tools/setup_tools/__init__.py,sha256=
|
|
59
|
-
fmtr/tools/setup_tools/setup_tools.py,sha256=
|
|
59
|
+
fmtr/tools/setup_tools/__init__.py,sha256=fUCjzyE4JBPEOZhC4B--VPj_eOCkQb1QG5PIgiGj03U,386
|
|
60
|
+
fmtr/tools/setup_tools/setup_tools.py,sha256=A70uc80HrfvTh41LOizC14jQEY6N-ol4O-PkxYIJNBQ,7803
|
|
60
61
|
fmtr/tools/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
62
|
fmtr/tools/tests/conftest.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
63
|
fmtr/tools/tests/helpers.py,sha256=N5sf9YoZV93a7tf_UxpLeyQ9vp6Ec0teNIimFDvc054,1091
|
|
@@ -65,9 +66,9 @@ fmtr/tools/tests/test_environment.py,sha256=iHaiMQfECYZPkPKwfuIZV9uHuWe3aE-p_dN_
|
|
|
65
66
|
fmtr/tools/tests/test_json.py,sha256=IeSP4ziPvRcmS8kq7k9tHonC9rN5YYq9GSNT2ul6Msk,287
|
|
66
67
|
fmtr/tools/tests/test_path.py,sha256=AkZQa6_8BQ-VaCyL_J-iKmdf2ZaM-xFYR37Kun3k4_g,2188
|
|
67
68
|
fmtr/tools/tests/test_yaml.py,sha256=jc0TwwKu9eC0LvFGNMERdgBue591xwLxYXFbtsRwXVM,287
|
|
68
|
-
fmtr_tools-1.1.
|
|
69
|
-
fmtr_tools-1.1.
|
|
70
|
-
fmtr_tools-1.1.
|
|
71
|
-
fmtr_tools-1.1.
|
|
72
|
-
fmtr_tools-1.1.
|
|
73
|
-
fmtr_tools-1.1.
|
|
69
|
+
fmtr_tools-1.1.26.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
|
|
70
|
+
fmtr_tools-1.1.26.dist-info/METADATA,sha256=FtJBsmBvoK7KrRHHybQWVULi5JeFwzjcz0H5QxlqF8Q,15735
|
|
71
|
+
fmtr_tools-1.1.26.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
72
|
+
fmtr_tools-1.1.26.dist-info/entry_points.txt,sha256=e-eOW1Ml13tbxHC6Er1MnVOEDePeWw7DKwlE-l-gCY0,205
|
|
73
|
+
fmtr_tools-1.1.26.dist-info/top_level.txt,sha256=LXem9xCgNOD72tE2gRKESdiQTL902mfFkwWb6-dlwEE,5
|
|
74
|
+
fmtr_tools-1.1.26.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|