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.
Files changed (69) hide show
  1. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/PKG-INFO +4 -4
  2. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/pyproject.toml +4 -4
  3. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/pyproject.toml.orig +4 -4
  4. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/documents.py +22 -15
  5. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/LICENSE +0 -0
  6. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/README.md +0 -0
  7. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/__init__.py +0 -0
  8. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/alembic/env.py +0 -0
  9. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/alembic/script.py.mako +0 -0
  10. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/alembic/versions/0001_baseline_schema.py +0 -0
  11. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/alerting.py +0 -0
  12. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/artifacts.py +0 -0
  13. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/auth.py +0 -0
  14. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/blockdocs.py +0 -0
  15. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/config.py +0 -0
  16. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/configdocs.py +0 -0
  17. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/database.py +0 -0
  18. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/directory.py +0 -0
  19. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/documentschema.py +0 -0
  20. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/__init__.py +0 -0
  21. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/claim.py +0 -0
  22. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/context.py +0 -0
  23. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/definition.py +0 -0
  24. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/executor.py +0 -0
  25. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/expansion.py +0 -0
  26. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/failure.py +0 -0
  27. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/recovery.py +0 -0
  28. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/references.py +0 -0
  29. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/replies.py +0 -0
  30. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/runs.py +0 -0
  31. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/services.py +0 -0
  32. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/engine/state.py +0 -0
  33. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/errors.py +0 -0
  34. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/examples.py +0 -0
  35. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/ids.py +0 -0
  36. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/logging.py +0 -0
  37. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/messages.py +0 -0
  38. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/migrations.py +0 -0
  39. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/models.py +0 -0
  40. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/pipelines.py +0 -0
  41. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/plugins.py +0 -0
  42. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/protocol.py +0 -0
  43. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/py.typed +0 -0
  44. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/ratelimit.py +0 -0
  45. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/registry.py +0 -0
  46. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/reporting.py +0 -0
  47. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/retention.py +0 -0
  48. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/scheduler.py +0 -0
  49. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/schemas.py +0 -0
  50. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/secrets.py +0 -0
  51. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/__init__.py +0 -0
  52. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/endpoint.py +0 -0
  53. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/entries.py +0 -0
  54. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/intake.py +0 -0
  55. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/kinds.py +0 -0
  56. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/rows.py +0 -0
  57. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/sources/rules.py +0 -0
  58. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/storage.py +0 -0
  59. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/telemetry.py +0 -0
  60. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/trigger_documents.py +0 -0
  61. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/__init__.py +0 -0
  62. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/backfill.py +0 -0
  63. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/materialize.py +0 -0
  64. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/schedules.py +0 -0
  65. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/watches.py +0 -0
  66. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/triggers/webhooks.py +0 -0
  67. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/types.py +0 -0
  68. {dirigent_core-0.24.0 → dirigent_core-0.25.0}/src/dirigent_core/wakeups.py +0 -0
  69. {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.24.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.24.0
16
- Requires-Dist: dirigent-common==0.24.0
17
- Requires-Dist: dirigent-plugin==0.24.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.24.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.24.0",
21
- "dirigent-common==0.24.0",
22
- "dirigent-plugin==0.24.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.24.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.24.0",
21
- "dirigent-common==0.24.0",
22
- "dirigent-plugin==0.24.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 on the offline path, where no catalog is available to check against.
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(definition, checker, target, check_target=check_blocks, sensors=sensors)
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