fmtr.tools 1.1.22__py3-none-any.whl → 1.1.24__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 +8 -12
- fmtr/tools/setup_tools/__init__.py +8 -0
- fmtr/tools/{setup_tools.py → setup_tools/setup_tools.py} +48 -42
- fmtr/tools/version +1 -1
- {fmtr_tools-1.1.22.dist-info → fmtr_tools-1.1.24.dist-info}/METADATA +42 -42
- {fmtr_tools-1.1.22.dist-info → fmtr_tools-1.1.24.dist-info}/RECORD +10 -9
- {fmtr_tools-1.1.22.dist-info → fmtr_tools-1.1.24.dist-info}/WHEEL +0 -0
- {fmtr_tools-1.1.22.dist-info → fmtr_tools-1.1.24.dist-info}/entry_points.txt +0 -0
- {fmtr_tools-1.1.22.dist-info → fmtr_tools-1.1.24.dist-info}/licenses/LICENSE +0 -0
- {fmtr_tools-1.1.22.dist-info → fmtr_tools-1.1.24.dist-info}/top_level.txt +0 -0
fmtr/tools/__init__.py
CHANGED
|
@@ -23,9 +23,16 @@ import fmtr.tools.packaging_tools as packaging
|
|
|
23
23
|
from fmtr.tools.logging_tools import logger
|
|
24
24
|
|
|
25
25
|
from fmtr.tools.import_tools import MissingExtraMockModule
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
from fmtr.tools.constants import Constants
|
|
28
28
|
|
|
29
|
+
# Submodules
|
|
30
|
+
from fmtr.tools.path_tools import Path, PackagePaths, AppPaths
|
|
31
|
+
from fmtr.tools import ai_tools as ai
|
|
32
|
+
|
|
33
|
+
import fmtr.tools.setup_tools as setup
|
|
34
|
+
from fmtr.tools.setup_tools import Setup, SetupPaths, Dependencies
|
|
35
|
+
|
|
29
36
|
try:
|
|
30
37
|
from fmtr.tools import augmentation_tools as augmentation
|
|
31
38
|
except ImportError as exception:
|
|
@@ -95,11 +102,6 @@ try:
|
|
|
95
102
|
except ImportError as exception:
|
|
96
103
|
api = MissingExtraMockModule('api', exception)
|
|
97
104
|
|
|
98
|
-
try:
|
|
99
|
-
from fmtr.tools import ai_tools as ai
|
|
100
|
-
except ImportError as exception:
|
|
101
|
-
ai = MissingExtraMockModule('ai', exception)
|
|
102
|
-
|
|
103
105
|
try:
|
|
104
106
|
from fmtr.tools import data_modelling_tools as dm
|
|
105
107
|
except ImportError as exception:
|
|
@@ -174,9 +176,3 @@ try:
|
|
|
174
176
|
from fmtr.tools import dns_tools as dns
|
|
175
177
|
except ImportError as exception:
|
|
176
178
|
dns = MissingExtraMockModule('dns', exception)
|
|
177
|
-
|
|
178
|
-
try:
|
|
179
|
-
from fmtr.tools import setup_tools as setup
|
|
180
|
-
from fmtr.tools.setup_tools import Setup, SetupPaths, Dependencies
|
|
181
|
-
except ImportError as exception:
|
|
182
|
-
setup = Setup = SetupPaths = Dependencies = MissingExtraMockModule('setup', exception)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from fmtr.tools.import_tools import MissingExtraMockModule
|
|
2
|
+
|
|
3
|
+
from fmtr.tools.setup_tools.setup_tools import Setup, SetupPaths, Dependencies
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
from setuptools import find_namespace_packages, find_packages, setup as setup_setuptools
|
|
7
|
+
except ImportError as exception:
|
|
8
|
+
find_namespace_packages = find_packages = setup_setuptools = MissingExtraMockModule('setup', exception)
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
from datetime import datetime
|
|
3
|
-
from fnmatch import fnmatch
|
|
4
3
|
from functools import cached_property
|
|
5
4
|
from itertools import chain
|
|
6
5
|
from typing import List, Dict
|
|
7
6
|
|
|
8
|
-
from setuptools import find_namespace_packages, find_packages, setup
|
|
9
|
-
|
|
10
7
|
from fmtr.tools.constants import Constants
|
|
11
8
|
from fmtr.tools.path_tools import Path
|
|
12
9
|
from fmtr.tools.path_tools.path_tools import FromCallerMixin
|
|
@@ -19,26 +16,21 @@ class SetupPaths(FromCallerMixin):
|
|
|
19
16
|
|
|
20
17
|
"""
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def __init__(self, path=None):
|
|
19
|
+
def __init__(self, path=None, org=Constants.ORG_NAME):
|
|
25
20
|
|
|
26
21
|
"""
|
|
27
22
|
|
|
28
23
|
Use calling module path as default path, if not otherwise specified.
|
|
24
|
+
:param org:
|
|
29
25
|
|
|
30
26
|
"""
|
|
31
27
|
if not path:
|
|
32
28
|
path = self.from_caller()
|
|
33
29
|
|
|
30
|
+
self.org_name = org
|
|
34
31
|
self.repo = Path(path)
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
def path(self):
|
|
38
|
-
if self.is_namespace:
|
|
39
|
-
return self.repo / self.org / self.name
|
|
40
|
-
else:
|
|
41
|
-
return self.repo / self.name
|
|
33
|
+
|
|
42
34
|
|
|
43
35
|
@property
|
|
44
36
|
def readme(self):
|
|
@@ -49,41 +41,43 @@ class SetupPaths(FromCallerMixin):
|
|
|
49
41
|
return self.path / Constants.FILENAME_VERSION
|
|
50
42
|
|
|
51
43
|
@cached_property
|
|
52
|
-
def
|
|
44
|
+
def path(self):
|
|
45
|
+
|
|
46
|
+
if self.org:
|
|
47
|
+
base = self.org
|
|
48
|
+
else:
|
|
49
|
+
base = self.repo
|
|
53
50
|
|
|
54
|
-
directories = [
|
|
55
|
-
dir for dir in self.repo.iterdir()
|
|
56
|
-
if dir.is_dir()
|
|
57
|
-
and not any(fnmatch(dir.name, pattern) for pattern in self.SKIP_DIRS)
|
|
58
|
-
]
|
|
51
|
+
directories = [base / dir for dir in self.find(base)]
|
|
59
52
|
|
|
60
53
|
if len(directories) != 1:
|
|
61
54
|
dirs_str = ', '.join([str(dir) for dir in directories])
|
|
62
55
|
raise ValueError(f'Expected exactly one directory in {self.repo}, found {dirs_str}')
|
|
63
56
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
contents = list(target.iterdir())
|
|
67
|
-
if len(contents) == 1 and (item := next(iter(contents))).is_dir():
|
|
68
|
-
return True, target.name, item.name
|
|
69
|
-
|
|
70
|
-
else:
|
|
71
|
-
return False, None, target.name
|
|
57
|
+
package = next(iter(directories))
|
|
58
|
+
return package
|
|
72
59
|
|
|
73
60
|
@property
|
|
74
|
-
def
|
|
75
|
-
|
|
76
|
-
|
|
61
|
+
def org(self):
|
|
62
|
+
if not self.org_name:
|
|
63
|
+
return False
|
|
64
|
+
org = self.repo / self.org_name
|
|
65
|
+
if not org.is_dir():
|
|
66
|
+
return False
|
|
67
|
+
return org
|
|
77
68
|
|
|
78
69
|
@property
|
|
79
|
-
def
|
|
80
|
-
|
|
81
|
-
return org
|
|
70
|
+
def is_namespace(self) -> bool:
|
|
71
|
+
return bool(self.org)
|
|
82
72
|
|
|
83
73
|
@property
|
|
84
74
|
def name(self) -> str:
|
|
85
|
-
|
|
86
|
-
|
|
75
|
+
return self.path.stem
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def find(self):
|
|
79
|
+
from fmtr.tools import setup
|
|
80
|
+
return setup.find_packages
|
|
87
81
|
|
|
88
82
|
|
|
89
83
|
class Setup(FromCallerMixin):
|
|
@@ -91,9 +85,9 @@ class Setup(FromCallerMixin):
|
|
|
91
85
|
AUTHOR_EMAIL = 'innovative.fowler@mask.pro.fmtr.dev'
|
|
92
86
|
|
|
93
87
|
REQUIREMENTS_ARG = 'requirements'
|
|
88
|
+
SKIP_DIRS = {'data', 'build', 'dist', '.*', '*egg-info*'}
|
|
94
89
|
|
|
95
|
-
|
|
96
|
-
def __init__(self, dependencies, paths=None, console_scripts=None, client=None, do_setup=True, **kwargs):
|
|
90
|
+
def __init__(self, dependencies, paths=None, org=Constants.ORG_NAME, console_scripts=None, client=None, do_setup=True, **kwargs):
|
|
97
91
|
|
|
98
92
|
self.kwargs = kwargs
|
|
99
93
|
|
|
@@ -107,8 +101,10 @@ class Setup(FromCallerMixin):
|
|
|
107
101
|
self.print_requirements()
|
|
108
102
|
return
|
|
109
103
|
|
|
104
|
+
self.org = org
|
|
105
|
+
|
|
110
106
|
if not paths:
|
|
111
|
-
paths = SetupPaths(path=self.from_caller())
|
|
107
|
+
paths = SetupPaths(path=self.from_caller(), org=self.org)
|
|
112
108
|
self.paths = paths
|
|
113
109
|
|
|
114
110
|
self.client = client
|
|
@@ -179,14 +175,22 @@ class Setup(FromCallerMixin):
|
|
|
179
175
|
return self.paths.version.read_text().strip()
|
|
180
176
|
|
|
181
177
|
@property
|
|
182
|
-
def
|
|
178
|
+
def find(self):
|
|
183
179
|
|
|
184
|
-
|
|
180
|
+
from fmtr.tools import setup
|
|
185
181
|
|
|
186
182
|
if self.paths.is_namespace:
|
|
187
|
-
return find_namespace_packages
|
|
183
|
+
return setup.find_namespace_packages
|
|
188
184
|
else:
|
|
189
|
-
return find_packages
|
|
185
|
+
return setup.find_packages
|
|
186
|
+
|
|
187
|
+
@property
|
|
188
|
+
def packages(self):
|
|
189
|
+
|
|
190
|
+
excludes = list(self.SKIP_DIRS) + [f'{name}.*' for name in self.SKIP_DIRS if '*' not in name]
|
|
191
|
+
|
|
192
|
+
packages = self.find(where=str(self.paths.repo), exclude=excludes)
|
|
193
|
+
return packages
|
|
190
194
|
|
|
191
195
|
@property
|
|
192
196
|
def package_dir(self):
|
|
@@ -224,7 +228,9 @@ class Setup(FromCallerMixin):
|
|
|
224
228
|
|
|
225
229
|
def setup(self):
|
|
226
230
|
|
|
227
|
-
|
|
231
|
+
from fmtr.tools import setup
|
|
232
|
+
|
|
233
|
+
return setup.setup_setuptools(**self.data)
|
|
228
234
|
|
|
229
235
|
|
|
230
236
|
|
fmtr/tools/version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.1.
|
|
1
|
+
1.1.24
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.24
|
|
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: openpyxl; extra == "test"
|
|
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"
|
|
18
|
+
Requires-Dist: semver; extra == "test"
|
|
19
|
+
Requires-Dist: pymupdf; extra == "test"
|
|
20
|
+
Requires-Dist: bokeh; extra == "test"
|
|
21
|
+
Requires-Dist: tabulate; extra == "test"
|
|
22
|
+
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
23
|
+
Requires-Dist: transformers[sentencepiece]; extra == "test"
|
|
12
24
|
Requires-Dist: google-auth-oauthlib; extra == "test"
|
|
13
|
-
Requires-Dist:
|
|
14
|
-
Requires-Dist:
|
|
25
|
+
Requires-Dist: dnspython[doh]; extra == "test"
|
|
26
|
+
Requires-Dist: sentence_transformers; extra == "test"
|
|
27
|
+
Requires-Dist: pydantic-settings; extra == "test"
|
|
28
|
+
Requires-Dist: deepmerge; extra == "test"
|
|
15
29
|
Requires-Dist: pydantic; extra == "test"
|
|
16
|
-
Requires-Dist: docker; extra == "test"
|
|
17
30
|
Requires-Dist: httpx_retries; extra == "test"
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist:
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
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"
|
|
24
38
|
Requires-Dist: peft; extra == "test"
|
|
25
|
-
Requires-Dist:
|
|
39
|
+
Requires-Dist: httpx; extra == "test"
|
|
40
|
+
Requires-Dist: regex; extra == "test"
|
|
26
41
|
Requires-Dist: yamlscript; extra == "test"
|
|
27
|
-
Requires-Dist: dnspython[doh]; extra == "test"
|
|
28
|
-
Requires-Dist: flet[all]; extra == "test"
|
|
29
|
-
Requires-Dist: fastapi; extra == "test"
|
|
30
42
|
Requires-Dist: filetype; extra == "test"
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist:
|
|
43
|
+
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
44
|
+
Requires-Dist: huggingface_hub; extra == "test"
|
|
45
|
+
Requires-Dist: sre_yield; extra == "test"
|
|
46
|
+
Requires-Dist: flet-webview; extra == "test"
|
|
47
|
+
Requires-Dist: json_repair; extra == "test"
|
|
48
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
49
|
+
Requires-Dist: fastapi; extra == "test"
|
|
50
|
+
Requires-Dist: tinynetrc; extra == "test"
|
|
51
|
+
Requires-Dist: google-api-python-client; extra == "test"
|
|
33
52
|
Requires-Dist: ollama; extra == "test"
|
|
34
|
-
Requires-Dist:
|
|
35
|
-
Requires-Dist: openpyxl; extra == "test"
|
|
36
|
-
Requires-Dist: logfire; extra == "test"
|
|
37
|
-
Requires-Dist: distributed; extra == "test"
|
|
38
|
-
Requires-Dist: deepmerge; extra == "test"
|
|
39
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
53
|
+
Requires-Dist: tokenizers; extra == "test"
|
|
40
54
|
Requires-Dist: diskcache; extra == "test"
|
|
41
|
-
Requires-Dist:
|
|
55
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
|
|
56
|
+
Requires-Dist: html2text; extra == "test"
|
|
42
57
|
Requires-Dist: pandas; extra == "test"
|
|
43
58
|
Requires-Dist: setuptools; extra == "test"
|
|
44
|
-
Requires-Dist:
|
|
45
|
-
Requires-Dist: pydantic-settings; extra == "test"
|
|
46
|
-
Requires-Dist: contexttimer; extra == "test"
|
|
47
|
-
Requires-Dist: httpx; extra == "test"
|
|
48
|
-
Requires-Dist: sre_yield; extra == "test"
|
|
49
|
-
Requires-Dist: google-api-python-client; extra == "test"
|
|
59
|
+
Requires-Dist: faker; extra == "test"
|
|
50
60
|
Requires-Dist: openai; extra == "test"
|
|
51
|
-
Requires-Dist: appdirs; extra == "test"
|
|
52
61
|
Requires-Dist: logfire[httpx]; extra == "test"
|
|
53
|
-
Requires-Dist:
|
|
54
|
-
Requires-Dist: pymupdf; extra == "test"
|
|
55
|
-
Requires-Dist: pydevd-pycharm; extra == "test"
|
|
56
|
-
Requires-Dist: tinynetrc; extra == "test"
|
|
62
|
+
Requires-Dist: docker; extra == "test"
|
|
57
63
|
Requires-Dist: logfire[fastapi]; extra == "test"
|
|
58
|
-
Requires-Dist:
|
|
59
|
-
Requires-Dist:
|
|
60
|
-
Requires-Dist: torchvision; extra == "test"
|
|
61
|
-
Requires-Dist: torchaudio; extra == "test"
|
|
62
|
-
Requires-Dist: semver; extra == "test"
|
|
63
|
-
Requires-Dist: regex; extra == "test"
|
|
64
|
-
Requires-Dist: flet-video; extra == "test"
|
|
65
|
-
Requires-Dist: uvicorn[standard]; extra == "test"
|
|
64
|
+
Requires-Dist: flet[all]; extra == "test"
|
|
65
|
+
Requires-Dist: google-auth; 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=PeQKmb9q7xTaiDGy7TUa_5V2lh8k0rV0BJgjwf37udI,5571
|
|
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
|
|
@@ -39,14 +39,13 @@ fmtr/tools/profiling_tools.py,sha256=jpXVjaNKPydTasEQVNXvxzGtMhXPit08AnJddkU8uIc
|
|
|
39
39
|
fmtr/tools/random_tools.py,sha256=4VlQdk5THbR8ka4pZaLbk_ZO_4yy6PF_lHZes_rgenY,2223
|
|
40
40
|
fmtr/tools/semantic_tools.py,sha256=cxY9NSAHWj4nEc6Oj4qA1omR3dWbl2OuH7_PkINc6_E,1386
|
|
41
41
|
fmtr/tools/settings_tools.py,sha256=o11W3T60UZSvCTkh_eEQq1Mx74GycQ6JxUr0plBDbsk,2356
|
|
42
|
-
fmtr/tools/setup_tools.py,sha256=_mKoOAv2-vf2Y9HxjUkgblTDUfmWbMTNkOhJeaSN3SE,7712
|
|
43
42
|
fmtr/tools/spaces_tools.py,sha256=D_he3mve6DruB3OPS6QyzqD05ChHnRTb4buViKPe7To,1099
|
|
44
43
|
fmtr/tools/string_tools.py,sha256=mjO7NSqhtYMtnX7fKb8eXZ7MO2lXWGMl0kXxnZznupM,3764
|
|
45
44
|
fmtr/tools/tabular_tools.py,sha256=tpIpZzYku1HcJrHZJL6BC39LmN3WUWVhFbK2N7nDVmE,120
|
|
46
45
|
fmtr/tools/tokenization_tools.py,sha256=me-IBzSLyNYejLybwjO9CNB6Mj2NYfKPaOVThXyaGNg,4268
|
|
47
46
|
fmtr/tools/tools.py,sha256=CAsApa1YwVdNE6H66Vjivs_mXYvOas3rh7fPELAnTpk,795
|
|
48
47
|
fmtr/tools/unicode_tools.py,sha256=yS_9wpu8ogNoiIL7s1G_8bETFFO_YQlo4LNPv1NLDeY,52
|
|
49
|
-
fmtr/tools/version,sha256=
|
|
48
|
+
fmtr/tools/version,sha256=fMaLB6rmZIaUWwd3AaKbbqQ2mgl-suriSc_QCo-bRSk,6
|
|
50
49
|
fmtr/tools/version_tools.py,sha256=yNs_CGqWpqE4jbK9wsPIi14peJVXYbhIcMqHAFOw3yE,1480
|
|
51
50
|
fmtr/tools/yaml_tools.py,sha256=9kuYChqJelWQIjGlSnK4iDdOWWH06P0gp9jIcRrC3UI,1903
|
|
52
51
|
fmtr/tools/ai_tools/__init__.py,sha256=JZrLuOFNV1A3wvJgonxOgz_4WS-7MfCuowGWA5uYCjs,372
|
|
@@ -56,6 +55,8 @@ fmtr/tools/path_tools/__init__.py,sha256=v5CpmzXq5Ii90FtcmxAJKiLxmguZMrPnQ_HdT87
|
|
|
56
55
|
fmtr/tools/path_tools/app_path_tools.py,sha256=JrJvtTDd_gkCKcZtBCDTMktsM77PZwGV_hzQX0g5GU8,1722
|
|
57
56
|
fmtr/tools/path_tools/path_tools.py,sha256=8WBzNctpds5tVT1-FcizAORrBCGlkUbPcfOel-Js7ps,7878
|
|
58
57
|
fmtr/tools/path_tools/type_path_tools.py,sha256=Zgs-ek-GXRKDIlVDGdg3muB0PIxTg2ba0NeHw6y8FWQ,40
|
|
58
|
+
fmtr/tools/setup_tools/__init__.py,sha256=8HX-GvGxeCK3nIHH5PHkvhkH0MIt89AK8a5l6Vua2dQ,379
|
|
59
|
+
fmtr/tools/setup_tools/setup_tools.py,sha256=bwx0fkmPqZz9j8kyqEjKM9xdr54_SoeR45OODuFXUl4,7613
|
|
59
60
|
fmtr/tools/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
61
|
fmtr/tools/tests/conftest.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
62
|
fmtr/tools/tests/helpers.py,sha256=N5sf9YoZV93a7tf_UxpLeyQ9vp6Ec0teNIimFDvc054,1091
|
|
@@ -64,9 +65,9 @@ fmtr/tools/tests/test_environment.py,sha256=iHaiMQfECYZPkPKwfuIZV9uHuWe3aE-p_dN_
|
|
|
64
65
|
fmtr/tools/tests/test_json.py,sha256=IeSP4ziPvRcmS8kq7k9tHonC9rN5YYq9GSNT2ul6Msk,287
|
|
65
66
|
fmtr/tools/tests/test_path.py,sha256=AkZQa6_8BQ-VaCyL_J-iKmdf2ZaM-xFYR37Kun3k4_g,2188
|
|
66
67
|
fmtr/tools/tests/test_yaml.py,sha256=jc0TwwKu9eC0LvFGNMERdgBue591xwLxYXFbtsRwXVM,287
|
|
67
|
-
fmtr_tools-1.1.
|
|
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.
|
|
68
|
+
fmtr_tools-1.1.24.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
|
|
69
|
+
fmtr_tools-1.1.24.dist-info/METADATA,sha256=NGiex3myYBSC4501v0wDzpfy-ueqwqf8-MZim1ZOXKM,15735
|
|
70
|
+
fmtr_tools-1.1.24.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
71
|
+
fmtr_tools-1.1.24.dist-info/entry_points.txt,sha256=e-eOW1Ml13tbxHC6Er1MnVOEDePeWw7DKwlE-l-gCY0,205
|
|
72
|
+
fmtr_tools-1.1.24.dist-info/top_level.txt,sha256=LXem9xCgNOD72tE2gRKESdiQTL902mfFkwWb6-dlwEE,5
|
|
73
|
+
fmtr_tools-1.1.24.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|