fmtr.tools 1.1.1__py3-none-any.whl → 1.3.81__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.
Files changed (67) hide show
  1. fmtr/tools/__init__.py +68 -52
  2. fmtr/tools/ai_tools/__init__.py +2 -2
  3. fmtr/tools/ai_tools/agentic_tools.py +151 -32
  4. fmtr/tools/ai_tools/inference_tools.py +2 -1
  5. fmtr/tools/api_tools.py +8 -5
  6. fmtr/tools/caching_tools.py +101 -3
  7. fmtr/tools/constants.py +33 -0
  8. fmtr/tools/context_tools.py +23 -0
  9. fmtr/tools/data_modelling_tools.py +227 -14
  10. fmtr/tools/database_tools/__init__.py +6 -0
  11. fmtr/tools/database_tools/document.py +51 -0
  12. fmtr/tools/datatype_tools.py +21 -1
  13. fmtr/tools/datetime_tools.py +12 -0
  14. fmtr/tools/debugging_tools.py +60 -0
  15. fmtr/tools/dns_tools/__init__.py +7 -0
  16. fmtr/tools/dns_tools/client.py +97 -0
  17. fmtr/tools/dns_tools/dm.py +257 -0
  18. fmtr/tools/dns_tools/proxy.py +66 -0
  19. fmtr/tools/dns_tools/server.py +138 -0
  20. fmtr/tools/docker_tools/__init__.py +6 -0
  21. fmtr/tools/entrypoints/__init__.py +0 -0
  22. fmtr/tools/entrypoints/cache_hfh.py +3 -0
  23. fmtr/tools/entrypoints/ep_test.py +2 -0
  24. fmtr/tools/entrypoints/install_yamlscript.py +8 -0
  25. fmtr/tools/{console_script_tools.py → entrypoints/remote_debug_test.py} +1 -6
  26. fmtr/tools/entrypoints/shell_debug.py +8 -0
  27. fmtr/tools/environment_tools.py +2 -2
  28. fmtr/tools/function_tools.py +77 -1
  29. fmtr/tools/google_api_tools.py +15 -4
  30. fmtr/tools/http_tools.py +26 -0
  31. fmtr/tools/inherit_tools.py +27 -0
  32. fmtr/tools/interface_tools/__init__.py +8 -0
  33. fmtr/tools/interface_tools/context.py +13 -0
  34. fmtr/tools/interface_tools/controls.py +354 -0
  35. fmtr/tools/interface_tools/interface_tools.py +189 -0
  36. fmtr/tools/iterator_tools.py +29 -0
  37. fmtr/tools/logging_tools.py +43 -16
  38. fmtr/tools/packaging_tools.py +14 -0
  39. fmtr/tools/path_tools/__init__.py +12 -0
  40. fmtr/tools/path_tools/app_path_tools.py +40 -0
  41. fmtr/tools/{path_tools.py → path_tools/path_tools.py} +156 -12
  42. fmtr/tools/path_tools/type_path_tools.py +3 -0
  43. fmtr/tools/pattern_tools.py +260 -0
  44. fmtr/tools/pdf_tools.py +39 -1
  45. fmtr/tools/settings_tools.py +23 -4
  46. fmtr/tools/setup_tools/__init__.py +8 -0
  47. fmtr/tools/setup_tools/setup_tools.py +447 -0
  48. fmtr/tools/string_tools.py +92 -13
  49. fmtr/tools/tabular_tools.py +61 -0
  50. fmtr/tools/tools.py +27 -2
  51. fmtr/tools/version +1 -1
  52. fmtr/tools/version_tools/__init__.py +12 -0
  53. fmtr/tools/version_tools/version_tools.py +51 -0
  54. fmtr/tools/webhook_tools.py +17 -0
  55. fmtr/tools/yaml_tools.py +66 -5
  56. {fmtr_tools-1.1.1.dist-info → fmtr_tools-1.3.81.dist-info}/METADATA +136 -54
  57. fmtr_tools-1.3.81.dist-info/RECORD +93 -0
  58. {fmtr_tools-1.1.1.dist-info → fmtr_tools-1.3.81.dist-info}/WHEEL +1 -1
  59. fmtr_tools-1.3.81.dist-info/entry_points.txt +6 -0
  60. fmtr_tools-1.3.81.dist-info/top_level.txt +1 -0
  61. fmtr/tools/docker_tools.py +0 -30
  62. fmtr/tools/interface_tools.py +0 -64
  63. fmtr/tools/version_tools.py +0 -62
  64. fmtr_tools-1.1.1.dist-info/RECORD +0 -65
  65. fmtr_tools-1.1.1.dist-info/entry_points.txt +0 -3
  66. fmtr_tools-1.1.1.dist-info/top_level.txt +0 -2
  67. {fmtr_tools-1.1.1.dist-info → fmtr_tools-1.3.81.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,6 @@
1
+ [console_scripts]
2
+ fmtr-tools-cache-hfh = fmtr.tools.entrypoints.cache_hfh:main
3
+ fmtr-tools-ep-test = fmtr.tools.entrypoints.ep_test:main
4
+ fmtr-tools-install-yamlscript = fmtr.tools.entrypoints.install_yamlscript:main
5
+ fmtr-tools-remote-debug-test = fmtr.tools.entrypoints.remote_debug_test:main
6
+ fmtr-tools-shell-debug = fmtr.tools.entrypoints.shell_debug:main
@@ -0,0 +1 @@
1
+ fmtr
@@ -1,30 +0,0 @@
1
- import contextlib
2
- import docker
3
-
4
-
5
- @contextlib.contextmanager
6
- def Container(image, ports=None, name=None, **kwargs):
7
- """
8
-
9
- Run a Docker container in a context manager
10
-
11
- """
12
- client = docker.from_env()
13
-
14
- try:
15
- container = client.containers.get(name)
16
- container.stop()
17
- container.remove()
18
- except docker.errors.NotFound:
19
- pass
20
-
21
- ports = {f'{port}/tcp': port for port in ports}
22
- container = client.containers.run(image, ports=ports, detach=True, name=name, **kwargs)
23
-
24
- try:
25
- yield container
26
- finally:
27
- container.stop()
28
- container.remove()
29
-
30
-
@@ -1,64 +0,0 @@
1
- import flet as ft
2
- from flet.core.event import Event
3
- from flet.core.types import AppView
4
- from flet.core.view import View
5
-
6
- from fmtr.tools.logging_tools import logger
7
-
8
-
9
- class Interface:
10
- """
11
-
12
- Simple interface base class.
13
-
14
- """
15
- TITLE = 'Base Interface'
16
- HOST = '0.0.0.0'
17
- PORT = 8080
18
- APPVIEW = AppView.WEB_BROWSER
19
- PATH_ASSETS = None
20
- ROUTE_ROOT = '/'
21
-
22
- def render(self, page: ft.Page):
23
- """
24
-
25
- Interface entry point.
26
-
27
- """
28
-
29
- if not page.on_route_change:
30
- page.on_route_change = lambda e, page=page: self.route(page, e)
31
- page.on_view_pop = lambda view, page=page: self.pop(page, view)
32
-
33
- page.go(self.ROUTE_ROOT)
34
-
35
- def route(self, page: ft.Page, event: Event):
36
- """
37
-
38
- Overridable router.
39
-
40
- """
41
- raise NotImplementedError
42
-
43
- def pop(self, page: ft.Page, view: View):
44
- """
45
-
46
- Overridable view pop.
47
-
48
- """
49
- raise NotImplementedError
50
-
51
- @classmethod
52
- def launch(cls):
53
- """
54
-
55
- Initialise self and launch.
56
-
57
- """
58
- self = cls()
59
- logger.info(f"Launching {self.TITLE} at http://{self.HOST}:{self.PORT}")
60
- ft.app(self.render, view=self.APPVIEW, host=self.HOST, port=self.PORT, assets_dir=self.PATH_ASSETS)
61
-
62
-
63
- if __name__ == "__main__":
64
- Interface.launch()
@@ -1,62 +0,0 @@
1
- from fmtr.tools.import_tools import MissingExtraMockModule
2
- from fmtr.tools.inspection_tools import get_call_path
3
-
4
- try:
5
- import semver
6
-
7
- semver = semver
8
- parse = semver.VersionInfo.parse
9
- except ImportError as exception:
10
- # Special case to allow module import.
11
- # Should be slit out into separate version.dev subpackage
12
- parse = MissingExtraMockModule('version', exception)
13
- semver = MissingExtraMockModule('version', exception)
14
-
15
-
16
- def read() -> str:
17
- """
18
-
19
- Read a generic version file from the calling package path.
20
-
21
- """
22
-
23
- path = get_call_path(offset=2).parent / 'version'
24
- return read_path(path)
25
-
26
-
27
- def read_path(path) -> str:
28
- """
29
-
30
- Read in version from specified path
31
-
32
- """
33
- from fmtr.tools.tools import Constants
34
- text = path.read_text(encoding=Constants.ENCODING).strip()
35
-
36
- text = get(text)
37
- return text
38
-
39
-
40
- def get(text) -> str:
41
- """
42
-
43
- Optionally add dev build info to raw version string.
44
-
45
- """
46
- import os
47
- from fmtr.tools import datatype_tools
48
-
49
- is_dev = datatype_tools.to_bool(os.getenv('FMTR_DEV', default=False))
50
-
51
- if is_dev:
52
- import datetime
53
- from fmtr.tools.tools import Constants
54
-
55
- timestamp = datetime.datetime.now(datetime.timezone.utc).strftime(Constants.DATETIME_SEMVER_BUILD_FORMAT)
56
-
57
- version = parse(text)
58
- version = version.bump_patch()
59
- version = version.replace(prerelease='dev', build=timestamp)
60
- text = str(version)
61
-
62
- return text
@@ -1,65 +0,0 @@
1
- fmtr/tools/__init__.py,sha256=_p8-qJSEfrdI5Kc1tTQ7RzIk7dbAcJ9yf0lpLEN4n80,5196
2
- fmtr/tools/api_tools.py,sha256=u5YEdKyKto8MKY8legULLU7xeJ7lY2Bgyaep_xa8iZg,2089
3
- fmtr/tools/async_tools.py,sha256=ewz757WcveQJd-G5SVr2JDOQVbdLGecCgl-tsBGVZz4,284
4
- fmtr/tools/augmentation_tools.py,sha256=-6ESbO4CDlKqVOV1J1V6qBeoBMzbFIinkDHRHnCBej0,55
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=aKFFW9iYdUtiuLV0gS5XAZsLmk8DwvydYebc5yJN8NE,993
8
- fmtr/tools/data_modelling_tools.py,sha256=0BFm-F_cYzVTxftWQwORkPd0FM2BTLVh9-s0-rTTFoo,1744
9
- fmtr/tools/dataclass_tools.py,sha256=0Gt6KeLhtPgubo_2tYkIVqB8oQ91Qzag8OAGZDdjvMU,1209
10
- fmtr/tools/datatype_tools.py,sha256=3P4AWIFGkJ-UqvXlj0Jc9IvkIIgTOE9jRrOk3NVbpH8,1508
11
- fmtr/tools/debugging_tools.py,sha256=7uWdAAdvnB8bo0gTVwAYGCH1yv_ocFeP_tLk6xhiaPk,950
12
- fmtr/tools/docker_tools.py,sha256=rdaZje2xhlmnfQqZnR7IHgRdWncTLjrJcViUTt5oEwk,617
13
- fmtr/tools/environment_tools.py,sha256=ZO2e8pTzbQ8jNXnmKpaZF7_3qkVM6U5iqku5YSwOszE,1849
14
- fmtr/tools/function_tools.py,sha256=_oW3-HZXMst2pcU-I-U7KTMmzo0g9MIQKmX-c2_NEoE,858
15
- fmtr/tools/google_api_tools.py,sha256=owWE0GlnJjmVbXus8ENxT2PH7Fnd3m_r-14xyR7lAnA,1107
16
- fmtr/tools/hash_tools.py,sha256=tr4HXpeT6rRrDk6TvMlRPUSrLRRaov96y128OI2tzsc,729
17
- fmtr/tools/hfh_tools.py,sha256=DCDIWuWlhtmIGCtp9cLcOTTEw_4yN_NocLX8w5NZsbk,2384
18
- fmtr/tools/html_tools.py,sha256=0nN8Nz5HtG9bXyApYfHSKEivLlxjsm3Gn6Mg2TK0brI,394
19
- fmtr/tools/import_tools.py,sha256=XJmiWLukRncJAcaGReDn4jIz1_IpVBjfYCQHH1hIg7c,588
20
- fmtr/tools/inspection_tools.py,sha256=tLTRvzy9XVomQPi0dfnF_cgwc7KiDVZAr7gPTk4S_bQ,278
21
- fmtr/tools/interface_tools.py,sha256=JVYUV7wuMr24BORuUtNaBlTeBFt8VDGJ3HPRajd7Y_4,1341
22
- fmtr/tools/iterator_tools.py,sha256=xj5f0c7LgLK53dddRRRJxBoLaBzlZoQS3_GfmpDPMoo,1311
23
- fmtr/tools/json_fix_tools.py,sha256=vNSlswVQnujPmKEqDjFJcO901mjMyv59q3awsT7mlhs,477
24
- fmtr/tools/json_tools.py,sha256=WkFc5q7oqMtcFejhN1K5zQFULa9TdLOup83Fr0saDRY,348
25
- fmtr/tools/logging_tools.py,sha256=EnpiUJh0tOgbR-45aI_EtZsqNW8XFfGwp1_1ULOcZ00,1875
26
- fmtr/tools/merging_tools.py,sha256=KDxCEFJEQJEwGw1qGKAgR55uUE2X2S5NWLKcfHRmX_k,227
27
- fmtr/tools/metric_tools.py,sha256=Lvia5CGFRIfrDFA8s37btIfTU5zHbo04cPJdAMtbndQ,272
28
- fmtr/tools/name_tools.py,sha256=5CB_phqhHjl66iI8oLxOGPF2odC1apdul-M8Fv2xBhs,5514
29
- fmtr/tools/netrc_tools.py,sha256=PpNpz_mWlQi6VHGromKwFfTyLpHUXsd4LY6-OKLCbeI,376
30
- fmtr/tools/openai_tools.py,sha256=6SUgejgzUzmlKKct2_ePXntvMegu3FJgfk9x7aqtqYc,742
31
- fmtr/tools/parallel_tools.py,sha256=QEb_gN1StkxsqYaH4HSjiJX8Y3gpb2uKNsOzG4uFpaM,3071
32
- fmtr/tools/path_tools.py,sha256=U8D-NCOSmJuV5fD_OvLoYQQ0Ii_o8zc3_xccePpKkPo,5940
33
- fmtr/tools/pdf_tools.py,sha256=xvv9B84uAF81rFJRnXhSsxYuP42vY9ZdPVFrSMVe8G8,4069
34
- fmtr/tools/platform_tools.py,sha256=7p69CmAHe_sF68Fx9uVhns1k5EewTHTWgUYzkl6ZQKA,308
35
- fmtr/tools/process_tools.py,sha256=Ysh5Dk2QFBhXQerArjKdt7xZd3JrN5Ho02AaOjH0Nnw,1425
36
- fmtr/tools/profiling_tools.py,sha256=jpXVjaNKPydTasEQVNXvxzGtMhXPit08AnJddkU8uIc,46
37
- fmtr/tools/random_tools.py,sha256=4VlQdk5THbR8ka4pZaLbk_ZO_4yy6PF_lHZes_rgenY,2223
38
- fmtr/tools/semantic_tools.py,sha256=cxY9NSAHWj4nEc6Oj4qA1omR3dWbl2OuH7_PkINc6_E,1386
39
- fmtr/tools/settings_tools.py,sha256=wqLqZ64j3l2WA-yL5Xyl55XKblp1SbxQbB44Z7kF5QU,1952
40
- fmtr/tools/spaces_tools.py,sha256=D_he3mve6DruB3OPS6QyzqD05ChHnRTb4buViKPe7To,1099
41
- fmtr/tools/string_tools.py,sha256=Q2vv7kuGVMaQlNSUxJYhex6WUQHDus40ht0PGImPjNQ,3879
42
- fmtr/tools/tabular_tools.py,sha256=tpIpZzYku1HcJrHZJL6BC39LmN3WUWVhFbK2N7nDVmE,120
43
- fmtr/tools/tokenization_tools.py,sha256=me-IBzSLyNYejLybwjO9CNB6Mj2NYfKPaOVThXyaGNg,4268
44
- fmtr/tools/tools.py,sha256=CAsApa1YwVdNE6H66Vjivs_mXYvOas3rh7fPELAnTpk,795
45
- fmtr/tools/unicode_tools.py,sha256=yS_9wpu8ogNoiIL7s1G_8bETFFO_YQlo4LNPv1NLDeY,52
46
- fmtr/tools/version,sha256=xXUskxWKoLyH9GZQV7PTCja5ljRfxCUKaTaPPORid84,5
47
- fmtr/tools/version_tools.py,sha256=yNs_CGqWpqE4jbK9wsPIi14peJVXYbhIcMqHAFOw3yE,1480
48
- fmtr/tools/yaml_tools.py,sha256=Ol43ZwbnSXGnn1K98Uxx61KPGSqfC4axE-X2q1LKMwk,349
49
- fmtr/tools/ai_tools/__init__.py,sha256=JZrLuOFNV1A3wvJgonxOgz_4WS-7MfCuowGWA5uYCjs,372
50
- fmtr/tools/ai_tools/agentic_tools.py,sha256=odGzy-VA7hrNJ10VKRb5KIHReBGKZCTkp81V0cDCz6E,2755
51
- fmtr/tools/ai_tools/inference_tools.py,sha256=yF8Oxph0L8W2CnK_o-MVztBhWVwBpgOEkx9_m3uqQww,11840
52
- fmtr/tools/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- fmtr/tools/tests/conftest.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- fmtr/tools/tests/helpers.py,sha256=N5sf9YoZV93a7tf_UxpLeyQ9vp6Ec0teNIimFDvc054,1091
55
- fmtr/tools/tests/test_datatype.py,sha256=C04m_qFuDT239K1OyYzBQ3ImNtR-5l5kKH4GUrRM9kQ,790
56
- fmtr/tools/tests/test_environment.py,sha256=iHaiMQfECYZPkPKwfuIZV9uHuWe3aE-p_dN_PWmmhnA,2167
57
- fmtr/tools/tests/test_json.py,sha256=IeSP4ziPvRcmS8kq7k9tHonC9rN5YYq9GSNT2ul6Msk,287
58
- fmtr/tools/tests/test_path.py,sha256=AkZQa6_8BQ-VaCyL_J-iKmdf2ZaM-xFYR37Kun3k4_g,2188
59
- fmtr/tools/tests/test_yaml.py,sha256=jc0TwwKu9eC0LvFGNMERdgBue591xwLxYXFbtsRwXVM,287
60
- fmtr_tools-1.1.1.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
61
- fmtr_tools-1.1.1.dist-info/METADATA,sha256=Uy8UHXG9pFePYF8J8igaBdRU8EoFbEZYcCYVnfNeqSw,14529
62
- fmtr_tools-1.1.1.dist-info/WHEEL,sha256=GHB6lJx2juba1wDgXDNlMTyM13ckjBMKf-OnwgKOCtA,91
63
- fmtr_tools-1.1.1.dist-info/entry_points.txt,sha256=Zmeyls-zo5S99SlKUmsy9ULUNmk-4B9WQCEjuPIH0Yw,142
64
- fmtr_tools-1.1.1.dist-info/top_level.txt,sha256=t5341a8ii3n4RFizwTeXGmcq_pf4GqL1h9ylE5LIWRk,12
65
- fmtr_tools-1.1.1.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- cache-hfh = fmtr.tools.console_script_tools:cache_hfh
3
- remote-debug-test = fmtr.tools.console_script_tools:remote_debug_test
@@ -1,2 +0,0 @@
1
- docker
2
- fmtr