python-corekit 0.4.1__py3-none-any.whl → 0.6.0__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 (41) hide show
  1. corekit/connections/sql/connection.py +6 -2
  2. corekit/docker/__init__.py +4 -2
  3. corekit/docker/client.py +48 -0
  4. corekit/docker/constants.py +19 -0
  5. corekit/docker/disk/__init__.py +8 -0
  6. corekit/docker/disk/constants.py +14 -0
  7. corekit/docker/disk/inspector.py +217 -0
  8. corekit/docker/disk/models.py +44 -0
  9. corekit/docker/watchdog.py +10 -8
  10. corekit/exceptions/__init__.py +2 -0
  11. corekit/exceptions/base.py +19 -0
  12. corekit/files/__init__.py +3 -0
  13. corekit/files/disk.py +123 -0
  14. corekit/html/__init__.py +22 -0
  15. corekit/html/client.py +22 -0
  16. corekit/html/models.py +20 -0
  17. corekit/html/parser.py +272 -0
  18. corekit/html/scraper.py +127 -0
  19. corekit/html/settings.py +197 -0
  20. corekit/html/state.py +56 -0
  21. corekit/http/__init__.py +2 -1
  22. corekit/http/api.py +71 -3
  23. corekit/http/client.py +24 -54
  24. corekit/http/response.py +38 -5
  25. corekit/llm/client.py +3 -2
  26. corekit/llm/tools/loop.py +5 -2
  27. corekit/llm/wire.py +11 -5
  28. corekit/process/__init__.py +7 -0
  29. corekit/process/runner.py +47 -0
  30. corekit/schemas/__init__.py +10 -1
  31. corekit/schemas/models/arbitrary.py +49 -5
  32. corekit/schemas/size.py +85 -0
  33. corekit/utils/__init__.py +62 -7
  34. corekit/utils/coercion.py +59 -73
  35. corekit/utils/collections.py +242 -4
  36. corekit/utils/parsers.py +205 -0
  37. {python_corekit-0.4.1.dist-info → python_corekit-0.6.0.dist-info}/METADATA +10 -8
  38. {python_corekit-0.4.1.dist-info → python_corekit-0.6.0.dist-info}/RECORD +41 -23
  39. {python_corekit-0.4.1.dist-info → python_corekit-0.6.0.dist-info}/WHEEL +1 -1
  40. {python_corekit-0.4.1.dist-info → python_corekit-0.6.0.dist-info}/licenses/LICENSE +0 -0
  41. {python_corekit-0.4.1.dist-info → python_corekit-0.6.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,205 @@
1
+ """
2
+ Flexible parsers with caller-controlled fallbacks.
3
+
4
+ Each helper attempts to extract the target type and returns a ``ParsedValue``
5
+ carrying both the result and a ``success`` flag. On failure the ``value`` is
6
+ whatever ``default`` the caller supplied (``None`` unless overridden).
7
+
8
+ These are the extraction layer. For a guaranteed target type with that type's
9
+ empty value as the fallback, use the ``safe_*`` wrappers in
10
+ ``corekit.utils.coercion``.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import json
16
+ from datetime import date, datetime
17
+ from typing import Any, NamedTuple
18
+
19
+ from corekit.utils.text import list_to_english
20
+
21
+ __all__ = [
22
+ "ParsedValue",
23
+ "parse_dict",
24
+ "parse_float",
25
+ "parse_int",
26
+ "parse_list",
27
+ "parse_set",
28
+ "parse_string",
29
+ "parse_tuple",
30
+ ]
31
+
32
+
33
+ class ParsedValue(NamedTuple):
34
+ """Outcome of a parse attempt."""
35
+
36
+ value: Any
37
+ success: bool
38
+
39
+ @classmethod
40
+ def ok(cls, value: Any) -> ParsedValue:
41
+ return cls(value=value, success=True)
42
+
43
+ @classmethod
44
+ def error(cls, value: Any) -> ParsedValue:
45
+ return cls(value=value, success=False)
46
+
47
+
48
+ def parse_string(
49
+ item: Any,
50
+ *,
51
+ pretty: bool = False,
52
+ strip: bool = True,
53
+ default: Any = None,
54
+ ) -> ParsedValue:
55
+ """
56
+ Extract a string rendering of ``item``, or ``default`` if there is none.
57
+
58
+ Collections become JSON by default. With ``pretty`` they become an English
59
+ list instead -- ``"a, b, c"``, or ``"key: value, ..."`` for a mapping --
60
+ which reads better in a notification than raw JSON.
61
+ """
62
+
63
+ def _clean(text: str) -> str:
64
+ return text.strip() if strip else text
65
+
66
+ def _parse_collection(collection: Any) -> str:
67
+ if pretty:
68
+ if isinstance(collection, dict):
69
+ return list_to_english([f"{key}: {value}" for key, value in collection.items()])
70
+ return list_to_english(
71
+ [parse_string(element, pretty=pretty, strip=strip, default="").value for element in collection]
72
+ )
73
+ return json.dumps(collection)
74
+
75
+ if isinstance(item, bytes):
76
+ item = item.decode("utf-8", errors="ignore")
77
+ if isinstance(item, str):
78
+ return ParsedValue.ok(_clean(item))
79
+ # bool is a subclass of int, so both land here and render as "True"/"1".
80
+ if isinstance(item, (int, float)):
81
+ return ParsedValue.ok(str(item))
82
+ if isinstance(item, (list, tuple, set, dict)):
83
+ return ParsedValue.ok(_parse_collection(item))
84
+ if isinstance(item, (date, datetime)):
85
+ return ParsedValue.ok(item.isoformat())
86
+ return ParsedValue.error(default)
87
+
88
+
89
+ def parse_int(item: Any, *, default: Any = None) -> ParsedValue:
90
+ """
91
+ Extract an int from ``item``, or ``default`` if it will not convert.
92
+ """
93
+ if isinstance(item, bool):
94
+ return ParsedValue.ok(int(item))
95
+ if isinstance(item, int):
96
+ return ParsedValue.ok(item)
97
+ if isinstance(item, bytes):
98
+ item = item.decode("utf-8", errors="ignore")
99
+ if isinstance(item, (float, str)):
100
+ try:
101
+ return ParsedValue.ok(int(item))
102
+ except (TypeError, ValueError):
103
+ return ParsedValue.error(default)
104
+ return ParsedValue.error(default)
105
+
106
+
107
+ def parse_float(item: Any, *, default: Any = None) -> ParsedValue:
108
+ """
109
+ Extract a float from ``item``, or ``default`` if it will not convert.
110
+ """
111
+ if isinstance(item, bool):
112
+ return ParsedValue.ok(float(item))
113
+ if isinstance(item, float):
114
+ return ParsedValue.ok(item)
115
+ if isinstance(item, bytes):
116
+ item = item.decode("utf-8", errors="ignore")
117
+ if isinstance(item, (int, str)):
118
+ try:
119
+ return ParsedValue.ok(float(item))
120
+ except (TypeError, ValueError):
121
+ return ParsedValue.error(default)
122
+ return ParsedValue.error(default)
123
+
124
+
125
+ def parse_list(item: Any, *, default: Any = None) -> ParsedValue:
126
+ """
127
+ Extract a list from a collection, or ``default`` for anything else.
128
+
129
+ A mapping yields its values. A string is *not* treated as a collection --
130
+ exploding it into characters is almost never what the caller meant.
131
+ """
132
+ if isinstance(item, list):
133
+ return ParsedValue.ok(item)
134
+ if isinstance(item, (tuple, set)):
135
+ return ParsedValue.ok(list(item))
136
+ if isinstance(item, dict):
137
+ return ParsedValue.ok(list(item.values()))
138
+ return ParsedValue.error(default)
139
+
140
+
141
+ def parse_tuple(item: Any, *, default: Any = None) -> ParsedValue:
142
+ """
143
+ Extract a tuple from a collection, or ``default`` for anything else.
144
+
145
+ A mapping yields its values. A string is *not* treated as a collection --
146
+ exploding it into characters is almost never what the caller meant.
147
+ """
148
+ if isinstance(item, tuple):
149
+ return ParsedValue.ok(item)
150
+ if isinstance(item, (list, set)):
151
+ return ParsedValue.ok(tuple(item))
152
+ if isinstance(item, dict):
153
+ return ParsedValue.ok(tuple(item.values()))
154
+ return ParsedValue.error(default)
155
+
156
+
157
+ def parse_set(item: Any, *, default: Any = None) -> ParsedValue:
158
+ """
159
+ Extract a set from a collection, or ``default`` for anything else.
160
+
161
+ A mapping yields its values. A string is *not* treated as a collection --
162
+ exploding it into characters is almost never what the caller meant.
163
+ Unhashable elements fail the conversion and yield ``default``.
164
+ """
165
+ if isinstance(item, set):
166
+ return ParsedValue.ok(item)
167
+ if isinstance(item, (list, tuple)):
168
+ try:
169
+ return ParsedValue.ok(set(item))
170
+ except TypeError:
171
+ return ParsedValue.error(default)
172
+ if isinstance(item, dict):
173
+ try:
174
+ return ParsedValue.ok(set(item.values()))
175
+ except TypeError:
176
+ return ParsedValue.error(default)
177
+ return ParsedValue.error(default)
178
+
179
+
180
+ def parse_dict(item: Any, *, default: Any = None) -> ParsedValue:
181
+ """
182
+ Extract a mapping from ``item``, or ``default`` if none is available.
183
+
184
+ Accepts a ``dict`` directly, then common dump protocols (``to_dict``,
185
+ ``model_dump``, ``dict``), then a plain ``__dict__``.
186
+ """
187
+ if isinstance(item, dict):
188
+ return ParsedValue.ok(item)
189
+
190
+ for method_name in ("to_dict", "model_dump", "dict"):
191
+ method = getattr(item, method_name, None)
192
+ if not callable(method):
193
+ continue
194
+ try:
195
+ result = method()
196
+ except Exception:
197
+ continue
198
+ if isinstance(result, dict):
199
+ return ParsedValue.ok(result)
200
+
201
+ namespace = getattr(item, "__dict__", None)
202
+ if isinstance(namespace, dict):
203
+ return ParsedValue.ok(namespace)
204
+
205
+ return ParsedValue.error(default)
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-corekit
3
- Version: 0.4.1
4
- Summary: Shared foundations for Python projects: logging, benchmarking, registries, FastAPI application and routers, SQL statements and migrations, background tasks, ETL, and LLM chat/tool primitives
3
+ Version: 0.6.0
4
+ Summary: Shared foundations for Python projects: logging, benchmarking, registries, FastAPI application and routers, SQL statements and migrations, background tasks, ETL, LLM chat/tool primitives, and HTML scraping
5
5
  Author: Steven Jacobsen
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/stevejaker/corekit
@@ -23,6 +23,7 @@ Requires-Dist: sqlmodel<0.1,>=0.0.16
23
23
  Requires-Dist: SQLAlchemy<3,>=2.0
24
24
  Requires-Dist: redis<7,>=5.0
25
25
  Requires-Dist: httpx<1,>=0.27
26
+ Requires-Dist: selectolax<1,>=0.3
26
27
  Requires-Dist: docker<8,>=7.0
27
28
  Requires-Dist: PyYAML<7,>=6.0
28
29
  Requires-Dist: dill<0.5,>=0.3.8
@@ -347,13 +348,13 @@ class GithubClient(BaseApiClient):
347
348
  return "https://api.github.com"
348
349
 
349
350
  response = GithubClient().get("/users/octocat")
350
- response.data["login"]
351
+ response.data.login
351
352
  ```
352
353
 
353
- Retries 429 and 5xx with exponential backoff. Every response is a
354
- `BaseApiResponse`, so a non-JSON error page leaves `data` empty rather than
355
- raising. The same methods are awaitable inside a running event loop:
356
- `await client.get(...)`.
354
+ Retries 429 and 5xx with exponential backoff. ``BaseHttpClient`` returns a
355
+ ``BaseHttpResponse`` (text + metadata); ``BaseApiClient`` adds structured
356
+ ``data`` from JSON (``None`` when the body is not JSON). The same methods are
357
+ awaitable inside a running event loop: `await client.get(...)`.
357
358
 
358
359
  ## Serialization
359
360
 
@@ -432,6 +433,7 @@ corekit/
432
433
 
433
434
  observability/ Loggable, Benchmarkable, Timer
434
435
  registry/ schemas/ utils/ registries, enums and fields, helpers
436
+ process/ CommandRunner (external commands)
435
437
  data/ Dataset and its filter expressions
436
438
  jobs/ queue-independent background tasks
437
439
  crypto/ files/ serialization/
@@ -444,7 +446,7 @@ corekit/
444
446
  http/ BaseHttpClient, BaseApiClient, retries, responses
445
447
 
446
448
  api/ Application, lifespan, middleware, routers
447
- docker/ notifications/ etl/
449
+ docker/ notifications/ etl/ Watchdog, DockerDiskInspector, client provider
448
450
  llm/ messages, tools, agentic loop (no GenerationClient)
449
451
 
450
452
  events/ log_monitor/ built on the capabilities above
@@ -22,7 +22,7 @@ corekit/connections/registry.py,sha256=BR04dGthcGCtON2MxNsl-TlhRgbRlvGj0RLymDFBk
22
22
  corekit/connections/redis/__init__.py,sha256=BsWLZNqpKAqIoreHGLEtftnMqVw-ESK8jbexDAughag,174
23
23
  corekit/connections/redis/connection.py,sha256=H6r5WsDfXFgIQlp6vq3rKjp-oBFQoE5h_YaJXZEvHIs,9850
24
24
  corekit/connections/sql/__init__.py,sha256=WRBcQ9draDQSooYi4k4peWyuRTgSyEk_WwOYYOAN9K4,882
25
- corekit/connections/sql/connection.py,sha256=PvLhYXMmq6JneshWhoUb2WD2usGH7uOA9H_ZufybKgQ,12318
25
+ corekit/connections/sql/connection.py,sha256=1ieLXssO2lyFZD9Uf_5wyM5TJmdEqYl8RzR2fMTJTlg,12410
26
26
  corekit/connections/sql/query.py,sha256=8s5atIssmN2l9FCL2IHnIQqwxOk0fA_mPNh36koLhoE,233
27
27
  corekit/connections/sql/table.py,sha256=C7_QCRPd7C1JeH7aIByUBVWsx5qiEOFavWOo6c72djM,3125
28
28
  corekit/connections/sql/fields/__init__.py,sha256=2I-TCsvi321yQhesKNZgY1T77FtATZ6o7pw0MNHtbAo,184
@@ -51,8 +51,14 @@ corekit/data/expressions/target.py,sha256=QSl7sH1qFVUc-mL7gsasTsCahWKhHqdo0bMHt-
51
51
  corekit/decorators/__init__.py,sha256=YrBcc_4wkSs7nEb3OjC7C7a8fNEvBk3RzOpD8QccHKM,83
52
52
  corekit/decorators/exception_handling.py,sha256=p86gfvdmsmC7_va042NSoGkWrJrbLLuw0ncE131wLWU,2326
53
53
  corekit/decorators/warnings.py,sha256=RS7AS6OS05VxiWaMjkj6kYky9FbpT4Z-Cb7TQoPOObk,1109
54
- corekit/docker/__init__.py,sha256=LtrmEvqorme1-YwL0jGNFLEASdgn69s0eYuh490anmg,104
55
- corekit/docker/watchdog.py,sha256=kAOF9x-h_oQmyKrkcc4eQ1_HIofRDyYyrfeAULyyBtQ,8855
54
+ corekit/docker/__init__.py,sha256=UnJd13PrmnYIprkDrX34nMhCRXyWPv74X4loobMFq6w,358
55
+ corekit/docker/client.py,sha256=3FO_MNLbMGAfErBv78rmx6052vr5SSaEBlOoRJPVhJQ,1519
56
+ corekit/docker/constants.py,sha256=tIMfN5ii3ht5tiWXowW8UmjQWcr9Rmn681Llysh9qIM,523
57
+ corekit/docker/watchdog.py,sha256=L-yZWlbteShSdMKPDT-7JVzqfQU8MT1XDEFVWF11aY8,9268
58
+ corekit/docker/disk/__init__.py,sha256=ZTr77TJuUdVvv6wbWXvYW0I5oVz45EwzbGjbjrUy1vk,295
59
+ corekit/docker/disk/constants.py,sha256=4fMEAdWwHbiBbe7aj3vV4molxRGZ3eLl1tyIPQ47D1o,465
60
+ corekit/docker/disk/inspector.py,sha256=YBRCX6upUclOPyu2PT2VkfyXKUPXJUv6Wwd_XYvA7lU,8156
61
+ corekit/docker/disk/models.py,sha256=9z8dTUyTEp8NfMmzBul2yp8sLAcEjoMytz_gCj7veKY,733
56
62
  corekit/etl/__init__.py,sha256=KFuGv6xstJbEJHHYo_X5akEq_b7muDyKXCGdFeZ3_0M,1369
57
63
  corekit/etl/connection.py,sha256=_gWqR36x5f7qb5IYJjrc_7d_6oU2CXm1QeSNCCh0coo,1270
58
64
  corekit/etl/orchestrator.py,sha256=GkecTu8gKt17ePDM9PJBUuZTPYoPMdK1yYzBHjMdw3A,7959
@@ -83,23 +89,31 @@ corekit/exceptionator/fingerprint.py,sha256=Fjf02FFOq3pm4o88F0I7QDy7Nq9EwgA01jjp
83
89
  corekit/exceptionator/guard.py,sha256=SU95rYpadfqgAUogmXSQyHvHCP7xATADlQyOTwLO_Qk,1180
84
90
  corekit/exceptionator/jobs.py,sha256=ufQZNc5bbEsl3IYyCuTtaShXh0-lSbCReTouZHqpv9k,1340
85
91
  corekit/exceptionator/models.py,sha256=CQxKKzBBerkEqdUnuPVyXflzx2r9cjFzUpG8K8VizhE,2437
86
- corekit/exceptions/__init__.py,sha256=8q9EX-0bzOiJI1FOzCbViQFwx53Ugs8NH482Cvpci6k,995
87
- corekit/exceptions/base.py,sha256=k0AfTfPrLWR6x-l2qvvjqD_sup0fiWhqu1OoNaNM-Lk,5596
92
+ corekit/exceptions/__init__.py,sha256=_csPo9yMZrRTlz2CQfM2bePtDNGPeAksWkKy8EanhLQ,1045
93
+ corekit/exceptions/base.py,sha256=aq_5QSePwI1xowIUv7Tndjlv0r8YI9wT2xJL45fQa-A,6206
88
94
  corekit/exceptions/enum.py,sha256=D-YL-cZXs-F2jS1GgRBhPWmuqBfX33B1QP61vAXdAes,324
89
95
  corekit/exceptions/types.py,sha256=rxhQ8sghV2TCHh_vB7tX6Yb6Vkyv1PF_0PLtalyFVxY,665
90
96
  corekit/exceptions/custom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
97
  corekit/exceptions/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- corekit/files/__init__.py,sha256=IllQEAWtcT72vVUdRaMwfF5VlhzMJ16VIKDhqvWG9Cw,612
98
+ corekit/files/__init__.py,sha256=SnN2PGTQ5D4nkBTb3pnXr5dPzOhpxa9ulYTDJyWLyM0,700
93
99
  corekit/files/base.py,sha256=Ca2bhdlwntHh425PedaUG-UW2fEFZsPCss_3f7REsAE,4022
100
+ corekit/files/disk.py,sha256=Jcsdvy8o_UFaYFkC7uSI0vKO7MK_4fsC8I6DZNeBSKE,4176
94
101
  corekit/files/enum.py,sha256=mcrQXcp-AizTAp4VoaVMLj9zu5D81XXMsnZwZqe6fz0,597
95
102
  corekit/files/json.py,sha256=pRYLKNjeVmkDQsgtjBboFFY5Ljx1Pwa3MFEeQBc4o-g,909
96
103
  corekit/files/toml.py,sha256=YFRwghMapbCRSl7srqcI7IhqaTQDyO56XRasGMu_Aug,1273
97
- corekit/http/__init__.py,sha256=pDSzU3w8ZHMdcnZ1XCR_KWEGRSlIhy-K_jT5qH_T2Y4,1681
98
- corekit/http/api.py,sha256=L4iZ9TdCQH3klKWxIxFE3bEQzqMTDOwy-HKrvHXwsbI,784
99
- corekit/http/client.py,sha256=IEXZGd-4-zaQmkKXOIlTyLrFKWaJd6uDxu14o5-u9z4,7997
104
+ corekit/html/__init__.py,sha256=25xsrlhaWREDuGpWc6xnN-Mbir7AsCnzjjQODJ58XVo,535
105
+ corekit/html/client.py,sha256=59eTlvJh9QFiPQ7HFHEhju9UkoEpS5YafinxFI5w7Q0,664
106
+ corekit/html/models.py,sha256=zxN3mSAuTQ0GE27Gxa3ptcp_EAmm5tlBUzwMovDevLU,357
107
+ corekit/html/parser.py,sha256=blSEBl5clbx_dOBPKu0S45_MiRjLSa7LeGpGc8opdWA,10300
108
+ corekit/html/scraper.py,sha256=af3UHf8LZuE4tEYr_MHo-h9FF6b8PQUtoTmlzSFR3FE,4366
109
+ corekit/html/settings.py,sha256=Xalz1Zg9wHyPhlzfIwsFE23aOE6woShHJLNEHg4mCWE,6951
110
+ corekit/html/state.py,sha256=McWmvu7y4qR0M2mSnjPAFtnAow9sv-nWHzolJQlvbyk,1534
111
+ corekit/http/__init__.py,sha256=S3FlvpBjYoLrFaMY7OTQLMM6d7etaDRJP53_4aPuKZk,1723
112
+ corekit/http/api.py,sha256=WiBfv3tTifxUuvoj3rGqZxCPm2L8z3N_F7hvmLuzprM,3027
113
+ corekit/http/client.py,sha256=CONO9z5CGVh5H99yCYnNjPMUYe8G8FFzbeBhusLbBSw,7217
100
114
  corekit/http/exceptions.py,sha256=etkKN6rgnhENctO7YNvaRAKsctK0PXKCxAe15l6mNwY,4252
101
115
  corekit/http/exponential_backoff.py,sha256=5jjGTspX_BC9aBKPr5Y5dNhJqXesmljsjJoQ6i2d4_I,3180
102
- corekit/http/response.py,sha256=rOcUEgPYxfmKXfGO5fQsMA8q4YJof8dNNGBf-nb7l8k,2375
116
+ corekit/http/response.py,sha256=t_nGIwA-uyuQlJBGMgxbodCNjRnqc1xUcxMsbEXeMBM,3415
103
117
  corekit/http/status.py,sha256=rZ-cdliG9EAvWMTzvxjqjipRkZRc6RgSzcBY4Kewdg0,2377
104
118
  corekit/http/stream.py,sha256=lkERyCXz5amOWzoE-b12iftf3l_G-ghwSvN1lL5lUio,3257
105
119
  corekit/jobs/__init__.py,sha256=vsv8o23ApT6MlOwOq-AFYeQW2NT1kjyvu89A5CL2PsY,880
@@ -107,13 +121,13 @@ corekit/jobs/registry.py,sha256=cco6884eVuIYHEtSv6P62MICFjX-QhuSZIFkEJcQi_M,2557
107
121
  corekit/jobs/runner.py,sha256=VyiTrQJT-E8-XuNBh8s1QgLJkKhkpBq_398Fs_03Kow,3321
108
122
  corekit/jobs/task.py,sha256=tqr-QaQSHyfPjbyZscM5i-YgT-fl58cpd2FVxevtG_E,6112
109
123
  corekit/llm/__init__.py,sha256=Qa-5V2cG4aH98b0nLY2tMx0G7uhoWhcaaZ7JY1dJjcA,3217
110
- corekit/llm/client.py,sha256=bO2o21ntKdGNjcWOoEv4ew2QQD7-HQ6Hsn01Zf_5a1I,6441
124
+ corekit/llm/client.py,sha256=X-dkizlps-ndhDzcImBfLDDWaoPdwMin7bf58QU2fdQ,6519
111
125
  corekit/llm/enum.py,sha256=WyikZcEt17Rnj5jFS6o2ENXIdBBFB-NFjdCKDVtIToc,2582
112
126
  corekit/llm/events.py,sha256=gEj3HpXLndCoPLF3C5jn-Gv5N1K6EPosR7bc5DaHwz4,2202
113
127
  corekit/llm/messages.py,sha256=KomU69Kjfgif0fMXrbEr9VsQ_RpcFjgsE2S0ThC2SIA,5070
114
128
  corekit/llm/protocols.py,sha256=ahCZwR3vQiB6LqaarTBGc5VSbe5mtb9vDLoLcOTmL_k,1770
115
129
  corekit/llm/streaming.py,sha256=fiQdJMHDrMBSF5hDMCqcQ3WulrOyoQ67N-c3Chb00Sg,4319
116
- corekit/llm/wire.py,sha256=3OTD0Cj3ewbBqCqdrqAs06gXQrxmNPI7LYsvBnO9zws,6024
130
+ corekit/llm/wire.py,sha256=GbK7nF27YryNIDe1uOG_3RR-er3BFvULhVy73DiGgE0,6308
117
131
  corekit/llm/prompts/__init__.py,sha256=9z8UwMqkh11MNcrom8hNZjugXq1MVF_EpPkRfF72zNA,544
118
132
  corekit/llm/prompts/enum.py,sha256=OYTd-riG70HiGoBVxJpA1_FttyGR-ITsEojHfHjDKdk,1219
119
133
  corekit/llm/prompts/exceptions.py,sha256=BX7VvngByXfSf3UGKAnFAPOytJrYukdEN_gVKYIfypc,546
@@ -122,7 +136,7 @@ corekit/llm/prompts/template.py,sha256=dgKje-v4R3JN3SPsDBjGm4zdohEsGRTgpbv1bvaOT
122
136
  corekit/llm/tools/__init__.py,sha256=3hoiam1oatawk9k8-pcY63JoywiOh3EoM7TvkW00nMY,527
123
137
  corekit/llm/tools/base.py,sha256=Mby2M3WA4nKgkmOpQwJWvKHGXlaZU62EGlHQUxsL_wk,3309
124
138
  corekit/llm/tools/detection.py,sha256=R3jMxJwOdMzyTo9DISi_yYx1zEHUJJ6AN61bHkvO3zM,3292
125
- corekit/llm/tools/loop.py,sha256=kpzNMmFEDV-QwY-ja6WHyGKfKyl9v4Ih7RovFoajofU,9200
139
+ corekit/llm/tools/loop.py,sha256=x7zlfYgeiXbtgna3IIczKkh5PK9fY2SfUpBOle21Dtw,9381
126
140
  corekit/llm/tools/registry.py,sha256=dkIucONGsmaw-cgTNIIV2WDVGAF45twOHrvTvavs4X4,3362
127
141
  corekit/log_monitor/__init__.py,sha256=uuXTQdI8EMeFbdt69G-2K8dKh5Nt-h9SzBEsOGcu0lo,371
128
142
  corekit/log_monitor/constants.py,sha256=8nzIzU3Qit9h7_stZLWW1Q_0DTnYglw_j5bQUsF586g,230
@@ -139,16 +153,19 @@ corekit/observability/timing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
139
153
  corekit/observability/timing/constants.py,sha256=Cv6h98NHzJiTJJufVQBVMBpdI0_fNMTnxAZF0j0vrsg,22
140
154
  corekit/observability/timing/split.py,sha256=EdzCKx4pwAkcMzG7kmicRKdoyhBTZ-JkftJpsQ73Vww,811
141
155
  corekit/observability/timing/timer.py,sha256=rBGYYnBq-1E85Om37dkbPM9wKsXsltyeWeAQHkKSaZQ,1657
156
+ corekit/process/__init__.py,sha256=KRtZx452ICjWpkNhpvcySYtaNGp0WXXGRsZCY_6Y1VM,115
157
+ corekit/process/runner.py,sha256=4ArfL-XxVFCHX_l-gM2oN0bY3h0It0s9yvWN2R5_aLM,1808
142
158
  corekit/registry/__init__.py,sha256=R67Jssr06Eyx2u5AbX1omm2LziWvwS_Sd7fExnNv9CM,681
143
159
  corekit/registry/ordered.py,sha256=_KS4mWzmLgFvODW2M0_ugxZIBW_dKhwwxrVrtNqLMfs,2506
144
160
  corekit/registry/registry.py,sha256=t1iwzxgvd-iyLIf_5wahg_P7eN9V1oumpupkAqi2GdQ,5601
145
- corekit/schemas/__init__.py,sha256=Qty0EM2XlbvUgnk-JU2IRaE6_Kclocw6QqKyaD-CbZg,369
161
+ corekit/schemas/__init__.py,sha256=qAVoXLfxh4fJmT3IhMI-fJGnQEV-MzmQ1pYHBTc08_s,528
146
162
  corekit/schemas/enum.py,sha256=gLc44kIXRfpDFkV51JoN4KT1CU92hnb529rd1b88fBM,2033
163
+ corekit/schemas/size.py,sha256=E_6kZ7yXqfxBqDdXnmiNfdzTyakv1YKtnPNigLiyEmk,2478
147
164
  corekit/schemas/types.py,sha256=AWIxZHXUiUjJRZjmOhAdCq3RIsRzL-Fy7RvYy4i5Ozo,1347
148
165
  corekit/schemas/version.py,sha256=InWtfKf0iyfu_eBLaFm_QNwkSjpgKc1jGJZeWYjQQUc,1753
149
166
  corekit/schemas/dataclasses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
167
  corekit/schemas/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
- corekit/schemas/models/arbitrary.py,sha256=L2Uqxo_twPAmzoly3Lyo5rzYhDzReSB_U-oAuRgWubg,396
168
+ corekit/schemas/models/arbitrary.py,sha256=ik8V9Pm2X3eKv1vUp3IF5v3c6gDqoyisSBnen63-Pcc,1681
152
169
  corekit/schemas/models/date_models.py,sha256=UOlSLVsWqgr_jnHfxVRgSl4nVVdfbe6zPBYveOgRcIg,399
153
170
  corekit/schemas/pydantic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
171
  corekit/schemas/pydantic/fields.py,sha256=ScP2ZQCR2qTWaqwjKl7lGvkTGSIeQBJ0yeNs79E47AA,1175
@@ -157,18 +174,19 @@ corekit/serialization/enum.py,sha256=pzHuAIXeonEF7-jyN1uYddJk-xvmQGuymDf1U6RWR5w
157
174
  corekit/serialization/pickle_file.py,sha256=dudKIxR8ueT3wx_IBxHJeoqnFeP1rT7dlTb_PXlSkd8,2251
158
175
  corekit/serialization/serializable.py,sha256=viF3ZCKRJ90hk6m4lbqIfo6ifsY2c4sXr4xZrn1Yz-Q,1999
159
176
  corekit/serialization/serializer.py,sha256=XlGE1Rq8M55Jl2a4F5MkvDcba2VI7lrh0v9kwL0DWG8,6617
160
- corekit/utils/__init__.py,sha256=xOHqpsAipQbkCLurKOYBSQ8RJyHULfoeEKPXqudNWH4,1827
161
- corekit/utils/coercion.py,sha256=Aq63jrxQYg1ooWUFXHff2uepB_LoHm1izao8_3xkzEU,3650
162
- corekit/utils/collections.py,sha256=cn7Bzh67utzBi7UO4FfjWrjDun05ye5_rTscwfWcmwo,4475
177
+ corekit/utils/__init__.py,sha256=wh-cMaWtzw1sEjQ9_O7tdQKMxqIPBNyfFcud0uOB-ZY,2633
178
+ corekit/utils/coercion.py,sha256=dnJ-lUW5_MOMrERhRxsL7LBwPAB-mh6Bua6eI-C-q1Q,3448
179
+ corekit/utils/collections.py,sha256=mj-YRUT0sgodqSvTNqJTpRs4lN1vMnJ_piOv9Vr9aRo,11609
163
180
  corekit/utils/ids.py,sha256=BVniaYqewM-EosDxcJAT_S_7T9C1c5X8nsaVGs5up34,1731
181
+ corekit/utils/parsers.py,sha256=b7bCaMd7_VKaFnin6vn3v1Eol_Z0vvr3vjDO4ro5ycI,6628
164
182
  corekit/utils/payload.py,sha256=T7EgdVU0S5h8MAzvQsmkfRPMatWqUbxjHL9hmZdM9ho,3882
165
183
  corekit/utils/raise_exc.py,sha256=cz7ljc6ZW90AGQussKuANN8PLsDLUhl-E8FZ0Ipsw-0,175
166
184
  corekit/utils/text.py,sha256=0322DdZGuDGEagTyejuda6QT1jbbxNIO6loC-_AGml0,2311
167
185
  corekit/utils/time.py,sha256=-iPaETXcgDu7J39Kwe938JyZKhPVjl6a572BBqsqcDQ,2215
168
186
  corekit/utils/validators.py,sha256=_HVKo3y264KGNaZ-1RyM1x46VPvu7XKcQkrHWDC9uxs,340
169
187
  corekit/utils/void.py,sha256=eXDb2QynuguiSgHGJLdgE08MuRnxBdYebRdMD7s1m9o,178
170
- python_corekit-0.4.1.dist-info/licenses/LICENSE,sha256=357LYxbxAQZ95q5cV-8JK6j-KNgiE6AteRodjEsm-kE,1072
171
- python_corekit-0.4.1.dist-info/METADATA,sha256=M24uRb1as-03LHKgbGhDIFJeQ30Z3mEO84EfCj_GNIE,15084
172
- python_corekit-0.4.1.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
173
- python_corekit-0.4.1.dist-info/top_level.txt,sha256=SDK4o8BoaI47E9tPbiNCbbWoc2y6N_wCjwnIEfr-GWI,8
174
- python_corekit-0.4.1.dist-info/RECORD,,
188
+ python_corekit-0.6.0.dist-info/licenses/LICENSE,sha256=357LYxbxAQZ95q5cV-8JK6j-KNgiE6AteRodjEsm-kE,1072
189
+ python_corekit-0.6.0.dist-info/METADATA,sha256=YrgBgcZgbYS5eB2yhz2B-9Jvx-K3AZ9VhGt4ihLuZCs,15304
190
+ python_corekit-0.6.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
191
+ python_corekit-0.6.0.dist-info/top_level.txt,sha256=SDK4o8BoaI47E9tPbiNCbbWoc2y6N_wCjwnIEfr-GWI,8
192
+ python_corekit-0.6.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (84.0.0)
2
+ Generator: setuptools (84.2.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5