fmtr.tools 1.3.35__py3-none-any.whl → 1.3.37__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 CHANGED
@@ -168,6 +168,11 @@ try:
168
168
  except ImportError as exception:
169
169
  http = Client = MissingExtraMockModule('http', exception)
170
170
 
171
+ try:
172
+ from fmtr.tools import webhook_tools as webhook
173
+ except ImportError as exception:
174
+ webhook = MissingExtraMockModule('webhook', exception)
175
+
171
176
 
172
177
  def get_version():
173
178
  """
fmtr/tools/constants.py CHANGED
@@ -53,3 +53,4 @@ class Constants:
53
53
  INFRA = 'infra'
54
54
 
55
55
  PROMPT_NONE_SPECIFIED = '[None Specified]'
56
+ WEBHOOK_URL_NOTIFY_KEY = 'WEBHOOK_URL_NOTIFY'
@@ -28,7 +28,7 @@ def get_dict() -> Dict[str, str]:
28
28
  Return environment variables as a standard dictionary.
29
29
 
30
30
  """
31
- environment_dict = dict(os.environ)
31
+ environment_dict = dict(sorted(dict(os.environ).items()))
32
32
  return environment_dict
33
33
 
34
34
 
fmtr/tools/version CHANGED
@@ -1 +1 @@
1
- 1.3.35
1
+ 1.3.37
@@ -0,0 +1,17 @@
1
+ from fmtr.tools import environment_tools, Constants
2
+ from fmtr.tools.http_tools import client
3
+
4
+
5
+ def notify(title, body, url=None):
6
+ """
7
+
8
+ Send simple debug notification
9
+
10
+ """
11
+ url = url or environment_tools.get(Constants.WEBHOOK_URL_NOTIFY_KEY)
12
+ client.post(url, json=dict(title=title, body=body))
13
+
14
+
15
+ if __name__ == '__main__':
16
+ notify('Title', 'Body')
17
+ notify
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.3.35
3
+ Version: 1.3.37
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
@@ -125,62 +125,70 @@ Requires-Dist: logfire; extra == "http"
125
125
  Requires-Dist: logfire[httpx]; extra == "http"
126
126
  Provides-Extra: setup
127
127
  Requires-Dist: setuptools; extra == "setup"
128
+ Provides-Extra: webhook
129
+ Requires-Dist: httpx; extra == "webhook"
130
+ Requires-Dist: httpx_retries; extra == "webhook"
131
+ Requires-Dist: logfire; extra == "webhook"
132
+ Requires-Dist: logfire[httpx]; extra == "webhook"
133
+ Provides-Extra: browsers
134
+ Requires-Dist: playwright; extra == "browsers"
128
135
  Provides-Extra: all
129
- Requires-Dist: regex; extra == "all"
130
- Requires-Dist: distributed; extra == "all"
131
- Requires-Dist: fastapi; extra == "all"
132
- Requires-Dist: appdirs; extra == "all"
133
- Requires-Dist: setuptools; extra == "all"
134
- Requires-Dist: dnspython[doh]; extra == "all"
135
- Requires-Dist: dask[bag]; extra == "all"
136
- Requires-Dist: json_repair; extra == "all"
137
- Requires-Dist: google-auth; extra == "all"
138
- Requires-Dist: google-auth-httplib2; extra == "all"
139
- Requires-Dist: sre_yield; extra == "all"
140
- Requires-Dist: semver; extra == "all"
141
- Requires-Dist: tinynetrc; extra == "all"
142
- Requires-Dist: logfire[fastapi]; extra == "all"
143
- Requires-Dist: pyyaml; extra == "all"
144
- Requires-Dist: Unidecode; extra == "all"
145
- Requires-Dist: contexttimer; extra == "all"
146
- Requires-Dist: bokeh; extra == "all"
147
- Requires-Dist: faker; extra == "all"
148
136
  Requires-Dist: ollama; extra == "all"
149
- Requires-Dist: cachetools; extra == "all"
150
- Requires-Dist: filetype; extra == "all"
151
- Requires-Dist: huggingface_hub; extra == "all"
137
+ Requires-Dist: appdirs; extra == "all"
138
+ Requires-Dist: flet-video; extra == "all"
152
139
  Requires-Dist: logfire[httpx]; extra == "all"
153
- Requires-Dist: deepmerge; extra == "all"
154
- Requires-Dist: openai; extra == "all"
140
+ Requires-Dist: openpyxl; extra == "all"
141
+ Requires-Dist: bokeh; extra == "all"
142
+ Requires-Dist: flet-webview; extra == "all"
143
+ Requires-Dist: tinynetrc; extra == "all"
144
+ Requires-Dist: diskcache; extra == "all"
155
145
  Requires-Dist: docker; extra == "all"
156
146
  Requires-Dist: pymupdf; extra == "all"
157
- Requires-Dist: pytest-cov; extra == "all"
158
- Requires-Dist: sentence_transformers; extra == "all"
159
- Requires-Dist: google-auth-oauthlib; extra == "all"
160
- Requires-Dist: peft; extra == "all"
161
- Requires-Dist: pymupdf4llm; extra == "all"
162
- Requires-Dist: diskcache; extra == "all"
163
- Requires-Dist: logfire; extra == "all"
147
+ Requires-Dist: httpx_retries; extra == "all"
148
+ Requires-Dist: Unidecode; extra == "all"
149
+ Requires-Dist: fastapi; extra == "all"
150
+ Requires-Dist: semver; extra == "all"
151
+ Requires-Dist: pandas; extra == "all"
152
+ Requires-Dist: distributed; extra == "all"
164
153
  Requires-Dist: uvicorn[standard]; extra == "all"
165
- Requires-Dist: openpyxl; extra == "all"
166
- Requires-Dist: flet-video; extra == "all"
167
- Requires-Dist: flet-webview; extra == "all"
168
- Requires-Dist: google-api-python-client; extra == "all"
169
- Requires-Dist: pydantic; extra == "all"
154
+ Requires-Dist: openai; extra == "all"
155
+ Requires-Dist: contexttimer; extra == "all"
156
+ Requires-Dist: logfire; extra == "all"
157
+ Requires-Dist: pydantic-settings; extra == "all"
158
+ Requires-Dist: torchvision; extra == "all"
170
159
  Requires-Dist: torchaudio; extra == "all"
160
+ Requires-Dist: json_repair; extra == "all"
161
+ Requires-Dist: pymupdf4llm; extra == "all"
171
162
  Requires-Dist: httpx; extra == "all"
172
163
  Requires-Dist: tokenizers; extra == "all"
173
- Requires-Dist: tabulate; extra == "all"
164
+ Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
165
+ Requires-Dist: logfire[fastapi]; extra == "all"
166
+ Requires-Dist: google-auth-oauthlib; extra == "all"
167
+ Requires-Dist: pytest-cov; extra == "all"
168
+ Requires-Dist: faker; extra == "all"
169
+ Requires-Dist: google-auth; extra == "all"
170
+ Requires-Dist: google-api-python-client; extra == "all"
171
+ Requires-Dist: sre_yield; extra == "all"
174
172
  Requires-Dist: flet[all]; extra == "all"
175
173
  Requires-Dist: yamlscript; extra == "all"
176
- Requires-Dist: torchvision; extra == "all"
177
- Requires-Dist: pydantic-settings; extra == "all"
178
- Requires-Dist: httpx_retries; extra == "all"
179
- Requires-Dist: pandas; extra == "all"
180
- Requires-Dist: html2text; extra == "all"
181
- Requires-Dist: pydevd-pycharm~=251.25410.159; extra == "all"
182
- Requires-Dist: transformers[sentencepiece]; extra == "all"
174
+ Requires-Dist: huggingface_hub; extra == "all"
175
+ Requires-Dist: pydantic; extra == "all"
183
176
  Requires-Dist: pydantic-ai[logfire,openai]; extra == "all"
177
+ Requires-Dist: tabulate; extra == "all"
178
+ Requires-Dist: deepmerge; extra == "all"
179
+ Requires-Dist: transformers[sentencepiece]; extra == "all"
180
+ Requires-Dist: regex; extra == "all"
181
+ Requires-Dist: playwright; extra == "all"
182
+ Requires-Dist: filetype; extra == "all"
183
+ Requires-Dist: cachetools; extra == "all"
184
+ Requires-Dist: dnspython[doh]; extra == "all"
185
+ Requires-Dist: html2text; extra == "all"
186
+ Requires-Dist: dask[bag]; extra == "all"
187
+ Requires-Dist: pyyaml; extra == "all"
188
+ Requires-Dist: sentence_transformers; extra == "all"
189
+ Requires-Dist: peft; extra == "all"
190
+ Requires-Dist: google-auth-httplib2; extra == "all"
191
+ Requires-Dist: setuptools; extra == "all"
184
192
  Dynamic: author
185
193
  Dynamic: author-email
186
194
  Dynamic: description
@@ -1,16 +1,16 @@
1
- fmtr/tools/__init__.py,sha256=02EgGggVmiHs81W5gXGX49F53DZO956jGwrFUMHmUTo,5668
1
+ fmtr/tools/__init__.py,sha256=S09QiP8hSJcJKWWFxgrFOunToA4yKCnnq9SaNGtfWYs,5818
2
2
  fmtr/tools/api_tools.py,sha256=RyZUlTefSQozfl-8feZGauyUkwcFd-jU0KtKHFxHea4,2272
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=74p7m2GLFfeP41LX69wxgfkilxEAoWkMIfFMjKsYpyg,4976
6
- fmtr/tools/constants.py,sha256=iyn8cKNJ4tnX4BKpR0tWjD_U3RUa2THzU4jDhoWn17A,1648
6
+ fmtr/tools/constants.py,sha256=idsZZ_IBkWFZusrv0_0YM0_yHM92_jqiFhfTz-GYkBg,1698
7
7
  fmtr/tools/context_tools.py,sha256=4UvIHYgLqAh7dXMX9EBrLEpYp81qfzhSVrkffOSAoGA,350
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
11
  fmtr/tools/debugging_tools.py,sha256=_xzqS0V5BpL8d06j-jVQjGgI7T020QsqVXKAKMz7Du8,2082
12
12
  fmtr/tools/docker_tools.py,sha256=rdaZje2xhlmnfQqZnR7IHgRdWncTLjrJcViUTt5oEwk,617
13
- fmtr/tools/environment_tools.py,sha256=jlx6LYFVv9tyNBT_pVD-tDhyR3ccNC7w6ENVlnoxCLM,1823
13
+ fmtr/tools/environment_tools.py,sha256=43uqfj1G1bNX0IwKz-NKbu3AbFYSdbBuGN9rlThe030,1845
14
14
  fmtr/tools/function_tools.py,sha256=O1K8HwftXfzrBblNZrj-BhWNbr4poJghrXNr2mFcylI,2831
15
15
  fmtr/tools/google_api_tools.py,sha256=owWE0GlnJjmVbXus8ENxT2PH7Fnd3m_r-14xyR7lAnA,1107
16
16
  fmtr/tools/hash_tools.py,sha256=tr4HXpeT6rRrDk6TvMlRPUSrLRRaov96y128OI2tzsc,729
@@ -45,7 +45,8 @@ fmtr/tools/tabular_tools.py,sha256=tpIpZzYku1HcJrHZJL6BC39LmN3WUWVhFbK2N7nDVmE,1
45
45
  fmtr/tools/tokenization_tools.py,sha256=me-IBzSLyNYejLybwjO9CNB6Mj2NYfKPaOVThXyaGNg,4268
46
46
  fmtr/tools/tools.py,sha256=CAsApa1YwVdNE6H66Vjivs_mXYvOas3rh7fPELAnTpk,795
47
47
  fmtr/tools/unicode_tools.py,sha256=yS_9wpu8ogNoiIL7s1G_8bETFFO_YQlo4LNPv1NLDeY,52
48
- fmtr/tools/version,sha256=zQ9tfgNLSm8eypgWubvyEsSaGYhR9voA6WlTkZPeMVM,6
48
+ fmtr/tools/version,sha256=xEb7rMAeLm9uuQhatt0xeEAwgvUjA0oSJCj3kyDaJq8,6
49
+ fmtr/tools/webhook_tools.py,sha256=q3pVJ1NCem2SrMuFcLxiWd7DibFs7Q-uGtojfXd3Qcg,380
49
50
  fmtr/tools/yaml_tools.py,sha256=Bhhyd6GQVKO72Lp8ky7bAUjIB_65Hdh0Q45SKIEe6S8,1901
50
51
  fmtr/tools/ai_tools/__init__.py,sha256=JZrLuOFNV1A3wvJgonxOgz_4WS-7MfCuowGWA5uYCjs,372
51
52
  fmtr/tools/ai_tools/agentic_tools.py,sha256=8su8wmSEoQaDoDnmcKy_DvtWzssBEpNJtH4PzNAKZUE,4782
@@ -80,9 +81,9 @@ fmtr/tools/tests/test_path.py,sha256=AkZQa6_8BQ-VaCyL_J-iKmdf2ZaM-xFYR37Kun3k4_g
80
81
  fmtr/tools/tests/test_yaml.py,sha256=jc0TwwKu9eC0LvFGNMERdgBue591xwLxYXFbtsRwXVM,287
81
82
  fmtr/tools/version_tools/__init__.py,sha256=pg4iLtmIr5HtyEW_j0fMFoIdzqi_w9xH8-grQaXLB28,318
82
83
  fmtr/tools/version_tools/version_tools.py,sha256=Hcc6yferZS1hHbugRTdiHhSNmXEEG0hjCiTTXKna-YY,1127
83
- fmtr_tools-1.3.35.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
84
- fmtr_tools-1.3.35.dist-info/METADATA,sha256=pY-FlOv8SKARTP-sfVb4Grjd8K853QgmRaKyzImjbcM,15938
85
- fmtr_tools-1.3.35.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
86
- fmtr_tools-1.3.35.dist-info/entry_points.txt,sha256=h-r__Xh5njtFqreMLg6cGuTFS4Qh-QqJPU1HB-_BS-Q,357
87
- fmtr_tools-1.3.35.dist-info/top_level.txt,sha256=LXem9xCgNOD72tE2gRKESdiQTL902mfFkwWb6-dlwEE,5
88
- fmtr_tools-1.3.35.dist-info/RECORD,,
84
+ fmtr_tools-1.3.37.dist-info/licenses/LICENSE,sha256=FW9aa6vVN5IjRQWLT43hs4_koYSmpcbIovlKeAJ0_cI,10757
85
+ fmtr_tools-1.3.37.dist-info/METADATA,sha256=q7hKlM2vaxq51NAtlOCNKdplXcKuPd52gHjCedsH5uA,16259
86
+ fmtr_tools-1.3.37.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
87
+ fmtr_tools-1.3.37.dist-info/entry_points.txt,sha256=h-r__Xh5njtFqreMLg6cGuTFS4Qh-QqJPU1HB-_BS-Q,357
88
+ fmtr_tools-1.3.37.dist-info/top_level.txt,sha256=LXem9xCgNOD72tE2gRKESdiQTL902mfFkwWb6-dlwEE,5
89
+ fmtr_tools-1.3.37.dist-info/RECORD,,