fmtr.tools 1.3.38__tar.gz → 1.3.40__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.
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/PKG-INFO +46 -46
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/google_api_tools.py +15 -4
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/interface_tools/__init__.py +1 -0
- fmtr_tools-1.3.40/fmtr/tools/interface_tools/context.py +12 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/interface_tools/interface_tools.py +12 -5
- fmtr_tools-1.3.40/fmtr/tools/version +1 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/PKG-INFO +46 -46
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/SOURCES.txt +2 -0
- fmtr_tools-1.3.38/fmtr/tools/version +0 -1
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/LICENSE +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/README.md +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/__init__.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/ai_tools/__init__.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/ai_tools/inference_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/api_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/async_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/augmentation_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/caching_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/constants.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/context_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/data_modelling_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dataclass_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/datatype_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/debugging_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/__init__.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/client.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/dm.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/proxy.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/server.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/docker_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/__init__.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/ep_test.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/shell_debug.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/environment_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/function_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/hash_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/hfh_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/html_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/http_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/import_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/inherit_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/inspection_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/interface_tools/controls.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/iterator_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/json_fix_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/json_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/logging_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/merging_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/metric_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/name_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/netrc_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/openai_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/packaging_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/parallel_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/path_tools/__init__.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/path_tools/app_path_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/path_tools/path_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/path_tools/type_path_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/pattern_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/pdf_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/platform_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/process_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/profiling_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/random_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/semantic_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/settings_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/setup_tools/__init__.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/setup_tools/setup_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/spaces_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/string_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tabular_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/__init__.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/conftest.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/helpers.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_datatype.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_environment.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_json.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_path.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_yaml.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tokenization_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/unicode_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/version_tools/__init__.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/version_tools/version_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/webhook_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/yaml_tools.py +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/dependency_links.txt +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/entry_points.txt +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/requires.txt +45 -45
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/top_level.txt +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/pyproject.toml +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/setup.cfg +0 -0
- {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.40
|
|
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
|
|
@@ -133,62 +133,62 @@ Requires-Dist: logfire[httpx]; extra == "webhook"
|
|
|
133
133
|
Provides-Extra: browsers
|
|
134
134
|
Requires-Dist: playwright; extra == "browsers"
|
|
135
135
|
Provides-Extra: all
|
|
136
|
-
Requires-Dist:
|
|
136
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
137
|
+
Requires-Dist: google-auth; extra == "all"
|
|
138
|
+
Requires-Dist: flet[all]; extra == "all"
|
|
139
|
+
Requires-Dist: html2text; extra == "all"
|
|
140
|
+
Requires-Dist: ollama; extra == "all"
|
|
141
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
142
|
+
Requires-Dist: docker; extra == "all"
|
|
137
143
|
Requires-Dist: pytest-cov; extra == "all"
|
|
144
|
+
Requires-Dist: pandas; extra == "all"
|
|
145
|
+
Requires-Dist: openpyxl; extra == "all"
|
|
146
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
147
|
+
Requires-Dist: peft; extra == "all"
|
|
148
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
149
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
150
|
+
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
151
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
152
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
153
|
+
Requires-Dist: tabulate; extra == "all"
|
|
154
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
155
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
156
|
+
Requires-Dist: pydantic-settings; extra == "all"
|
|
157
|
+
Requires-Dist: fastapi; extra == "all"
|
|
158
|
+
Requires-Dist: json_repair; extra == "all"
|
|
159
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
160
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
161
|
+
Requires-Dist: logfire[httpx]; extra == "all"
|
|
162
|
+
Requires-Dist: flet-video; extra == "all"
|
|
163
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
164
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
165
|
+
Requires-Dist: logfire; extra == "all"
|
|
166
|
+
Requires-Dist: distributed; extra == "all"
|
|
167
|
+
Requires-Dist: playwright; extra == "all"
|
|
138
168
|
Requires-Dist: pydantic; extra == "all"
|
|
169
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
170
|
+
Requires-Dist: cachetools; extra == "all"
|
|
171
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
172
|
+
Requires-Dist: bokeh; extra == "all"
|
|
173
|
+
Requires-Dist: openai; extra == "all"
|
|
174
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
175
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
139
176
|
Requires-Dist: appdirs; extra == "all"
|
|
140
|
-
Requires-Dist: httpx; extra == "all"
|
|
141
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
142
|
-
Requires-Dist: peft; extra == "all"
|
|
143
177
|
Requires-Dist: flet-webview; extra == "all"
|
|
178
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
144
179
|
Requires-Dist: diskcache; extra == "all"
|
|
145
|
-
Requires-Dist: google-auth; extra == "all"
|
|
146
|
-
Requires-Dist: cachetools; extra == "all"
|
|
147
|
-
Requires-Dist: google-api-python-client; extra == "all"
|
|
148
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
149
|
-
Requires-Dist: pandas; extra == "all"
|
|
150
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
151
180
|
Requires-Dist: sre_yield; extra == "all"
|
|
152
|
-
Requires-Dist: tokenizers; extra == "all"
|
|
153
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
154
181
|
Requires-Dist: semver; extra == "all"
|
|
155
182
|
Requires-Dist: faker; extra == "all"
|
|
156
|
-
Requires-Dist:
|
|
157
|
-
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
158
|
-
Requires-Dist: openpyxl; extra == "all"
|
|
159
|
-
Requires-Dist: playwright; extra == "all"
|
|
160
|
-
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
183
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
161
184
|
Requires-Dist: setuptools; extra == "all"
|
|
162
|
-
Requires-Dist:
|
|
163
|
-
Requires-Dist: regex; extra == "all"
|
|
164
|
-
Requires-Dist: html2text; extra == "all"
|
|
165
|
-
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
185
|
+
Requires-Dist: torchvision; extra == "all"
|
|
166
186
|
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
167
|
-
Requires-Dist:
|
|
168
|
-
Requires-Dist: huggingface_hub; extra == "all"
|
|
169
|
-
Requires-Dist: filetype; extra == "all"
|
|
170
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
171
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
172
|
-
Requires-Dist: bokeh; extra == "all"
|
|
173
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
174
|
-
Requires-Dist: fastapi; extra == "all"
|
|
175
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
176
|
-
Requires-Dist: flet[all]; extra == "all"
|
|
177
|
-
Requires-Dist: pymupdf4llm; extra == "all"
|
|
178
|
-
Requires-Dist: distributed; extra == "all"
|
|
179
|
-
Requires-Dist: openai; extra == "all"
|
|
180
|
-
Requires-Dist: tabulate; extra == "all"
|
|
181
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
187
|
+
Requires-Dist: regex; extra == "all"
|
|
182
188
|
Requires-Dist: torchaudio; extra == "all"
|
|
183
|
-
Requires-Dist:
|
|
184
|
-
Requires-Dist:
|
|
185
|
-
Requires-Dist:
|
|
186
|
-
Requires-Dist: logfire[httpx]; extra == "all"
|
|
187
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
188
|
-
Requires-Dist: docker; extra == "all"
|
|
189
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
190
|
-
Requires-Dist: logfire; extra == "all"
|
|
191
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
189
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
190
|
+
Requires-Dist: httpx; extra == "all"
|
|
191
|
+
Requires-Dist: filetype; extra == "all"
|
|
192
192
|
Dynamic: author
|
|
193
193
|
Dynamic: author-email
|
|
194
194
|
Dynamic: description
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from google.auth.transport.requests import Request
|
|
1
2
|
from google.oauth2.credentials import Credentials
|
|
2
3
|
from google_auth_oauthlib.flow import InstalledAppFlow
|
|
3
4
|
from googleapiclient.discovery import build
|
|
@@ -20,8 +21,12 @@ class Authenticator:
|
|
|
20
21
|
|
|
21
22
|
@classmethod
|
|
22
23
|
def auth(cls):
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
Do initial authentication or refresh token if expired.
|
|
27
|
+
|
|
28
|
+
"""
|
|
29
|
+
logger.info(f'Doing auth for service {cls.SERVICE} ({cls.VERSION})...')
|
|
25
30
|
|
|
26
31
|
PATH_CREDS = cls.PATH / 'credentials.json'
|
|
27
32
|
PATH_TOKEN = cls.PATH / f'{cls.SERVICE}.json'
|
|
@@ -29,9 +34,15 @@ class Authenticator:
|
|
|
29
34
|
if PATH_TOKEN.exists():
|
|
30
35
|
data_token = PATH_TOKEN.read_json()
|
|
31
36
|
credentials = Credentials.from_authorized_user_info(data_token, cls.SCOPES)
|
|
37
|
+
if credentials.expired:
|
|
38
|
+
with logger.span(f'Credentials expired for {cls.SERVICE}. Will refresh...'):
|
|
39
|
+
logger.warning(f'{cls.SERVICE}. {PATH_CREDS.exists()=} {PATH_TOKEN.exists()=} {credentials.valid=} {credentials.expired=} {credentials.expiry=}')
|
|
40
|
+
credentials.refresh(Request())
|
|
41
|
+
PATH_TOKEN.write_text(credentials.to_json())
|
|
32
42
|
else:
|
|
33
43
|
flow = InstalledAppFlow.from_client_secrets_file(PATH_CREDS, cls.SCOPES)
|
|
44
|
+
flow.authorization_url(prompt='consent', access_type='offline')
|
|
34
45
|
credentials = flow.run_local_server(open_browser=False, port=cls.PORT)
|
|
35
46
|
PATH_TOKEN.write_text(credentials.to_json())
|
|
36
|
-
|
|
37
|
-
return
|
|
47
|
+
|
|
48
|
+
return build(cls.SERVICE, cls.VERSION, credentials=credentials)
|
|
@@ -3,5 +3,6 @@ from fmtr.tools.import_tools import MissingExtraMockModule
|
|
|
3
3
|
try:
|
|
4
4
|
from fmtr.tools.interface_tools.interface_tools import Interface, update, progress
|
|
5
5
|
from fmtr.tools.interface_tools import controls
|
|
6
|
+
from fmtr.tools.interface_tools.context import Context
|
|
6
7
|
except ImportError as exception:
|
|
7
8
|
Interface = update = progress = controls = MissingExtraMockModule('interface', exception)
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
from functools import cached_property
|
|
2
|
-
|
|
3
1
|
import flet as ft
|
|
4
2
|
from flet.core.types import AppView
|
|
5
3
|
from flet.core.view import View
|
|
4
|
+
from functools import cached_property
|
|
5
|
+
from typing import TypeVar, Generic, Type
|
|
6
6
|
|
|
7
7
|
from fmtr.tools import environment_tools
|
|
8
8
|
from fmtr.tools.constants import Constants
|
|
9
9
|
from fmtr.tools.function_tools import MethodDecorator
|
|
10
|
+
from fmtr.tools.interface_tools.context import Context
|
|
10
11
|
from fmtr.tools.logging_tools import logger
|
|
11
12
|
|
|
12
13
|
|
|
@@ -55,9 +56,10 @@ class progress(update):
|
|
|
55
56
|
super().stop(instance)
|
|
56
57
|
|
|
57
58
|
|
|
59
|
+
T = TypeVar('T', bound=Context)
|
|
58
60
|
|
|
59
61
|
|
|
60
|
-
class Interface(ft.Column):
|
|
62
|
+
class Interface(Generic[T], ft.Column):
|
|
61
63
|
"""
|
|
62
64
|
|
|
63
65
|
Simple interface base class.
|
|
@@ -72,12 +74,15 @@ class Interface(ft.Column):
|
|
|
72
74
|
ROUTE_ROOT = '/'
|
|
73
75
|
SCROLL = ft.ScrollMode.AUTO
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
TypeContext: Type[T] = Context
|
|
78
|
+
|
|
79
|
+
def __init__(self, context: T, *args, **kwargs):
|
|
76
80
|
"""
|
|
77
81
|
|
|
78
82
|
Instantiate and apply interface config
|
|
79
83
|
|
|
80
84
|
"""
|
|
85
|
+
self.context = context
|
|
81
86
|
super().__init__(*args, **kwargs, scroll=self.SCROLL)
|
|
82
87
|
|
|
83
88
|
@classmethod
|
|
@@ -88,9 +93,11 @@ class Interface(ft.Column):
|
|
|
88
93
|
|
|
89
94
|
"""
|
|
90
95
|
if not page.on_route_change:
|
|
96
|
+
page.title = cls.TITLE
|
|
91
97
|
page.theme = cls.get_theme()
|
|
92
98
|
page.views.clear()
|
|
93
|
-
|
|
99
|
+
context = cls.TypeContext(page=page)
|
|
100
|
+
self = cls(context)
|
|
94
101
|
view = self.view
|
|
95
102
|
if not view:
|
|
96
103
|
view = self
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.3.40
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmtr.tools
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.40
|
|
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
|
|
@@ -133,62 +133,62 @@ Requires-Dist: logfire[httpx]; extra == "webhook"
|
|
|
133
133
|
Provides-Extra: browsers
|
|
134
134
|
Requires-Dist: playwright; extra == "browsers"
|
|
135
135
|
Provides-Extra: all
|
|
136
|
-
Requires-Dist:
|
|
136
|
+
Requires-Dist: sentence_transformers; extra == "all"
|
|
137
|
+
Requires-Dist: google-auth; extra == "all"
|
|
138
|
+
Requires-Dist: flet[all]; extra == "all"
|
|
139
|
+
Requires-Dist: html2text; extra == "all"
|
|
140
|
+
Requires-Dist: ollama; extra == "all"
|
|
141
|
+
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
142
|
+
Requires-Dist: docker; extra == "all"
|
|
137
143
|
Requires-Dist: pytest-cov; extra == "all"
|
|
144
|
+
Requires-Dist: pandas; extra == "all"
|
|
145
|
+
Requires-Dist: openpyxl; extra == "all"
|
|
146
|
+
Requires-Dist: tokenizers; extra == "all"
|
|
147
|
+
Requires-Dist: peft; extra == "all"
|
|
148
|
+
Requires-Dist: google-api-python-client; extra == "all"
|
|
149
|
+
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
150
|
+
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
151
|
+
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
152
|
+
Requires-Dist: Unidecode; extra == "all"
|
|
153
|
+
Requires-Dist: tabulate; extra == "all"
|
|
154
|
+
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
155
|
+
Requires-Dist: dnspython[doh]; extra == "all"
|
|
156
|
+
Requires-Dist: pydantic-settings; extra == "all"
|
|
157
|
+
Requires-Dist: fastapi; extra == "all"
|
|
158
|
+
Requires-Dist: json_repair; extra == "all"
|
|
159
|
+
Requires-Dist: pymupdf4llm; extra == "all"
|
|
160
|
+
Requires-Dist: pymupdf; extra == "all"
|
|
161
|
+
Requires-Dist: logfire[httpx]; extra == "all"
|
|
162
|
+
Requires-Dist: flet-video; extra == "all"
|
|
163
|
+
Requires-Dist: httpx_retries; extra == "all"
|
|
164
|
+
Requires-Dist: deepmerge; extra == "all"
|
|
165
|
+
Requires-Dist: logfire; extra == "all"
|
|
166
|
+
Requires-Dist: distributed; extra == "all"
|
|
167
|
+
Requires-Dist: playwright; extra == "all"
|
|
138
168
|
Requires-Dist: pydantic; extra == "all"
|
|
169
|
+
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
170
|
+
Requires-Dist: cachetools; extra == "all"
|
|
171
|
+
Requires-Dist: pyyaml; extra == "all"
|
|
172
|
+
Requires-Dist: bokeh; extra == "all"
|
|
173
|
+
Requires-Dist: openai; extra == "all"
|
|
174
|
+
Requires-Dist: tinynetrc; extra == "all"
|
|
175
|
+
Requires-Dist: huggingface_hub; extra == "all"
|
|
139
176
|
Requires-Dist: appdirs; extra == "all"
|
|
140
|
-
Requires-Dist: httpx; extra == "all"
|
|
141
|
-
Requires-Dist: contexttimer; extra == "all"
|
|
142
|
-
Requires-Dist: peft; extra == "all"
|
|
143
177
|
Requires-Dist: flet-webview; extra == "all"
|
|
178
|
+
Requires-Dist: yamlscript; extra == "all"
|
|
144
179
|
Requires-Dist: diskcache; extra == "all"
|
|
145
|
-
Requires-Dist: google-auth; extra == "all"
|
|
146
|
-
Requires-Dist: cachetools; extra == "all"
|
|
147
|
-
Requires-Dist: google-api-python-client; extra == "all"
|
|
148
|
-
Requires-Dist: uvicorn[standard]; extra == "all"
|
|
149
|
-
Requires-Dist: pandas; extra == "all"
|
|
150
|
-
Requires-Dist: pydantic-settings; extra == "all"
|
|
151
180
|
Requires-Dist: sre_yield; extra == "all"
|
|
152
|
-
Requires-Dist: tokenizers; extra == "all"
|
|
153
|
-
Requires-Dist: dask[bag]; extra == "all"
|
|
154
181
|
Requires-Dist: semver; extra == "all"
|
|
155
182
|
Requires-Dist: faker; extra == "all"
|
|
156
|
-
Requires-Dist:
|
|
157
|
-
Requires-Dist: google-auth-oauthlib; extra == "all"
|
|
158
|
-
Requires-Dist: openpyxl; extra == "all"
|
|
159
|
-
Requires-Dist: playwright; extra == "all"
|
|
160
|
-
Requires-Dist: google-auth-httplib2; extra == "all"
|
|
183
|
+
Requires-Dist: contexttimer; extra == "all"
|
|
161
184
|
Requires-Dist: setuptools; extra == "all"
|
|
162
|
-
Requires-Dist:
|
|
163
|
-
Requires-Dist: regex; extra == "all"
|
|
164
|
-
Requires-Dist: html2text; extra == "all"
|
|
165
|
-
Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
|
|
185
|
+
Requires-Dist: torchvision; extra == "all"
|
|
166
186
|
Requires-Dist: logfire[fastapi]; extra == "all"
|
|
167
|
-
Requires-Dist:
|
|
168
|
-
Requires-Dist: huggingface_hub; extra == "all"
|
|
169
|
-
Requires-Dist: filetype; extra == "all"
|
|
170
|
-
Requires-Dist: deepmerge; extra == "all"
|
|
171
|
-
Requires-Dist: transformers[sentencepiece]; extra == "all"
|
|
172
|
-
Requires-Dist: bokeh; extra == "all"
|
|
173
|
-
Requires-Dist: Unidecode; extra == "all"
|
|
174
|
-
Requires-Dist: fastapi; extra == "all"
|
|
175
|
-
Requires-Dist: tinynetrc; extra == "all"
|
|
176
|
-
Requires-Dist: flet[all]; extra == "all"
|
|
177
|
-
Requires-Dist: pymupdf4llm; extra == "all"
|
|
178
|
-
Requires-Dist: distributed; extra == "all"
|
|
179
|
-
Requires-Dist: openai; extra == "all"
|
|
180
|
-
Requires-Dist: tabulate; extra == "all"
|
|
181
|
-
Requires-Dist: dnspython[doh]; extra == "all"
|
|
187
|
+
Requires-Dist: regex; extra == "all"
|
|
182
188
|
Requires-Dist: torchaudio; extra == "all"
|
|
183
|
-
Requires-Dist:
|
|
184
|
-
Requires-Dist:
|
|
185
|
-
Requires-Dist:
|
|
186
|
-
Requires-Dist: logfire[httpx]; extra == "all"
|
|
187
|
-
Requires-Dist: pymupdf; extra == "all"
|
|
188
|
-
Requires-Dist: docker; extra == "all"
|
|
189
|
-
Requires-Dist: sentence_transformers; extra == "all"
|
|
190
|
-
Requires-Dist: logfire; extra == "all"
|
|
191
|
-
Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
|
|
189
|
+
Requires-Dist: dask[bag]; extra == "all"
|
|
190
|
+
Requires-Dist: httpx; extra == "all"
|
|
191
|
+
Requires-Dist: filetype; extra == "all"
|
|
192
192
|
Dynamic: author
|
|
193
193
|
Dynamic: author-email
|
|
194
194
|
Dynamic: description
|
|
@@ -67,6 +67,7 @@ setup.py
|
|
|
67
67
|
./fmtr/tools/entrypoints/remote_debug_test.py
|
|
68
68
|
./fmtr/tools/entrypoints/shell_debug.py
|
|
69
69
|
./fmtr/tools/interface_tools/__init__.py
|
|
70
|
+
./fmtr/tools/interface_tools/context.py
|
|
70
71
|
./fmtr/tools/interface_tools/controls.py
|
|
71
72
|
./fmtr/tools/interface_tools/interface_tools.py
|
|
72
73
|
./fmtr/tools/path_tools/__init__.py
|
|
@@ -156,6 +157,7 @@ fmtr/tools/entrypoints/install_yamlscript.py
|
|
|
156
157
|
fmtr/tools/entrypoints/remote_debug_test.py
|
|
157
158
|
fmtr/tools/entrypoints/shell_debug.py
|
|
158
159
|
fmtr/tools/interface_tools/__init__.py
|
|
160
|
+
fmtr/tools/interface_tools/context.py
|
|
159
161
|
fmtr/tools/interface_tools/controls.py
|
|
160
162
|
fmtr/tools/interface_tools/interface_tools.py
|
|
161
163
|
fmtr/tools/path_tools/__init__.py
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.3.38
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -14,62 +14,62 @@ pydantic-ai[logfire,openai]
|
|
|
14
14
|
ollama
|
|
15
15
|
|
|
16
16
|
[all]
|
|
17
|
-
|
|
17
|
+
sentence_transformers
|
|
18
|
+
google-auth
|
|
19
|
+
flet[all]
|
|
20
|
+
html2text
|
|
21
|
+
ollama
|
|
22
|
+
google-auth-oauthlib
|
|
23
|
+
docker
|
|
18
24
|
pytest-cov
|
|
25
|
+
pandas
|
|
26
|
+
openpyxl
|
|
27
|
+
tokenizers
|
|
28
|
+
peft
|
|
29
|
+
google-api-python-client
|
|
30
|
+
pydantic-ai[logfire,openai]
|
|
31
|
+
transformers[sentencepiece]
|
|
32
|
+
google-auth-httplib2
|
|
33
|
+
Unidecode
|
|
34
|
+
tabulate
|
|
35
|
+
pydevd-pycharm~=251.25410.159
|
|
36
|
+
dnspython[doh]
|
|
37
|
+
pydantic-settings
|
|
38
|
+
fastapi
|
|
39
|
+
json_repair
|
|
40
|
+
pymupdf4llm
|
|
41
|
+
pymupdf
|
|
42
|
+
logfire[httpx]
|
|
43
|
+
flet-video
|
|
44
|
+
httpx_retries
|
|
45
|
+
deepmerge
|
|
46
|
+
logfire
|
|
47
|
+
distributed
|
|
48
|
+
playwright
|
|
19
49
|
pydantic
|
|
50
|
+
uvicorn[standard]
|
|
51
|
+
cachetools
|
|
52
|
+
pyyaml
|
|
53
|
+
bokeh
|
|
54
|
+
openai
|
|
55
|
+
tinynetrc
|
|
56
|
+
huggingface_hub
|
|
20
57
|
appdirs
|
|
21
|
-
httpx
|
|
22
|
-
contexttimer
|
|
23
|
-
peft
|
|
24
58
|
flet-webview
|
|
59
|
+
yamlscript
|
|
25
60
|
diskcache
|
|
26
|
-
google-auth
|
|
27
|
-
cachetools
|
|
28
|
-
google-api-python-client
|
|
29
|
-
uvicorn[standard]
|
|
30
|
-
pandas
|
|
31
|
-
pydantic-settings
|
|
32
61
|
sre_yield
|
|
33
|
-
tokenizers
|
|
34
|
-
dask[bag]
|
|
35
62
|
semver
|
|
36
63
|
faker
|
|
37
|
-
|
|
38
|
-
google-auth-oauthlib
|
|
39
|
-
openpyxl
|
|
40
|
-
playwright
|
|
41
|
-
google-auth-httplib2
|
|
64
|
+
contexttimer
|
|
42
65
|
setuptools
|
|
43
|
-
|
|
44
|
-
regex
|
|
45
|
-
html2text
|
|
46
|
-
pydevd-pycharm~=251.25410.159
|
|
66
|
+
torchvision
|
|
47
67
|
logfire[fastapi]
|
|
48
|
-
|
|
49
|
-
huggingface_hub
|
|
50
|
-
filetype
|
|
51
|
-
deepmerge
|
|
52
|
-
transformers[sentencepiece]
|
|
53
|
-
bokeh
|
|
54
|
-
Unidecode
|
|
55
|
-
fastapi
|
|
56
|
-
tinynetrc
|
|
57
|
-
flet[all]
|
|
58
|
-
pymupdf4llm
|
|
59
|
-
distributed
|
|
60
|
-
openai
|
|
61
|
-
tabulate
|
|
62
|
-
dnspython[doh]
|
|
68
|
+
regex
|
|
63
69
|
torchaudio
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
logfire[httpx]
|
|
68
|
-
pymupdf
|
|
69
|
-
docker
|
|
70
|
-
sentence_transformers
|
|
71
|
-
logfire
|
|
72
|
-
pydantic-ai[logfire,openai]
|
|
70
|
+
dask[bag]
|
|
71
|
+
httpx
|
|
72
|
+
filetype
|
|
73
73
|
|
|
74
74
|
[api]
|
|
75
75
|
fastapi
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|