dirigent-core 0.24.0__tar.gz → 0.25.0__tar.gz
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.
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/PKG-INFO +4 -4
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/pyproject.toml +4 -4
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/pyproject.toml.orig +4 -4
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/documents.py +22 -15
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/LICENSE +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/README.md +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/__init__.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/alembic/env.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/alembic/script.py.mako +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/alembic/versions/0001_baseline_schema.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/alerting.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/artifacts.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/auth.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/blockdocs.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/config.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/configdocs.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/database.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/directory.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/documentschema.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/__init__.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/claim.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/context.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/definition.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/executor.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/expansion.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/failure.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/recovery.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/references.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/replies.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/runs.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/services.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/state.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/errors.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/examples.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/ids.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/logging.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/messages.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/migrations.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/models.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/pipelines.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/plugins.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/protocol.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/py.typed +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/ratelimit.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/registry.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/reporting.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/retention.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/scheduler.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/schemas.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/secrets.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/__init__.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/endpoint.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/entries.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/intake.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/kinds.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/rows.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/rules.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/storage.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/telemetry.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/trigger_documents.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/__init__.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/backfill.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/materialize.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/schedules.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/watches.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/webhooks.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/types.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/wakeups.py +0 -0
- {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/worker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dirigent-core
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.25.0
|
|
4
4
|
Summary: Dirigent engine core: schema, configuration, and plugin host.
|
|
5
5
|
License-Expression: LicenseRef-Proprietary
|
|
6
6
|
License-File: LICENSE
|
|
@@ -12,9 +12,9 @@ Requires-Dist: argon2-cffi>=25.1.0
|
|
|
12
12
|
Requires-Dist: asyncpg>=0.31.0
|
|
13
13
|
Requires-Dist: cronsim>=2.7
|
|
14
14
|
Requires-Dist: cryptography>=46.0.5
|
|
15
|
-
Requires-Dist: dirigent-client==0.
|
|
16
|
-
Requires-Dist: dirigent-common==0.
|
|
17
|
-
Requires-Dist: dirigent-plugin==0.
|
|
15
|
+
Requires-Dist: dirigent-client==0.25.0
|
|
16
|
+
Requires-Dist: dirigent-common==0.25.0
|
|
17
|
+
Requires-Dist: dirigent-plugin==0.25.0
|
|
18
18
|
Requires-Dist: jsonschema>=4.26.0
|
|
19
19
|
Requires-Dist: opentelemetry-api>=1.44.0
|
|
20
20
|
Requires-Dist: pydantic-settings>=2.15.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "dirigent-core"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.25.0"
|
|
4
4
|
description = "Dirigent engine core: schema, configuration, and plugin host."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.13"
|
|
@@ -17,9 +17,9 @@ dependencies = [
|
|
|
17
17
|
"asyncpg>=0.31.0",
|
|
18
18
|
"cronsim>=2.7",
|
|
19
19
|
"cryptography>=46.0.5",
|
|
20
|
-
"dirigent-client==0.
|
|
21
|
-
"dirigent-common==0.
|
|
22
|
-
"dirigent-plugin==0.
|
|
20
|
+
"dirigent-client==0.25.0",
|
|
21
|
+
"dirigent-common==0.25.0",
|
|
22
|
+
"dirigent-plugin==0.25.0",
|
|
23
23
|
"jsonschema>=4.26.0",
|
|
24
24
|
"opentelemetry-api>=1.44.0",
|
|
25
25
|
"pydantic-settings>=2.15.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "dirigent-core"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.25.0"
|
|
4
4
|
description = "Dirigent engine core: schema, configuration, and plugin host."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.13"
|
|
@@ -17,9 +17,9 @@ dependencies = [
|
|
|
17
17
|
"asyncpg>=0.31.0",
|
|
18
18
|
"cronsim>=2.7",
|
|
19
19
|
"cryptography>=46.0.5",
|
|
20
|
-
"dirigent-client==0.
|
|
21
|
-
"dirigent-common==0.
|
|
22
|
-
"dirigent-plugin==0.
|
|
20
|
+
"dirigent-client==0.25.0",
|
|
21
|
+
"dirigent-common==0.25.0",
|
|
22
|
+
"dirigent-plugin==0.25.0",
|
|
23
23
|
"jsonschema>=4.26.0",
|
|
24
24
|
"opentelemetry-api>=1.44.0",
|
|
25
25
|
"pydantic-settings>=2.15.0",
|
|
@@ -359,8 +359,8 @@ def validate_against_catalog(
|
|
|
359
359
|
definition: Document,
|
|
360
360
|
catalog: Catalog,
|
|
361
361
|
*,
|
|
362
|
-
connections: Iterable[str] = (),
|
|
363
|
-
pipelines: Iterable[str] = (),
|
|
362
|
+
connections: Iterable[str] | None = (),
|
|
363
|
+
pipelines: Iterable[str] | None = (),
|
|
364
364
|
check_blocks: bool = True,
|
|
365
365
|
unsafe_allowed: Iterable[str] | None = None,
|
|
366
366
|
storage_schemes: Iterable[str] | None = None,
|
|
@@ -372,7 +372,9 @@ def validate_against_catalog(
|
|
|
372
372
|
) -> list[ValidationIssue]:
|
|
373
373
|
"""Check a document against what this instance actually has, reporting everything at once.
|
|
374
374
|
|
|
375
|
-
``check_blocks`` is off
|
|
375
|
+
``check_blocks`` is off where no catalog is available to check against. ``connections`` and
|
|
376
|
+
``pipelines`` are what the instance holds; None means the caller does not know, as on the
|
|
377
|
+
offline path, and then neither a step's connection nor the ones ``requires`` names is checked.
|
|
376
378
|
``unsafe_allowed`` and ``storage_schemes`` are what the instance permits and what its
|
|
377
379
|
backends claim; left unset, neither is checked, because a caller that does not know them
|
|
378
380
|
would otherwise refuse a document the instance would have run. ``blocks`` is the live
|
|
@@ -392,11 +394,13 @@ def validate_against_catalog(
|
|
|
392
394
|
checker = format_checker if format_checker is not None else base_format_checker()
|
|
393
395
|
sensors = _sensors(catalog) if check_blocks else None
|
|
394
396
|
if isinstance(definition, TriggersDefinition):
|
|
395
|
-
return _triggers_document_issues(
|
|
397
|
+
return _triggers_document_issues(
|
|
398
|
+
definition, checker, target, check_target=check_blocks and pipelines is not None, sensors=sensors
|
|
399
|
+
)
|
|
396
400
|
# A document that brings its own connections or schemas satisfies its own references to them.
|
|
397
|
-
known = {name for name in connections} | set(definition.connections)
|
|
401
|
+
known = None if connections is None else {name for name in connections} | set(definition.connections)
|
|
398
402
|
known_schemas = None if schemas is None else {name for name in schemas} | set(definition.schemas)
|
|
399
|
-
held = {name for name in pipelines}
|
|
403
|
+
held = None if pipelines is None else {name for name in pipelines}
|
|
400
404
|
issues: list[ValidationIssue] = []
|
|
401
405
|
if check_blocks:
|
|
402
406
|
issues.extend(
|
|
@@ -626,12 +630,15 @@ def _triggers_document_issues(
|
|
|
626
630
|
def _requirement_issues(
|
|
627
631
|
definition: PipelineDefinition,
|
|
628
632
|
catalog: Catalog,
|
|
629
|
-
connections: set[str],
|
|
630
|
-
pipelines: set[str],
|
|
633
|
+
connections: set[str] | None,
|
|
634
|
+
pipelines: set[str] | None,
|
|
631
635
|
schemes: set[str] | None,
|
|
632
636
|
schemas: set[str] | None,
|
|
633
637
|
) -> list[ValidationIssue]:
|
|
634
|
-
"""Check the ``requires`` preflight first, with one complete list of what is missing.
|
|
638
|
+
"""Check the ``requires`` preflight first, with one complete list of what is missing.
|
|
639
|
+
|
|
640
|
+
A family passed as None is one the caller does not know, and is not checked.
|
|
641
|
+
"""
|
|
635
642
|
installed = {entry.id for entry in catalog.blocks}
|
|
636
643
|
issues = [
|
|
637
644
|
ValidationIssue.of(REQUIRED_BLOCK_MISSING, location=f"requires.blocks.{index}", block=repr(block))
|
|
@@ -641,12 +648,12 @@ def _requirement_issues(
|
|
|
641
648
|
issues.extend(
|
|
642
649
|
ValidationIssue.of(REQUIRED_CONNECTION_MISSING, location=f"requires.connections.{index}", code=repr(name))
|
|
643
650
|
for index, name in enumerate(definition.requires.connections)
|
|
644
|
-
if name not in connections
|
|
651
|
+
if connections is not None and name not in connections
|
|
645
652
|
)
|
|
646
653
|
issues.extend(
|
|
647
654
|
ValidationIssue.of(REQUIRED_PIPELINE_MISSING, location=f"requires.pipelines.{index}", code=repr(name))
|
|
648
655
|
for index, name in enumerate(definition.requires.pipelines)
|
|
649
|
-
if name not in pipelines and name != definition.code
|
|
656
|
+
if pipelines is not None and name not in pipelines and name != definition.code
|
|
650
657
|
)
|
|
651
658
|
if schemes is not None:
|
|
652
659
|
registered = ", ".join(sorted(schemes)) or "none are registered"
|
|
@@ -675,7 +682,7 @@ def _requirement_issues(
|
|
|
675
682
|
def _step_block_issues(
|
|
676
683
|
definition: PipelineDefinition,
|
|
677
684
|
catalog: Catalog,
|
|
678
|
-
connections: set[str],
|
|
685
|
+
connections: set[str] | None,
|
|
679
686
|
allowed: set[str] | None = None,
|
|
680
687
|
schemes: set[str] | None = None,
|
|
681
688
|
blocks: Mapping[str, Any] | None = None,
|
|
@@ -809,10 +816,10 @@ def _config_issues(step: str, config: JsonMap, schema: JsonMap) -> list[Validati
|
|
|
809
816
|
return issues
|
|
810
817
|
|
|
811
818
|
|
|
812
|
-
def _connection_issues(step: str, config: JsonMap, connections: set[str]) -> list[ValidationIssue]:
|
|
813
|
-
"""Refuse a step naming a connection this instance does not hold."""
|
|
819
|
+
def _connection_issues(step: str, config: JsonMap, connections: set[str] | None) -> list[ValidationIssue]:
|
|
820
|
+
"""Refuse a step naming a connection this instance does not hold, when the caller knows what it holds."""
|
|
814
821
|
named = config.get("connection")
|
|
815
|
-
if not isinstance(named, str) or has_reference(named) or named in connections:
|
|
822
|
+
if connections is None or not isinstance(named, str) or has_reference(named) or named in connections:
|
|
816
823
|
return []
|
|
817
824
|
available = ", ".join(sorted(connections)) or "this instance has no connections"
|
|
818
825
|
return [
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|