fmtr.tools 1.1.4__py3-none-any.whl → 1.1.6__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.

@@ -11,3 +11,13 @@ def remote_debug_test():
11
11
  """
12
12
  from fmtr.tools import debug
13
13
  debug.trace(is_debug=True)
14
+
15
+
16
+ def shell_debug():
17
+ """
18
+
19
+ Test debugger connection
20
+
21
+ """
22
+ from fmtr.tools import debug
23
+ debug.debug_shell()
fmtr/tools/constants.py CHANGED
@@ -31,3 +31,4 @@ class Constants:
31
31
  FILENAME_CONFIG = 'settings.yaml'
32
32
  DIR_NAME_ARTIFACTS = 'artifacts'
33
33
  FILENAME_VERSION = 'version'
34
+ DIR_NAME_HF = 'hf'
@@ -1,3 +1,5 @@
1
+ import dataclasses
2
+
1
3
  import pydevd_pycharm
2
4
 
3
5
  from fmtr.tools import environment_tools as env
@@ -5,6 +7,40 @@ from fmtr.tools.constants import Constants
5
7
 
6
8
  MASK = 'Starting debugger at tcp://{host}:{port}...'
7
9
 
10
+
11
+ @dataclasses.dataclass
12
+ class ShellDebug:
13
+ """
14
+
15
+ Debugging information for shell commands
16
+
17
+ """
18
+ command: str
19
+ out: str
20
+ err: str
21
+ status: int
22
+
23
+ # timestamp: datetime=dataclasses.field(default_factory=datetime.now)
24
+
25
+ @classmethod
26
+ def from_path(cls, path_str):
27
+ """
28
+
29
+ Get debug info from path
30
+
31
+ """
32
+ from fmtr.tools import Path
33
+ path = Path(path_str).absolute()
34
+ data = {field.name: (path / f'{field.name}.log').read_text().strip() for field in dataclasses.fields(cls)}
35
+ self = cls(**data)
36
+ return self
37
+
38
+ @property
39
+ def env(self):
40
+ return env.get_dict()
41
+
42
+
43
+
8
44
  def trace(is_debug=None, host=None, port=None, stdoutToServer=True, stderrToServer=True, **kwargs):
9
45
  """
10
46
 
@@ -29,3 +65,26 @@ def trace(is_debug=None, host=None, port=None, stdoutToServer=True, stderrToServ
29
65
  logger.info(msg)
30
66
 
31
67
  pydevd_pycharm.settrace(host, port=port, stdoutToServer=stdoutToServer, stderrToServer=stderrToServer, **kwargs)
68
+
69
+
70
+ def debug_shell():
71
+ """
72
+
73
+ Starts a debug shell by initializing a `ShellDebug` object from a given path
74
+ and enabling tracing with debug mode turned on.
75
+
76
+ """
77
+ path_str = sys.argv[1]
78
+ data = ShellDebug.from_path(path_str)
79
+ trace(is_debug=True)
80
+ data
81
+
82
+
83
+ if __name__ == "__main__":
84
+ import sys
85
+
86
+ sys.argv = [
87
+ 'test.py',
88
+ './fmtr-debug/34e8d492-2f15-419a-8fcb-fe4fa0fa02bb',
89
+ ]
90
+ debug_shell()
fmtr/tools/path_tools.py CHANGED
@@ -228,7 +228,14 @@ class PackagePaths:
228
228
  Path of artifacts directory.
229
229
 
230
230
  """
231
- return self.repo / self.dir_name_artifacts
231
+
232
+ from fmtr.tools import env
233
+ if env.IS_DEBUG:
234
+ path = self.repo / self.dir_name_artifacts
235
+ else:
236
+ path = Path('/') / self.dir_name_artifacts
237
+
238
+ return path
232
239
 
233
240
  @property
234
241
  def settings(self) -> Path:
@@ -239,6 +246,15 @@ class PackagePaths:
239
246
  """
240
247
  return self.artifacts / self.filename_config
241
248
 
249
+ @property
250
+ def hf(self) -> Path:
251
+ """
252
+
253
+ Path of HuggingFace directory
254
+
255
+ """
256
+ return self.artifacts / Constants.DIR_NAME_HF
257
+
242
258
  def __repr__(self) -> str:
243
259
  """
244
260
 
fmtr/tools/version CHANGED
@@ -1 +1 @@
1
- 1.1.4
1
+ 1.1.6
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.1.4
3
+ Version: 1.1.6
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,51 +9,51 @@ 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: tokenizers; extra == "test"
12
+ Requires-Dist: google-api-python-client; extra == "test"
13
+ Requires-Dist: pymupdf4llm; extra == "test"
13
14
  Requires-Dist: faker; extra == "test"
14
- Requires-Dist: pydantic; extra == "test"
15
- Requires-Dist: logfire; extra == "test"
16
- Requires-Dist: tabulate; extra == "test"
17
- Requires-Dist: diskcache; extra == "test"
18
- Requires-Dist: sre_yield; extra == "test"
19
- Requires-Dist: distributed; extra == "test"
20
- Requires-Dist: bokeh; extra == "test"
21
- Requires-Dist: flet[all]; extra == "test"
22
- Requires-Dist: fastapi; extra == "test"
23
- Requires-Dist: uvicorn[standard]; extra == "test"
24
- Requires-Dist: google-auth; extra == "test"
25
- Requires-Dist: logfire[fastapi]; extra == "test"
26
- Requires-Dist: contexttimer; extra == "test"
27
15
  Requires-Dist: pyyaml; extra == "test"
28
- Requires-Dist: flet-webview; extra == "test"
16
+ Requires-Dist: html2text; extra == "test"
17
+ Requires-Dist: pymupdf; extra == "test"
18
+ Requires-Dist: contexttimer; extra == "test"
19
+ Requires-Dist: dask[bag]; extra == "test"
20
+ Requires-Dist: json_repair; extra == "test"
21
+ Requires-Dist: torchvision; extra == "test"
22
+ Requires-Dist: pydantic-settings; extra == "test"
23
+ Requires-Dist: huggingface_hub; extra == "test"
24
+ Requires-Dist: logfire[fastapi]; extra == "test"
29
25
  Requires-Dist: transformers[sentencepiece]; extra == "test"
26
+ Requires-Dist: sre_yield; extra == "test"
27
+ Requires-Dist: pytest-cov; extra == "test"
28
+ Requires-Dist: torchaudio; extra == "test"
30
29
  Requires-Dist: sentence_transformers; extra == "test"
30
+ Requires-Dist: pydantic; extra == "test"
31
+ Requires-Dist: docker; extra == "test"
32
+ Requires-Dist: tokenizers; extra == "test"
33
+ Requires-Dist: uvicorn[standard]; extra == "test"
31
34
  Requires-Dist: pandas; extra == "test"
32
- Requires-Dist: dask[bag]; extra == "test"
35
+ Requires-Dist: openpyxl; extra == "test"
36
+ Requires-Dist: ollama; extra == "test"
37
+ Requires-Dist: flet-video; extra == "test"
38
+ Requires-Dist: flet-webview; extra == "test"
33
39
  Requires-Dist: pydevd-pycharm; extra == "test"
34
- Requires-Dist: openai; extra == "test"
35
- Requires-Dist: peft; extra == "test"
40
+ Requires-Dist: google-auth; extra == "test"
36
41
  Requires-Dist: tinynetrc; extra == "test"
37
- Requires-Dist: semver; extra == "test"
38
- Requires-Dist: pytest-cov; extra == "test"
39
- Requires-Dist: pymupdf4llm; extra == "test"
40
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
41
- Requires-Dist: google-api-python-client; extra == "test"
42
- Requires-Dist: html2text; extra == "test"
43
- Requires-Dist: huggingface_hub; extra == "test"
44
- Requires-Dist: torchaudio; extra == "test"
42
+ Requires-Dist: google-auth-oauthlib; extra == "test"
45
43
  Requires-Dist: deepmerge; extra == "test"
46
- Requires-Dist: torchvision; extra == "test"
44
+ Requires-Dist: openai; extra == "test"
45
+ Requires-Dist: diskcache; extra == "test"
46
+ Requires-Dist: bokeh; extra == "test"
47
+ Requires-Dist: logfire; extra == "test"
47
48
  Requires-Dist: google-auth-httplib2; extra == "test"
48
- Requires-Dist: pydantic-settings; extra == "test"
49
- Requires-Dist: google-auth-oauthlib; extra == "test"
50
- Requires-Dist: openpyxl; extra == "test"
51
- Requires-Dist: pymupdf; extra == "test"
49
+ Requires-Dist: semver; extra == "test"
50
+ Requires-Dist: tabulate; extra == "test"
51
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
52
+ Requires-Dist: fastapi; extra == "test"
52
53
  Requires-Dist: Unidecode; extra == "test"
53
- Requires-Dist: flet-video; extra == "test"
54
- Requires-Dist: ollama; extra == "test"
55
- Requires-Dist: docker; extra == "test"
56
- Requires-Dist: json_repair; extra == "test"
54
+ Requires-Dist: distributed; extra == "test"
55
+ Requires-Dist: peft; extra == "test"
56
+ Requires-Dist: flet[all]; extra == "test"
57
57
  Provides-Extra: yaml
58
58
  Requires-Dist: pyyaml; extra == "yaml"
59
59
  Provides-Extra: logging
@@ -3,12 +3,12 @@ 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
5
5
  fmtr/tools/caching_tools.py,sha256=UOCYUNvLQ-NofR_dhqBmZF96-HRPf4At5MmxVk3gAIk,2943
6
- fmtr/tools/console_script_tools.py,sha256=Jcmm4WPhCQdPZfd468xD0epkt29sgcPROwKu79V_ehg,203
7
- fmtr/tools/constants.py,sha256=KrV6JpITZuVdLDN5ZzQb1wAAA3nNust6exCvbZEaKQE,1102
6
+ fmtr/tools/console_script_tools.py,sha256=7KVO0WI3Z7d7EZcmvTVS-O4OMxYYMZuA_7s0eubv76E,328
7
+ fmtr/tools/constants.py,sha256=vc7sa1WdEsaxqSxrRAKTmNv8EmtOoY3b_V9CtAx4zzw,1125
8
8
  fmtr/tools/data_modelling_tools.py,sha256=0BFm-F_cYzVTxftWQwORkPd0FM2BTLVh9-s0-rTTFoo,1744
9
9
  fmtr/tools/dataclass_tools.py,sha256=0Gt6KeLhtPgubo_2tYkIVqB8oQ91Qzag8OAGZDdjvMU,1209
10
10
  fmtr/tools/datatype_tools.py,sha256=3P4AWIFGkJ-UqvXlj0Jc9IvkIIgTOE9jRrOk3NVbpH8,1508
11
- fmtr/tools/debugging_tools.py,sha256=7uWdAAdvnB8bo0gTVwAYGCH1yv_ocFeP_tLk6xhiaPk,950
11
+ fmtr/tools/debugging_tools.py,sha256=t3DGzdjiEVIYV2H_R620eAhyxgsEFsqwmZygmBEUt58,2067
12
12
  fmtr/tools/docker_tools.py,sha256=rdaZje2xhlmnfQqZnR7IHgRdWncTLjrJcViUTt5oEwk,617
13
13
  fmtr/tools/environment_tools.py,sha256=ZO2e8pTzbQ8jNXnmKpaZF7_3qkVM6U5iqku5YSwOszE,1849
14
14
  fmtr/tools/function_tools.py,sha256=_oW3-HZXMst2pcU-I-U7KTMmzo0g9MIQKmX-c2_NEoE,858
@@ -29,7 +29,7 @@ fmtr/tools/name_tools.py,sha256=5CB_phqhHjl66iI8oLxOGPF2odC1apdul-M8Fv2xBhs,5514
29
29
  fmtr/tools/netrc_tools.py,sha256=PpNpz_mWlQi6VHGromKwFfTyLpHUXsd4LY6-OKLCbeI,376
30
30
  fmtr/tools/openai_tools.py,sha256=6SUgejgzUzmlKKct2_ePXntvMegu3FJgfk9x7aqtqYc,742
31
31
  fmtr/tools/parallel_tools.py,sha256=QEb_gN1StkxsqYaH4HSjiJX8Y3gpb2uKNsOzG4uFpaM,3071
32
- fmtr/tools/path_tools.py,sha256=BKz9dVE2BTUzWKEc0_FuGzaWRowBbu1y0nwDk2blCi0,5861
32
+ fmtr/tools/path_tools.py,sha256=UNi_qRBugDHxBNdEm26wHy3UUBOfY6fVK_G1P51RfCI,6175
33
33
  fmtr/tools/pdf_tools.py,sha256=xvv9B84uAF81rFJRnXhSsxYuP42vY9ZdPVFrSMVe8G8,4069
34
34
  fmtr/tools/platform_tools.py,sha256=7p69CmAHe_sF68Fx9uVhns1k5EewTHTWgUYzkl6ZQKA,308
35
35
  fmtr/tools/process_tools.py,sha256=Ysh5Dk2QFBhXQerArjKdt7xZd3JrN5Ho02AaOjH0Nnw,1425
@@ -43,7 +43,7 @@ fmtr/tools/tabular_tools.py,sha256=tpIpZzYku1HcJrHZJL6BC39LmN3WUWVhFbK2N7nDVmE,1
43
43
  fmtr/tools/tokenization_tools.py,sha256=me-IBzSLyNYejLybwjO9CNB6Mj2NYfKPaOVThXyaGNg,4268
44
44
  fmtr/tools/tools.py,sha256=CAsApa1YwVdNE6H66Vjivs_mXYvOas3rh7fPELAnTpk,795
45
45
  fmtr/tools/unicode_tools.py,sha256=yS_9wpu8ogNoiIL7s1G_8bETFFO_YQlo4LNPv1NLDeY,52
46
- fmtr/tools/version,sha256=s4n9aV0PFyXVJPIoNMaqvv68dMsxTpUy9-iiXCnuR9I,5
46
+ fmtr/tools/version,sha256=BNiWbHqtYm5lfiKfQRzKXTL2nBrnbwbpNUKsa17xLUc,5
47
47
  fmtr/tools/version_tools.py,sha256=yNs_CGqWpqE4jbK9wsPIi14peJVXYbhIcMqHAFOw3yE,1480
48
48
  fmtr/tools/yaml_tools.py,sha256=Ol43ZwbnSXGnn1K98Uxx61KPGSqfC4axE-X2q1LKMwk,349
49
49
  fmtr/tools/ai_tools/__init__.py,sha256=JZrLuOFNV1A3wvJgonxOgz_4WS-7MfCuowGWA5uYCjs,372
@@ -57,9 +57,9 @@ fmtr/tools/tests/test_environment.py,sha256=iHaiMQfECYZPkPKwfuIZV9uHuWe3aE-p_dN_
57
57
  fmtr/tools/tests/test_json.py,sha256=IeSP4ziPvRcmS8kq7k9tHonC9rN5YYq9GSNT2ul6Msk,287
58
58
  fmtr/tools/tests/test_path.py,sha256=AkZQa6_8BQ-VaCyL_J-iKmdf2ZaM-xFYR37Kun3k4_g,2188
59
59
  fmtr/tools/tests/test_yaml.py,sha256=jc0TwwKu9eC0LvFGNMERdgBue591xwLxYXFbtsRwXVM,287
60
- fmtr_tools-1.1.4.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
61
- fmtr_tools-1.1.4.dist-info/METADATA,sha256=q81Hj9eHRAlCzP5eEAW8xhuH5rjkkQ4uXc53VMpb5Ic,14646
62
- fmtr_tools-1.1.4.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
63
- fmtr_tools-1.1.4.dist-info/entry_points.txt,sha256=Zmeyls-zo5S99SlKUmsy9ULUNmk-4B9WQCEjuPIH0Yw,142
64
- fmtr_tools-1.1.4.dist-info/top_level.txt,sha256=t5341a8ii3n4RFizwTeXGmcq_pf4GqL1h9ylE5LIWRk,12
65
- fmtr_tools-1.1.4.dist-info/RECORD,,
60
+ fmtr_tools-1.1.6.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
61
+ fmtr_tools-1.1.6.dist-info/METADATA,sha256=_tKE6fvUcfRKm2VIE4_JLrd5c8Tekz4LXzZJLWhsHOk,14646
62
+ fmtr_tools-1.1.6.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
63
+ fmtr_tools-1.1.6.dist-info/entry_points.txt,sha256=e-eOW1Ml13tbxHC6Er1MnVOEDePeWw7DKwlE-l-gCY0,205
64
+ fmtr_tools-1.1.6.dist-info/top_level.txt,sha256=t5341a8ii3n4RFizwTeXGmcq_pf4GqL1h9ylE5LIWRk,12
65
+ fmtr_tools-1.1.6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.4.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
2
  cache-hfh = fmtr.tools.console_script_tools:cache_hfh
3
+ fmtr-shell-debug = fmtr.tools.console_script_tools:shell_debug
3
4
  remote-debug-test = fmtr.tools.console_script_tools:remote_debug_test