krons 0.1.1__py3-none-any.whl → 0.2.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 (142) hide show
  1. krons/__init__.py +49 -0
  2. krons/agent/__init__.py +144 -0
  3. krons/agent/mcps/__init__.py +14 -0
  4. krons/agent/mcps/loader.py +287 -0
  5. krons/agent/mcps/wrapper.py +799 -0
  6. krons/agent/message/__init__.py +20 -0
  7. krons/agent/message/action.py +69 -0
  8. krons/agent/message/assistant.py +52 -0
  9. krons/agent/message/common.py +49 -0
  10. krons/agent/message/instruction.py +130 -0
  11. krons/agent/message/prepare_msg.py +187 -0
  12. krons/agent/message/role.py +53 -0
  13. krons/agent/message/system.py +53 -0
  14. krons/agent/operations/__init__.py +82 -0
  15. krons/agent/operations/act.py +100 -0
  16. krons/agent/operations/generate.py +145 -0
  17. krons/agent/operations/llm_reparse.py +89 -0
  18. krons/agent/operations/operate.py +247 -0
  19. krons/agent/operations/parse.py +243 -0
  20. krons/agent/operations/react.py +286 -0
  21. krons/agent/operations/specs.py +235 -0
  22. krons/agent/operations/structure.py +151 -0
  23. krons/agent/operations/utils.py +79 -0
  24. krons/agent/providers/__init__.py +17 -0
  25. krons/agent/providers/anthropic_messages.py +146 -0
  26. krons/agent/providers/claude_code.py +276 -0
  27. krons/agent/providers/gemini.py +268 -0
  28. krons/agent/providers/match.py +75 -0
  29. krons/agent/providers/oai_chat.py +174 -0
  30. krons/agent/third_party/__init__.py +2 -0
  31. krons/agent/third_party/anthropic_models.py +154 -0
  32. krons/agent/third_party/claude_code.py +682 -0
  33. krons/agent/third_party/gemini_models.py +508 -0
  34. krons/agent/third_party/openai_models.py +295 -0
  35. krons/agent/tool.py +291 -0
  36. krons/core/__init__.py +56 -74
  37. krons/core/base/__init__.py +121 -0
  38. krons/core/{broadcaster.py → base/broadcaster.py} +7 -3
  39. krons/core/{element.py → base/element.py} +13 -5
  40. krons/core/{event.py → base/event.py} +39 -6
  41. krons/core/{eventbus.py → base/eventbus.py} +3 -1
  42. krons/core/{flow.py → base/flow.py} +11 -4
  43. krons/core/{graph.py → base/graph.py} +24 -8
  44. krons/core/{node.py → base/node.py} +44 -19
  45. krons/core/{pile.py → base/pile.py} +22 -8
  46. krons/core/{processor.py → base/processor.py} +21 -7
  47. krons/core/{progression.py → base/progression.py} +3 -1
  48. krons/{specs → core/specs}/__init__.py +0 -5
  49. krons/{specs → core/specs}/adapters/dataclass_field.py +16 -8
  50. krons/{specs → core/specs}/adapters/pydantic_adapter.py +11 -5
  51. krons/{specs → core/specs}/adapters/sql_ddl.py +14 -8
  52. krons/{specs → core/specs}/catalog/__init__.py +2 -2
  53. krons/{specs → core/specs}/catalog/_audit.py +2 -2
  54. krons/{specs → core/specs}/catalog/_common.py +2 -2
  55. krons/{specs → core/specs}/catalog/_content.py +4 -4
  56. krons/{specs → core/specs}/catalog/_enforcement.py +3 -3
  57. krons/{specs → core/specs}/factory.py +5 -5
  58. krons/{specs → core/specs}/operable.py +8 -2
  59. krons/{specs → core/specs}/protocol.py +4 -2
  60. krons/{specs → core/specs}/spec.py +23 -11
  61. krons/{types → core/types}/base.py +4 -2
  62. krons/{types → core/types}/db_types.py +2 -2
  63. krons/errors.py +13 -13
  64. krons/protocols.py +9 -4
  65. krons/resource/__init__.py +89 -0
  66. krons/{services → resource}/backend.py +48 -22
  67. krons/{services → resource}/endpoint.py +28 -14
  68. krons/{services → resource}/hook.py +20 -7
  69. krons/{services → resource}/imodel.py +46 -28
  70. krons/{services → resource}/registry.py +26 -24
  71. krons/{services → resource}/utilities/rate_limited_executor.py +7 -3
  72. krons/{services → resource}/utilities/rate_limiter.py +3 -1
  73. krons/{services → resource}/utilities/resilience.py +15 -5
  74. krons/resource/utilities/token_calculator.py +185 -0
  75. krons/session/__init__.py +12 -17
  76. krons/session/constraints.py +70 -0
  77. krons/session/exchange.py +11 -3
  78. krons/session/message.py +3 -1
  79. krons/session/registry.py +35 -0
  80. krons/session/session.py +165 -174
  81. krons/utils/__init__.py +45 -0
  82. krons/utils/_function_arg_parser.py +99 -0
  83. krons/utils/_pythonic_function_call.py +249 -0
  84. krons/utils/_to_list.py +9 -3
  85. krons/utils/_utils.py +6 -2
  86. krons/utils/concurrency/_async_call.py +4 -2
  87. krons/utils/concurrency/_errors.py +3 -1
  88. krons/utils/concurrency/_patterns.py +3 -1
  89. krons/utils/concurrency/_resource_tracker.py +6 -2
  90. krons/utils/display.py +257 -0
  91. krons/utils/fuzzy/__init__.py +6 -1
  92. krons/utils/fuzzy/_fuzzy_match.py +14 -8
  93. krons/utils/fuzzy/_string_similarity.py +3 -1
  94. krons/utils/fuzzy/_to_dict.py +3 -1
  95. krons/utils/schemas/__init__.py +26 -0
  96. krons/utils/schemas/_breakdown_pydantic_annotation.py +131 -0
  97. krons/utils/schemas/_formatter.py +72 -0
  98. krons/utils/schemas/_minimal_yaml.py +151 -0
  99. krons/utils/schemas/_typescript.py +153 -0
  100. krons/utils/validators/__init__.py +3 -0
  101. krons/utils/validators/_validate_image_url.py +56 -0
  102. krons/work/__init__.py +126 -0
  103. krons/work/engine.py +333 -0
  104. krons/work/form.py +305 -0
  105. krons/{operations → work/operations}/__init__.py +7 -4
  106. krons/{operations → work/operations}/builder.py +1 -1
  107. krons/{enforcement → work/operations}/context.py +36 -5
  108. krons/{operations → work/operations}/flow.py +13 -5
  109. krons/{operations → work/operations}/node.py +45 -43
  110. krons/work/operations/registry.py +103 -0
  111. krons/{specs → work}/phrase.py +130 -13
  112. krons/{enforcement → work}/policy.py +3 -3
  113. krons/work/report.py +268 -0
  114. krons/work/rules/__init__.py +47 -0
  115. krons/{enforcement → work/rules}/common/boolean.py +3 -1
  116. krons/{enforcement → work/rules}/common/choice.py +9 -3
  117. krons/{enforcement → work/rules}/common/number.py +3 -1
  118. krons/{enforcement → work/rules}/common/string.py +9 -3
  119. krons/{enforcement → work/rules}/rule.py +1 -1
  120. krons/{enforcement → work/rules}/validator.py +20 -5
  121. krons/{enforcement → work}/service.py +16 -7
  122. krons/work/worker.py +266 -0
  123. {krons-0.1.1.dist-info → krons-0.2.0.dist-info}/METADATA +15 -1
  124. krons-0.2.0.dist-info/RECORD +154 -0
  125. krons/enforcement/__init__.py +0 -57
  126. krons/operations/registry.py +0 -92
  127. krons/services/__init__.py +0 -81
  128. krons-0.1.1.dist-info/RECORD +0 -101
  129. /krons/{specs → core/specs}/adapters/__init__.py +0 -0
  130. /krons/{specs → core/specs}/adapters/_utils.py +0 -0
  131. /krons/{specs → core/specs}/adapters/factory.py +0 -0
  132. /krons/{types → core/types}/__init__.py +0 -0
  133. /krons/{types → core/types}/_sentinel.py +0 -0
  134. /krons/{types → core/types}/identity.py +0 -0
  135. /krons/{services → resource}/utilities/__init__.py +0 -0
  136. /krons/{services → resource}/utilities/header_factory.py +0 -0
  137. /krons/{enforcement → work/rules}/common/__init__.py +0 -0
  138. /krons/{enforcement → work/rules}/common/mapping.py +0 -0
  139. /krons/{enforcement → work/rules}/common/model.py +0 -0
  140. /krons/{enforcement → work/rules}/registry.py +0 -0
  141. {krons-0.1.1.dist-info → krons-0.2.0.dist-info}/WHEEL +0 -0
  142. {krons-0.1.1.dist-info → krons-0.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,57 +0,0 @@
1
- # Copyright (c) 2025 - 2026, HaiyangLi <quantocean.li at gmail dot com>
2
- # SPDX-License-Identifier: Apache-2.0
3
-
4
- """Enforcement module - Validation and policy protocols.
5
-
6
- Provides:
7
- - Rule: Base validation rule with auto-correction support
8
- - Validator: Validates data against Spec/Operable using rules
9
- - RuleRegistry: Maps types to validation rules
10
- - Policy protocols: Abstract contracts for policy evaluation
11
-
12
- Mental model:
13
- Rule = validation (is data valid?) - with optional auto-fix
14
- Policy = external evaluation protocol (implementations in domain libs)
15
-
16
- Usage:
17
- from krons.enforcement import Rule, Validator, RuleRegistry
18
-
19
- # Register rules
20
- registry = RuleRegistry()
21
- registry.register(str, StringRule(min_length=1))
22
-
23
- # Validate
24
- validator = Validator(registry=registry)
25
- result = await validator.validate_spec(spec, value)
26
- """
27
-
28
- from .context import QueryFn, RequestContext
29
- from .policy import EnforcementLevel, PolicyEngine, PolicyResolver, ResolvedPolicy
30
- from .registry import RuleRegistry, get_default_registry
31
- from .rule import Rule, RuleParams, RuleQualifier, ValidationError
32
- from .service import ActionMeta, KronConfig, KronService, action, get_action_meta
33
- from .validator import Validator
34
-
35
- __all__ = (
36
- # Rule system
37
- "Rule",
38
- "RuleParams",
39
- "RuleQualifier",
40
- "RuleRegistry",
41
- "ValidationError",
42
- "Validator",
43
- "get_default_registry",
44
- # Policy protocols
45
- "EnforcementLevel",
46
- "PolicyEngine",
47
- "PolicyResolver",
48
- "ResolvedPolicy",
49
- # Service
50
- "ActionMeta",
51
- "KronConfig",
52
- "KronService",
53
- "QueryFn",
54
- "RequestContext",
55
- "action",
56
- "get_action_meta",
57
- )
@@ -1,92 +0,0 @@
1
- # Copyright (c) 2025 - 2026, HaiyangLi <quantocean.li at gmail dot com>
2
- # SPDX-License-Identifier: Apache-2.0
3
-
4
- """Per-session operation factory registry.
5
-
6
- Maps operation names to async factory functions. Instantiated per-Session
7
- for isolation, testability, and per-session customization.
8
- """
9
-
10
- from __future__ import annotations
11
-
12
- from collections.abc import Awaitable, Callable
13
- from typing import Any
14
-
15
- __all__ = ("OperationRegistry",)
16
-
17
- OperationFactory = Callable[..., Awaitable[Any]]
18
- """Factory signature: async (session, branch, parameters) -> result"""
19
-
20
-
21
- class OperationRegistry:
22
- """Map operation names to async factory functions.
23
-
24
- Per-session registry (not global) for isolation and testability.
25
-
26
- Example:
27
- registry = OperationRegistry()
28
- registry.register("chat", chat_factory)
29
- factory = registry.get("chat")
30
- result = await factory(session, branch, params)
31
- """
32
-
33
- def __init__(self):
34
- """Initialize empty registry."""
35
- self._factories: dict[str, OperationFactory] = {}
36
-
37
- def register(
38
- self,
39
- operation_name: str,
40
- factory: OperationFactory,
41
- *,
42
- override: bool = False,
43
- ) -> None:
44
- """Register factory for operation name.
45
-
46
- Args:
47
- operation_name: Lookup key.
48
- factory: Async (session, branch, params) -> result.
49
- override: Allow replacing existing. Default False.
50
-
51
- Raises:
52
- ValueError: If name exists and override=False.
53
- """
54
- if operation_name in self._factories and not override:
55
- raise ValueError(
56
- f"Operation '{operation_name}' already registered. Use override=True to replace."
57
- )
58
- self._factories[operation_name] = factory
59
-
60
- def get(self, operation_name: str) -> OperationFactory:
61
- """Get factory by name. Raises KeyError with available names if not found."""
62
- if operation_name not in self._factories:
63
- raise KeyError(
64
- f"Operation '{operation_name}' not registered. Available: {self.list_names()}"
65
- )
66
- return self._factories[operation_name]
67
-
68
- def has(self, operation_name: str) -> bool:
69
- """Check if name is registered."""
70
- return operation_name in self._factories
71
-
72
- def unregister(self, operation_name: str) -> bool:
73
- """Remove registration. Returns True if existed."""
74
- if operation_name in self._factories:
75
- del self._factories[operation_name]
76
- return True
77
- return False
78
-
79
- def list_names(self) -> list[str]:
80
- """Return all registered operation names."""
81
- return list(self._factories.keys())
82
-
83
- def __contains__(self, operation_name: str) -> bool:
84
- """Support 'name in registry' syntax."""
85
- return operation_name in self._factories
86
-
87
- def __len__(self) -> int:
88
- """Count of registered operations."""
89
- return len(self._factories)
90
-
91
- def __repr__(self) -> str:
92
- return f"OperationRegistry(operations={self.list_names()})"
@@ -1,81 +0,0 @@
1
- # Copyright (c) 2025 - 2026, HaiyangLi <quantocean.li at gmail dot com>
2
- # SPDX-License-Identifier: Apache-2.0
3
-
4
- """Services module: iModel, ServiceBackend, hooks, and registry.
5
-
6
- Core exports:
7
- - iModel: Unified service interface with rate limiting and hooks
8
- - ServiceBackend/Endpoint: Backend abstractions for API calls
9
- - HookRegistry/HookEvent/HookPhase: Lifecycle hook system
10
- - ServiceRegistry: O(1) name-based service lookup
11
-
12
- Uses lazy loading for fast import.
13
- """
14
-
15
- from __future__ import annotations
16
-
17
- from typing import TYPE_CHECKING
18
-
19
- # Lazy import mapping
20
- _LAZY_IMPORTS: dict[str, tuple[str, str]] = {
21
- "Calling": ("krons.services.backend", "Calling"),
22
- "NormalizedResponse": ("krons.services.backend", "NormalizedResponse"),
23
- "ServiceBackend": ("krons.services.backend", "ServiceBackend"),
24
- "ServiceConfig": ("krons.services.backend", "ServiceConfig"),
25
- "ServiceRegistry": ("krons.services.registry", "ServiceRegistry"),
26
- "iModel": ("krons.services.imodel", "iModel"),
27
- "Endpoint": ("krons.services.endpoint", "Endpoint"),
28
- "EndpointConfig": ("krons.services.endpoint", "EndpointConfig"),
29
- "APICalling": ("krons.services.endpoint", "APICalling"),
30
- "HookRegistry": ("krons.services.hook", "HookRegistry"),
31
- "HookEvent": ("krons.services.hook", "HookEvent"),
32
- "HookPhase": ("krons.services.hook", "HookPhase"),
33
- }
34
-
35
- _LOADED: dict[str, object] = {}
36
-
37
-
38
- def __getattr__(name: str) -> object:
39
- """Lazy import attributes on first access."""
40
- if name in _LOADED:
41
- return _LOADED[name]
42
-
43
- if name in _LAZY_IMPORTS:
44
- from importlib import import_module
45
-
46
- module_name, attr_name = _LAZY_IMPORTS[name]
47
- module = import_module(module_name)
48
- value = getattr(module, attr_name)
49
- _LOADED[name] = value
50
- return value
51
-
52
- raise AttributeError(f"module 'krons.services' has no attribute {name!r}")
53
-
54
-
55
- def __dir__() -> list[str]:
56
- """Return all available attributes for autocomplete."""
57
- return list(__all__)
58
-
59
-
60
- # TYPE_CHECKING block for static analysis
61
- if TYPE_CHECKING:
62
- from .backend import Calling, NormalizedResponse, ServiceBackend, ServiceConfig
63
- from .endpoint import APICalling, Endpoint, EndpointConfig
64
- from .hook import HookEvent, HookPhase, HookRegistry
65
- from .imodel import iModel
66
- from .registry import ServiceRegistry
67
-
68
- __all__ = (
69
- "APICalling",
70
- "Calling",
71
- "Endpoint",
72
- "EndpointConfig",
73
- "HookEvent",
74
- "HookPhase",
75
- "HookRegistry",
76
- "NormalizedResponse",
77
- "ServiceBackend",
78
- "ServiceConfig",
79
- "ServiceRegistry",
80
- "iModel",
81
- )
@@ -1,101 +0,0 @@
1
- krons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- krons/errors.py,sha256=qzedv7hxB66-1hxNZYooetp-x-Yo71g_NquJH931YsQ,4038
3
- krons/protocols.py,sha256=J7mMmBIk-sS5CPwYk1tPo-W8UAnau8_v6wruDhDelbs,15239
4
- krons/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- krons/core/__init__.py,sha256=cR62yVsNyF8lu3gkiHJMnvew1Jj8HqnMBzA7rFzlVzs,4187
6
- krons/core/broadcaster.py,sha256=oSfr1ESB8DJdCnzwDmOuVr2QKtisFxQh7OldVzwPKKI,3965
7
- krons/core/element.py,sha256=ouSNYvryb7TzgRuwW-ETVOvrfomTlrVp8AqLQ8NEJSg,7533
8
- krons/core/event.py,sha256=hOXOjrug9C8GqMAdT44iQVC3oSRnXFnOx7-TEbNcaKs,10601
9
- krons/core/eventbus.py,sha256=cSi2PGRIUh9t2RpN92fjP73mDoIinngBYDbEbA3bv4s,3731
10
- krons/core/flow.py,sha256=h2Ug-u7DWNDgLOYwSjIZjNVLI4iuNzV1wZ4RSdp6ba0,12271
11
- krons/core/graph.py,sha256=hk8pp5vt_aI6L-PLopzd3tGrV4XnyYqzDPWQ58VK0E8,15797
12
- krons/core/node.py,sha256=3DEIsNVrR5WOnh_JZzShSPbX0dNnUo02pxngJgZ4cTM,34330
13
- krons/core/pile.py,sha256=MiTyajAOVNtv1bFcZQYX2P4PL07kTWZDBATr2DFm034,20893
14
- krons/core/processor.py,sha256=O4Fv7gQzytD4Fmjw8JHdSfuPA85r30z9RfcB021nn0E,18484
15
- krons/core/progression.py,sha256=85Dy-cMLy2UGFr5eZxqiuBh53lKaCQYjIyCZdyQ690M,9806
16
- krons/enforcement/__init__.py,sha256=Y1V7OCqYQF3S02VHt0mRcjktLYNFH_ef-71u7hh4IDg,1653
17
- krons/enforcement/context.py,sha256=b5f653m55NhxqYEDqKT5ZdEqIyqdSWdbGFwMw-cIt7c,4239
18
- krons/enforcement/policy.py,sha256=GYTbSG8ibo2x1eeGr_ot8wGRZBURd9wjyHuUZb6tcGE,2132
19
- krons/enforcement/registry.py,sha256=JFdwcIVtysntj6wMY3bO7-hqwNU7QIoIbEQuhsy5O4U,4742
20
- krons/enforcement/rule.py,sha256=ks2nHFmcwCwPn306k8ra_WFpdj5R3a3W3pyO1fpNeMk,9466
21
- krons/enforcement/service.py,sha256=x5xClQ2uysKYepAZti7ICqrWXTbYjGYtFaC6tzsY_CI,11849
22
- krons/enforcement/validator.py,sha256=mipoSCpk57vOiPDx0UzReYyp2QuD5tOjH_muLnaDWgc,6759
23
- krons/enforcement/common/__init__.py,sha256=U0rEcHOxLftR4-xJNuuXMSDYFAvbs0KzwV3GhlZcUrY,1026
24
- krons/enforcement/common/boolean.py,sha256=vUmOpCMr7kW0tkS5zdvmgY6RouJ_8Xl9Yd0MTCbItz8,2614
25
- krons/enforcement/common/choice.py,sha256=hbziQjfc60Azq-4P5PSEw3KYWm80JPhBg6rgVl3MXaE,3190
26
- krons/enforcement/common/mapping.py,sha256=Loq54MNEtwpnHN0aypTjFOqwoOKLEysddHh-JESedvs,3824
27
- krons/enforcement/common/model.py,sha256=xmM6coEThf_fgIiqJiyDgvdfib_FpVeY6LgWPVcWSwU,3026
28
- krons/enforcement/common/number.py,sha256=_WM_LGSsU1D-HHE6O0nd4tRV20tTw06sOyhaevwoZu4,3132
29
- krons/enforcement/common/string.py,sha256=PAknCSgCPTld1niSsZjljc5_j-cDZVr8S3OvNYFEXJM,4992
30
- krons/operations/__init__.py,sha256=ARzm5ywMn3YzW8vIWfKcy8CeN5DSxi_mGxtyxty03gk,917
31
- krons/operations/builder.py,sha256=wtnlcCpngE5tK0pnwCNjniCi3HFJrWtwpULGzMcddIg,7774
32
- krons/operations/flow.py,sha256=QstfNqntodU7MaVyHva89Rlu1xbdThZwlIqYtLmQVjE,14696
33
- krons/operations/node.py,sha256=499BVq2BnCBM4hLEmYrBsUuWmDhtISgMelUQlEvOtCM,3166
34
- krons/operations/registry.py,sha256=kEE484Q3J4CvcOuP-1AUPQg5i-ff8WcSjQntOXhgqgg,3046
35
- krons/services/__init__.py,sha256=ltUHcKZIWXMk5T11HRJrf_-XjX3eZdwEx02qrID44Nc,2574
36
- krons/services/backend.py,sha256=txvySl_7NLbBJy0b_ZlkxaMhRfPQ1x2_NVrarkxhmew,10251
37
- krons/services/endpoint.py,sha256=FCn3fn9bNZ_lohL8wHPRKYVh3cGbsDE9Un75VXaCE0c,22076
38
- krons/services/hook.py,sha256=Ni1kIe-D-cbb6isjK2_jsy3X2AH0WFXgXOcq75aTRJM,16910
39
- krons/services/imodel.py,sha256=qPd77SAbN3PX0e5dcm-A6UK8fn2eWTAIJ6mBqduQXnQ,18190
40
- krons/services/registry.py,sha256=uHlHJZEYFrV3fL8V61eYAG0geUm3VmT3Be1oJaF8KbY,3788
41
- krons/services/utilities/__init__.py,sha256=-ycdoYgtXrliJwbtQGMHBRvZL0qX2xLzooL3RNV99x4,1013
42
- krons/services/utilities/header_factory.py,sha256=WZCCZMh9EJVi8tnY7dJD07FcTOrrUMvecJmzy8P65Os,2992
43
- krons/services/utilities/rate_limited_executor.py,sha256=KSAYvVce24O7B0BlOgCX6jnYTpGwzjnPHLvbNZ5IvHo,9650
44
- krons/services/utilities/rate_limiter.py,sha256=lquGaLRjQGIIcTysUtsJJ6ZJEqFQyUmbAP7JBCIT93E,5957
45
- krons/services/utilities/resilience.py,sha256=LpcUSx4zGkWECkrgoSKJKyTFkirpoknrgbD1zjwYuco,14239
46
- krons/session/__init__.py,sha256=EZDOlXoGcJ5VT9NPpx5fV_vIpRF_DsavQPcmeG7xiFQ,1210
47
- krons/session/exchange.py,sha256=uE7d2ai5zom64bIA-RmAZy6SUpydCHwZc1e0eROLN6c,9025
48
- krons/session/message.py,sha256=eVP2-4xwMTBaRtATfG7SD4UkdooN-FlRSx0hKsjkFNM,1993
49
- krons/session/session.py,sha256=lWy5ACVFDaUiuFPUSR4kSbcpDB7GI2x4CXP5VoRnL3I,14245
50
- krons/specs/__init__.py,sha256=F6QOVdo1EK5jK6b17rgQqX8i8PWURUxkFzBSz3g0L0A,631
51
- krons/specs/factory.py,sha256=R0vp4ATRZAHhinBFcldyGp1Tt6I44tp-r2GznrxTWZs,3337
52
- krons/specs/operable.py,sha256=lhQ4K3mpHeHPgSSLODnhzJhTYEjSRkxOSqESxVpUBRk,11043
53
- krons/specs/phrase.py,sha256=Zyx-u1vySLHFL5PP1bkHL4AQq7jVa3wag6kDucPT1ck,15125
54
- krons/specs/protocol.py,sha256=ugYVjN6kV-rjXqvxdoTSaQmK9AP_8rXzKY4gN26xfyk,4365
55
- krons/specs/spec.py,sha256=6aB_XGPF6zQfn0g-Pn0IBweC-6xQUqGB1RVhSq-TsBw,18512
56
- krons/specs/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- krons/specs/adapters/_utils.py,sha256=ChWH-C2LRXaXiWM3n7P0DZ8Oci5dSDq59DIJtHx2h-g,1365
58
- krons/specs/adapters/dataclass_field.py,sha256=2mdmqdn5aUV1Y8i1q6IQErmdo4NRP-002y3ZKK424BI,8678
59
- krons/specs/adapters/factory.py,sha256=_LoSMCtHNkK5kNL5LUDjHvJJ2BtDHAaW1gly5LpNPXQ,1572
60
- krons/specs/adapters/pydantic_adapter.py,sha256=L5e0Kg_picNiGyxdvbJil96zAzNGIoHUHTuxcQmcXZk,10360
61
- krons/specs/adapters/sql_ddl.py,sha256=HxvZDYri4GzUgSFf6SDsdI_5w44SOZSRMkqD23LDLVg,31332
62
- krons/specs/catalog/__init__.py,sha256=Sdxl3HDK5LpjDZ0Cf-eBsErPLEGYJRiigMky719lRYY,1221
63
- krons/specs/catalog/_audit.py,sha256=YYrIvEBsAHmRXiIUQrrp_qE6NmnUJq5rexxD5r3radw,1250
64
- krons/specs/catalog/_common.py,sha256=-LyBKV1MMEE0QlrKjlqs9JBmJi_kCehB2Cr743jl94I,1197
65
- krons/specs/catalog/_content.py,sha256=aG01G_X_AHPyYMg7ELdgVUPFLDjqM2BIuaxjKR3zDAs,1952
66
- krons/specs/catalog/_enforcement.py,sha256=NmBwqXQxojBNkIECvPSy1kg1375sijhOXezwCPTa6LM,2111
67
- krons/types/__init__.py,sha256=pJ6kuop7vSLZp5jMBs-CQ7CHRjvUuO8kHhpZ34KM85I,1049
68
- krons/types/_sentinel.py,sha256=QJGyRAYNkJ2ylw6dhxPHJNgmxqBdorBd-xx7pNrUykw,8855
69
- krons/types/base.py,sha256=1wE3Sjxt46cTkqgDT_35Go_1nM2qwVQGv-HJ58e8ATM,12307
70
- krons/types/db_types.py,sha256=78nH6N5hwlwZv69jgBR5bVwpZx82P0mi893THebG-Gg,8126
71
- krons/types/identity.py,sha256=Ccb5oJArC1PEzdzNPlLi_oK87uKx7BFevX9rvY9y-14,1949
72
- krons/utils/__init__.py,sha256=BUQLqQoZ6Bz9eA0nEz9urPTVVS-FSOUWXZe3LMbhEj4,847
73
- krons/utils/_hash.py,sha256=W2Ma9v8-INPaGkur7GTtbF8KwuXSJNSwk8DCNPRvx8Q,6859
74
- krons/utils/_json_dump.py,sha256=rpBmr0NCmIKRdmpgn1nSWIHI3FTsGYsQjOa3YTxCi3M,12482
75
- krons/utils/_lazy_init.py,sha256=bCx_W3dfzirB5KnAt6_jmbnwOk2xbU7-kgOhMQqzW70,1806
76
- krons/utils/_to_list.py,sha256=LmGMwAhxP0RRr-pEYG01_nWVvb7ei95xn_ZlAJUquqc,6031
77
- krons/utils/_to_num.py,sha256=NyyIL9Az1EaW6QFh9R7AeJdaUPoSRBNVBX9yj78wpok,3102
78
- krons/utils/_utils.py,sha256=533D_1yTDURzn5QrnADT99_AEvK4P5g4FUYs3Ohkx6M,11089
79
- krons/utils/concurrency/__init__.py,sha256=1HD-aY4Hevde0Hm0-VYa0eheT5OiwhlnDJtofIuV9wk,6754
80
- krons/utils/concurrency/_async_call.py,sha256=T1YN7hh2vvG9hdheRlEVvXsGRU0p3v0GTisoMeLzx7g,10206
81
- krons/utils/concurrency/_cancel.py,sha256=b9f6yT8gObS6Y3EWKoGzNfYxqM1ZrN_8ctfyIjT1m1U,3326
82
- krons/utils/concurrency/_errors.py,sha256=tmszbwq7NPy3VTqJpvXxQ_2IVE024KkCqC27Bsoo4ZU,2597
83
- krons/utils/concurrency/_patterns.py,sha256=OGCLd5ndMV7fZxKxTT6lPJTIgwu8euEBbhopIt6_Ijs,11534
84
- krons/utils/concurrency/_primitives.py,sha256=D1Rl1hujXXPdL4Mw6eW5EN8utM3bh8vmmFtXmuvsDw0,9024
85
- krons/utils/concurrency/_priority_queue.py,sha256=wGi6ESS6AIZ0QNRBQR5UwcSQI5GhKjATBC_aEw6c0aQ,4342
86
- krons/utils/concurrency/_resource_tracker.py,sha256=hTn0PmxWbQ0uwTGB1YuPUKhtso2VyY7SVWtl4dkzZSU,3151
87
- krons/utils/concurrency/_run_async.py,sha256=A_vuPi9-wWRr3oXiAMnv3l7MV2B76jkBXoVztX_Vcgo,1940
88
- krons/utils/concurrency/_task.py,sha256=4ivkiUUbutheoYZ-G8-mTfHX4YgWguGIy1v5hSU871w,2528
89
- krons/utils/concurrency/_utils.py,sha256=CyH_z4prYFeCFgwk4Pc3q0m5NRzDB2TP-G2oxdM_-C0,2136
90
- krons/utils/fuzzy/__init__.py,sha256=0dZRhC7sgH0b3oiNFdnUpPq7Jgsb84sFXtCsxCFkdss,354
91
- krons/utils/fuzzy/_extract_json.py,sha256=6Y-QEfXrTBdaNmlbMfVm6xJPBKI0RBbr_t0VYGE7nMo,2922
92
- krons/utils/fuzzy/_fuzzy_json.py,sha256=hV6v9YkQpGxwOnhpLM6jkrG5fZKYluMTxgdqsk5sTew,9151
93
- krons/utils/fuzzy/_fuzzy_match.py,sha256=rL_YuoAUVbnLxFCAZlXgPxeCmKjxH90r06mzuZ-jXk4,4855
94
- krons/utils/fuzzy/_string_similarity.py,sha256=ZwAerTdXDen-6Q3Kg46ckXF_T69xFLYBEVdt8EZq95M,6141
95
- krons/utils/fuzzy/_to_dict.py,sha256=ORQy-_6snt6TmVJZI-MHDoDO7jFYg-xlaxU_pBbfk7s,12911
96
- krons/utils/sql/__init__.py,sha256=yNjm9Dr-ZjrZSD3Lext7fPR80qX5svGT2PnXqlb5qXs,264
97
- krons/utils/sql/_sql_validation.py,sha256=smxNU3HjPhQuRK5ehG9Fl4DeljKK9tqUQIvRUopgvc8,4229
98
- krons-0.1.1.dist-info/METADATA,sha256=88PmVejjLNnaSX-xRgqkSaP15gpLiladDaE6XvhbJiE,1997
99
- krons-0.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
100
- krons-0.1.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
101
- krons-0.1.1.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes