dirigent-cli 0.28.0__tar.gz → 0.29.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 (38) hide show
  1. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/PKG-INFO +9 -9
  2. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/pyproject.toml +9 -9
  3. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/pyproject.toml.orig +9 -9
  4. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/commands.py +21 -5
  5. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/messages.py +6 -0
  6. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/source_commands.py +2 -0
  7. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/LICENSE +0 -0
  8. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/README.md +0 -0
  9. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/__init__.py +0 -0
  10. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/aliases.py +0 -0
  11. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/context.py +0 -0
  12. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/explain.py +0 -0
  13. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/formatters.py +0 -0
  14. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/graph.py +0 -0
  15. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/health.py +0 -0
  16. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/init_form.py +0 -0
  17. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/local.py +0 -0
  18. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/main.py +0 -0
  19. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/output.py +0 -0
  20. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/params.py +0 -0
  21. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/profiles.py +0 -0
  22. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/project.py +0 -0
  23. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/py.typed +0 -0
  24. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/reaper.py +0 -0
  25. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/scaffold.py +0 -0
  26. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/schemas.py +0 -0
  27. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/seeding.py +0 -0
  28. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/sources.py +0 -0
  29. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/starters.py +0 -0
  30. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/stream.py +0 -0
  31. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/summaries.py +0 -0
  32. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/templates/pack/README.md.tmpl +0 -0
  33. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/templates/pack/__init__.py.tmpl +0 -0
  34. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/templates/pack/operator.py.tmpl +0 -0
  35. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/templates/pack/pyproject.toml.tmpl +0 -0
  36. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/templates/pack/test_plugin.py.tmpl +0 -0
  37. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/timing.py +0 -0
  38. {dirigent_cli-0.28.0 → dirigent_cli-0.29.0}/src/dirigent_cli/triggers.py +0 -0
@@ -1,19 +1,19 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirigent-cli
3
- Version: 0.28.0
3
+ Version: 0.29.0
4
4
  Summary: The dirigent command line interface (dirigent / dg).
5
5
  License-Expression: LicenseRef-Proprietary
6
6
  License-File: LICENSE
7
7
  Classifier: Programming Language :: Python :: 3
8
8
  Classifier: Programming Language :: Python :: 3.13
9
- Requires-Dist: dirigent-block-execute==0.28.0
10
- Requires-Dist: dirigent-blocks==0.28.0
11
- Requires-Dist: dirigent-client==0.28.0
12
- Requires-Dist: dirigent-common==0.28.0
13
- Requires-Dist: dirigent-core==0.28.0
14
- Requires-Dist: dirigent-examples==0.28.0
15
- Requires-Dist: dirigent-plugin==0.28.0
16
- Requires-Dist: dirigent-server==0.28.0
9
+ Requires-Dist: dirigent-block-execute==0.29.0
10
+ Requires-Dist: dirigent-blocks==0.29.0
11
+ Requires-Dist: dirigent-client==0.29.0
12
+ Requires-Dist: dirigent-common==0.29.0
13
+ Requires-Dist: dirigent-core==0.29.0
14
+ Requires-Dist: dirigent-examples==0.29.0
15
+ Requires-Dist: dirigent-plugin==0.29.0
16
+ Requires-Dist: dirigent-server==0.29.0
17
17
  Requires-Dist: httpx2>=2.12.0
18
18
  Requires-Dist: python-dotenv>=1.1.0
19
19
  Requires-Dist: pyyaml>=6.0.3
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dirigent-cli"
3
- version = "0.28.0"
3
+ version = "0.29.0"
4
4
  description = "The dirigent command line interface (dirigent / dg)."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -11,14 +11,14 @@ classifiers = [
11
11
  "Programming Language :: Python :: 3.13",
12
12
  ]
13
13
  dependencies = [
14
- "dirigent-block-execute==0.28.0",
15
- "dirigent-blocks==0.28.0",
16
- "dirigent-client==0.28.0",
17
- "dirigent-common==0.28.0",
18
- "dirigent-core==0.28.0",
19
- "dirigent-examples==0.28.0",
20
- "dirigent-plugin==0.28.0",
21
- "dirigent-server==0.28.0",
14
+ "dirigent-block-execute==0.29.0",
15
+ "dirigent-blocks==0.29.0",
16
+ "dirigent-client==0.29.0",
17
+ "dirigent-common==0.29.0",
18
+ "dirigent-core==0.29.0",
19
+ "dirigent-examples==0.29.0",
20
+ "dirigent-plugin==0.29.0",
21
+ "dirigent-server==0.29.0",
22
22
  "httpx2>=2.12.0",
23
23
  "python-dotenv>=1.1.0",
24
24
  "pyyaml>=6.0.3",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dirigent-cli"
3
- version = "0.28.0"
3
+ version = "0.29.0"
4
4
  description = "The dirigent command line interface (dirigent / dg)."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -11,14 +11,14 @@ classifiers = [
11
11
  "Programming Language :: Python :: 3.13",
12
12
  ]
13
13
  dependencies = [
14
- "dirigent-block-execute==0.28.0",
15
- "dirigent-blocks==0.28.0",
16
- "dirigent-client==0.28.0",
17
- "dirigent-common==0.28.0",
18
- "dirigent-core==0.28.0",
19
- "dirigent-examples==0.28.0",
20
- "dirigent-plugin==0.28.0",
21
- "dirigent-server==0.28.0",
14
+ "dirigent-block-execute==0.29.0",
15
+ "dirigent-blocks==0.29.0",
16
+ "dirigent-client==0.29.0",
17
+ "dirigent-common==0.29.0",
18
+ "dirigent-core==0.29.0",
19
+ "dirigent-examples==0.29.0",
20
+ "dirigent-plugin==0.29.0",
21
+ "dirigent-server==0.29.0",
22
22
  "httpx2>=2.12.0",
23
23
  "python-dotenv>=1.1.0",
24
24
  "pyyaml>=6.0.3",
@@ -64,6 +64,7 @@ from dirigent_cli.messages import (
64
64
  NO_SUCH_BLOCK,
65
65
  NO_SUCH_EXAMPLE,
66
66
  NOT_A_BLOCK_KIND,
67
+ NOT_A_PIPELINE_CODE,
67
68
  NOT_A_PRIORITY,
68
69
  NOT_A_RUN_STATUS,
69
70
  NOT_A_STARTER,
@@ -179,7 +180,7 @@ from dirigent_client import (
179
180
  declared_label,
180
181
  )
181
182
  from dirigent_client.schemas import TokenLifetime
182
- from dirigent_common import Issue, JsonMap, Message, bounded_load
183
+ from dirigent_common import Issue, JsonMap, Message, bounded_load, is_entity_name
183
184
  from dirigent_core import migrations
184
185
  from dirigent_core.config import STATE_DIR, Settings
185
186
  from dirigent_core.connections import said
@@ -3320,15 +3321,30 @@ def pipeline_new(
3320
3321
  code=repr(entry.code),
3321
3322
  )
3322
3323
  raise typer.Exit(code=1)
3323
- new_code = code or entry.code
3324
+ new_code = code if code is not None else entry.code
3324
3325
  path = directory / f"{new_code}.yaml"
3325
- if path.exists():
3326
+ named = is_entity_name(new_code)
3327
+ if named and (path.is_symlink() or path.exists()):
3326
3328
  refuse(ALREADY_THERE, title="Already there", problems=[Issue.of(NAME_ANOTHER_CODE)], path=path)
3327
3329
  raise typer.Exit(code=1)
3330
+ if not named or path.resolve().parent != directory.resolve():
3331
+ refuse(
3332
+ NOT_A_PIPELINE_CODE,
3333
+ title="Not a pipeline code",
3334
+ problems=[Issue.of(NAME_ANOTHER_CODE)],
3335
+ code=repr(new_code),
3336
+ directory=directory,
3337
+ )
3338
+ raise typer.Exit(code=1)
3328
3339
  text = starters.instantiate(entry.source, new_code)
3329
- directory.mkdir(parents=True, exist_ok=True)
3330
- path.write_text(text)
3331
3340
  copied = load_pipeline_text(text).requires
3341
+ directory.mkdir(parents=True, exist_ok=True)
3342
+ try:
3343
+ with path.open("x", encoding="utf-8") as created:
3344
+ created.write(text)
3345
+ except FileExistsError:
3346
+ refuse(ALREADY_THERE, title="Already there", problems=[Issue.of(NAME_ANOTHER_CODE)], path=path)
3347
+ raise typer.Exit(code=1) from None
3332
3348
  emit_fact(
3333
3349
  "pipeline.created",
3334
3350
  message="created",
@@ -251,6 +251,12 @@ STARTER_TAG_NEEDED = CLI.define(
251
251
 
252
252
  ALREADY_THERE = CLI.define("already_there", "{path} is already there")
253
253
 
254
+ NOT_A_PIPELINE_CODE = CLI.define(
255
+ "not_a_pipeline_code",
256
+ "{code} is not a pipeline code, so it names no file in {directory}: a code is lowercase letters, "
257
+ "digits and single hyphens, and starts with a letter",
258
+ )
259
+
254
260
  NAME_ANOTHER_CODE = CLI.define("name_another_code", "name another code with --code")
255
261
 
256
262
  ONE_CLOCK = CLI.define("one_clock", "a schedule takes exactly one of --cron, --interval, or --at ({named} given)")
@@ -159,6 +159,8 @@ def source_call(
159
159
  """
160
160
  if sum(value is not None for value in (data, text, form)) > 1:
161
161
  fail(ONE_INPUT_BODY)
162
+ if token or signing_secret:
163
+ refuse_a_server_a_project_named(state_of(ctx))
162
164
  with client_for(state_of(ctx)) as dg:
163
165
  row = dg.call(dg.sources.get(pipeline, code))
164
166
  base = dg.url
File without changes
File without changes