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.

Files changed (97) hide show
  1. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/PKG-INFO +46 -46
  2. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/google_api_tools.py +15 -4
  3. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/interface_tools/__init__.py +1 -0
  4. fmtr_tools-1.3.40/fmtr/tools/interface_tools/context.py +12 -0
  5. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/interface_tools/interface_tools.py +12 -5
  6. fmtr_tools-1.3.40/fmtr/tools/version +1 -0
  7. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/PKG-INFO +46 -46
  8. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/SOURCES.txt +2 -0
  9. fmtr_tools-1.3.38/fmtr/tools/version +0 -1
  10. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/LICENSE +0 -0
  11. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/README.md +0 -0
  12. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/__init__.py +0 -0
  13. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/ai_tools/__init__.py +0 -0
  14. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  15. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  16. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/api_tools.py +0 -0
  17. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/async_tools.py +0 -0
  18. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/augmentation_tools.py +0 -0
  19. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/caching_tools.py +0 -0
  20. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/constants.py +0 -0
  21. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/context_tools.py +0 -0
  22. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/data_modelling_tools.py +0 -0
  23. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dataclass_tools.py +0 -0
  24. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/datatype_tools.py +0 -0
  25. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/debugging_tools.py +0 -0
  26. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/__init__.py +0 -0
  27. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/client.py +0 -0
  28. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/dm.py +0 -0
  29. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/proxy.py +0 -0
  30. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/dns_tools/server.py +0 -0
  31. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/docker_tools.py +0 -0
  32. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/__init__.py +0 -0
  33. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/cache_hfh.py +0 -0
  34. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/ep_test.py +0 -0
  35. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/install_yamlscript.py +0 -0
  36. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/remote_debug_test.py +0 -0
  37. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/entrypoints/shell_debug.py +0 -0
  38. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/environment_tools.py +0 -0
  39. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/function_tools.py +0 -0
  40. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/hash_tools.py +0 -0
  41. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/hfh_tools.py +0 -0
  42. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/html_tools.py +0 -0
  43. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/http_tools.py +0 -0
  44. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/import_tools.py +0 -0
  45. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/inherit_tools.py +0 -0
  46. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/inspection_tools.py +0 -0
  47. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/interface_tools/controls.py +0 -0
  48. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/iterator_tools.py +0 -0
  49. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/json_fix_tools.py +0 -0
  50. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/json_tools.py +0 -0
  51. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/logging_tools.py +0 -0
  52. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/merging_tools.py +0 -0
  53. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/metric_tools.py +0 -0
  54. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/name_tools.py +0 -0
  55. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/netrc_tools.py +0 -0
  56. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/openai_tools.py +0 -0
  57. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/packaging_tools.py +0 -0
  58. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/parallel_tools.py +0 -0
  59. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/path_tools/__init__.py +0 -0
  60. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  61. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/path_tools/path_tools.py +0 -0
  62. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  63. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/pattern_tools.py +0 -0
  64. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/pdf_tools.py +0 -0
  65. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/platform_tools.py +0 -0
  66. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/process_tools.py +0 -0
  67. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/profiling_tools.py +0 -0
  68. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/random_tools.py +0 -0
  69. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/semantic_tools.py +0 -0
  70. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/settings_tools.py +0 -0
  71. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/setup_tools/__init__.py +0 -0
  72. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/setup_tools/setup_tools.py +0 -0
  73. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/spaces_tools.py +0 -0
  74. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/string_tools.py +0 -0
  75. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tabular_tools.py +0 -0
  76. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/__init__.py +0 -0
  77. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/conftest.py +0 -0
  78. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/helpers.py +0 -0
  79. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_datatype.py +0 -0
  80. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_environment.py +0 -0
  81. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_json.py +0 -0
  82. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_path.py +0 -0
  83. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tests/test_yaml.py +0 -0
  84. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tokenization_tools.py +0 -0
  85. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/tools.py +0 -0
  86. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/unicode_tools.py +0 -0
  87. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/version_tools/__init__.py +0 -0
  88. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/version_tools/version_tools.py +0 -0
  89. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/webhook_tools.py +0 -0
  90. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr/tools/yaml_tools.py +0 -0
  91. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  92. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/entry_points.txt +0 -0
  93. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/requires.txt +45 -45
  94. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/fmtr.tools.egg-info/top_level.txt +0 -0
  95. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/pyproject.toml +0 -0
  96. {fmtr_tools-1.3.38 → fmtr_tools-1.3.40}/setup.cfg +0 -0
  97. {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.38
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: json_repair; extra == "all"
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: torchvision; extra == "all"
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: yamlscript; extra == "all"
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: pyyaml; extra == "all"
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: flet-video; extra == "all"
184
- Requires-Dist: ollama; extra == "all"
185
- Requires-Dist: httpx_retries; extra == "all"
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
- msg = f'Doing auth for service {cls.SERVICE} ({cls.VERSION})...'
24
- logger.info(msg)
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
- service = build(cls.SERVICE, cls.VERSION, credentials=credentials)
37
- return service
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)
@@ -0,0 +1,12 @@
1
+ from flet.core.page import Page
2
+
3
+ from fmtr.tools.data_modelling_tools import Base, MixinArbitraryTypes
4
+
5
+
6
+ class Context(Base, MixinArbitraryTypes):
7
+ """
8
+
9
+ Base context class
10
+
11
+ """
12
+ page: Page
@@ -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
- def __init__(self, *args, **kwargs):
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
- self = cls()
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.38
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: json_repair; extra == "all"
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: torchvision; extra == "all"
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: yamlscript; extra == "all"
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: pyyaml; extra == "all"
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: flet-video; extra == "all"
184
- Requires-Dist: ollama; extra == "all"
185
- Requires-Dist: httpx_retries; extra == "all"
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
@@ -14,62 +14,62 @@ pydantic-ai[logfire,openai]
14
14
  ollama
15
15
 
16
16
  [all]
17
- json_repair
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
- torchvision
38
- google-auth-oauthlib
39
- openpyxl
40
- playwright
41
- google-auth-httplib2
64
+ contexttimer
42
65
  setuptools
43
- yamlscript
44
- regex
45
- html2text
46
- pydevd-pycharm~=251.25410.159
66
+ torchvision
47
67
  logfire[fastapi]
48
- pyyaml
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
- flet-video
65
- ollama
66
- httpx_retries
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