mainsequence 8.0.4__tar.gz → 8.0.5__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 (139) hide show
  1. {mainsequence-8.0.4/mainsequence.egg-info → mainsequence-8.0.5}/PKG-INFO +1 -1
  2. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/api.py +4 -5
  3. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/cli.py +15 -36
  4. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/models_foundry.py +9 -22
  5. {mainsequence-8.0.4 → mainsequence-8.0.5/mainsequence.egg-info}/PKG-INFO +1 -1
  6. {mainsequence-8.0.4 → mainsequence-8.0.5}/pyproject.toml +1 -1
  7. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_cli.py +9 -11
  8. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_branch_contract.py +3 -4
  9. {mainsequence-8.0.4 → mainsequence-8.0.5}/LICENSE +0 -0
  10. {mainsequence-8.0.4 → mainsequence-8.0.5}/MANIFEST.in +0 -0
  11. {mainsequence-8.0.4 → mainsequence-8.0.5}/README.md +0 -0
  12. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/AGENTS.md +0 -0
  13. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  14. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  15. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  16. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  17. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  18. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_publishing/time_index_table_updates/SKILL.md +0 -0
  19. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  20. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +0 -0
  21. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  22. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  23. {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +0 -0
  24. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/__init__.py +0 -0
  25. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/__main__.py +0 -0
  26. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/bootstrap.py +0 -0
  27. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/__init__.py +0 -0
  28. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/browser_auth.py +0 -0
  29. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/code_repository_status.py +0 -0
  30. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/config.py +0 -0
  31. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/docker_utils.py +0 -0
  32. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/doctor.py +0 -0
  33. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/local_ops.py +0 -0
  34. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/migrations.py +0 -0
  35. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/model_filters.py +0 -0
  36. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/pydantic_cli.py +0 -0
  37. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/sdk_utils.py +0 -0
  38. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/ssh_utils.py +0 -0
  39. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/ui.py +0 -0
  40. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/__init__.py +0 -0
  41. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/agent_runtime_models.py +0 -0
  42. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/base.py +0 -0
  43. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/client.py +0 -0
  44. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/compute_validation.py +0 -0
  45. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  46. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  47. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  48. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  49. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/dtype_codec.py +0 -0
  50. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/exceptions.py +0 -0
  51. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/metatables/__init__.py +0 -0
  52. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/metatables/core.py +0 -0
  53. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/models_helpers.py +0 -0
  54. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/models_user.py +0 -0
  55. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/observability.py +0 -0
  56. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/utils.py +0 -0
  57. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/code_repository_context.py +0 -0
  58. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/code_repository_skills.py +0 -0
  59. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/defaults.py +0 -0
  60. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/instrumentation/__init__.py +0 -0
  61. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/instrumentation/utils.py +0 -0
  62. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/logconf.py +0 -0
  63. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/__init__.py +0 -0
  64. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/__main__.py +0 -0
  65. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  66. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  67. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/future_registry.py +0 -0
  68. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/hashing.py +0 -0
  69. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/__init__.py +0 -0
  70. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  71. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/env.py +0 -0
  72. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/provider.py +0 -0
  73. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/registry.py +0 -0
  74. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  75. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  76. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  77. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  78. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  79. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/schema_names.py +0 -0
  80. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  81. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_refs.py +0 -0
  82. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/__init__.py +0 -0
  83. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/configuration.py +0 -0
  84. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/dependencies.py +0 -0
  85. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/managers.py +0 -0
  86. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/namespacing.py +0 -0
  87. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/runner.py +0 -0
  88. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/updaters.py +0 -0
  89. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/utils.py +0 -0
  90. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/repository_identity_security.py +0 -0
  91. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/runtime_flags.py +0 -0
  92. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/scaffold_skills.py +0 -0
  93. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/SOURCES.txt +0 -0
  94. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/dependency_links.txt +0 -0
  95. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/entry_points.txt +0 -0
  96. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/requires.txt +0 -0
  97. {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/top_level.txt +0 -0
  98. {mainsequence-8.0.4 → mainsequence-8.0.5}/setup.cfg +0 -0
  99. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/fixtures/time_index_table_update_hash_v2_golden.json +0 -0
  100. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_auth_precedence.py +0 -0
  101. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_canonical_api_route_contract.py +0 -0
  102. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_cli_browser_auth.py +0 -0
  103. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_cli_migrations.py +0 -0
  104. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_client.py +0 -0
  105. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_batch_jobs_from_file.py +0 -0
  106. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_documentation_contract.py +0 -0
  107. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_runtime_context.py +0 -0
  108. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_skills.py +0 -0
  109. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_dependency_extras.py +0 -0
  110. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_duckdb_interface_dimensions.py +0 -0
  111. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_environment_resource_context.py +0 -0
  112. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_environment_response_contracts.py +0 -0
  113. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_filter_normalization.py +0 -0
  114. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_instrumentation.py +0 -0
  115. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_local_ops.py +0 -0
  116. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_logconf.py +0 -0
  117. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_meta_table_migrations.py +0 -0
  118. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_meta_tables_client_models.py +0 -0
  119. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
  120. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_models_user_request_bound_auth.py +0 -0
  121. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_notification_uid_contract.py +0 -0
  122. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_observability_client.py +0 -0
  123. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_pod_project_resolution.py +0 -0
  124. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_scaffold_skills.py +0 -0
  125. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_scheduler_client_model.py +0 -0
  126. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_schema_names.py +0 -0
  127. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_secret_client_model.py +0 -0
  128. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_source_table_configuration.py +0 -0
  129. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_sqlite_interface_dimensions.py +0 -0
  130. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_ssh_utils.py +0 -0
  131. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_access_dimension_audit.py +0 -0
  132. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_dimension_queries.py +0 -0
  133. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_configuration.py +0 -0
  134. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_configuration_client.py +0 -0
  135. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_flow.py +0 -0
  136. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_hard_cut.py +0 -0
  137. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_update_runner_uid_runtime.py +0 -0
  138. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_update_statistics.py +0 -0
  139. {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_update_uid_guards.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 8.0.4
3
+ Version: 8.0.5
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -5225,7 +5225,7 @@ def create_code_repository(
5225
5225
  code_repository_type: str = "python",
5226
5226
  default_base_image_uid: str | None = None,
5227
5227
  github_org_uid: str | None = None,
5228
- env_vars: dict[str, str] | None = None,
5228
+ bootstrap_organization_environment_uid: str | None = None,
5229
5229
  labels: list[str] | None = None,
5230
5230
  ) -> dict:
5231
5231
  """
@@ -5240,8 +5240,8 @@ def create_code_repository(
5240
5240
  payload["default_base_image_uid"] = str(default_base_image_uid)
5241
5241
  if github_org_uid not in (None, ""):
5242
5242
  payload["github_org_uid"] = str(github_org_uid)
5243
- if env_vars:
5244
- payload["env_vars"] = [{"name": k, "value": str(v)} for k, v in env_vars.items()]
5243
+ if bootstrap_organization_environment_uid not in (None, ""):
5244
+ payload["bootstrap_organization_environment_uid"] = str(bootstrap_organization_environment_uid)
5245
5245
  if labels is not None:
5246
5246
  payload["labels"] = list(labels)
5247
5247
 
@@ -5298,11 +5298,10 @@ def delete_code_repository(code_repository_uid: str) -> dict[str, Any] | None:
5298
5298
  def bulk_delete_code_repositories(
5299
5299
  *,
5300
5300
  uids: list[str],
5301
- delete_repositories: bool = False,
5302
5301
  ) -> dict[str, Any]:
5303
5302
  payload = {
5304
5303
  "selection": {"mode": "explicit", "uids": list(uids)},
5305
- "options": {"delete_repositories": delete_repositories},
5304
+ "options": {},
5306
5305
  }
5307
5306
  r = authed("POST", "/api/v1/code-repositories/bulk-delete/", payload)
5308
5307
  if not r.ok:
@@ -7427,10 +7427,11 @@ def code_repository_create_cmd(
7427
7427
  github_org_uid: str | None = typer.Option(
7428
7428
  None, "--github-org-uid", "--organization-uid", help="GitHub organization UID"
7429
7429
  ),
7430
- env: list[str] | None = typer.Option(
7430
+ bootstrap_organization_environment_uid: uuid.UUID | None = typer.Option(
7431
7431
  None,
7432
- "--env",
7433
- help="Environment variable entry in KEY=VALUE form. Repeatable or comma-separated.",
7432
+ "--bootstrap-organization-environment-uid",
7433
+ "--environment-uid",
7434
+ help="Active Organization Environment UID used for initial branch bootstrap.",
7434
7435
  ),
7435
7436
  ):
7436
7437
  """
@@ -7449,8 +7450,8 @@ def code_repository_create_cmd(
7449
7450
  Default base image UID.
7450
7451
  github_org_uid:
7451
7452
  GitHub organization UID.
7452
- env:
7453
- Environment variable entries in `KEY=VALUE` format.
7453
+ bootstrap_organization_environment_uid:
7454
+ Optional active Organization Environment UID. The backend derives its required branch.
7454
7455
 
7455
7456
  Examples
7456
7457
  --------
@@ -7458,7 +7459,7 @@ def code_repository_create_cmd(
7458
7459
  mainsequence code-repository create
7459
7460
  mainsequence code-repository create tutorial-repository
7460
7461
  mainsequence code-repository create tutorial-repository --default-base-image-uid <base_image_uid> --github-org-uid <github_org_uid>
7461
- mainsequence code-repository create tutorial-repository --env FOO=bar --env BAZ=qux
7462
+ mainsequence code-repository create tutorial-repository --environment-uid <environment_uid>
7462
7463
  ```
7463
7464
  """
7464
7465
  _require_login()
@@ -7535,29 +7536,16 @@ def code_repository_create_cmd(
7535
7536
  "No GitHub organizations available. CodeRepository will be created without github_org_uid."
7536
7537
  )
7537
7538
 
7538
- env_entries = list(env or [])
7539
- if not env_entries:
7540
- env_line = typer.prompt(
7541
- "Environment variables (KEY=VALUE, comma-separated, optional)",
7542
- default="",
7543
- ).strip()
7544
- if env_line:
7545
- env_entries = [env_line]
7546
-
7547
- env_vars: dict[str, str] | None = None
7548
- if env_entries:
7549
- try:
7550
- env_vars = _parse_env_var_entries(env_entries)
7551
- except ValueError as e:
7552
- error(str(e))
7553
- raise typer.Exit(1) from e
7554
-
7555
7539
  created = create_code_repository(
7556
7540
  code_repository_name=code_repository_name,
7557
7541
  code_repository_type=code_repository_type,
7558
7542
  default_base_image_uid=default_base_image_uid,
7559
7543
  github_org_uid=github_org_uid,
7560
- env_vars=env_vars,
7544
+ bootstrap_organization_environment_uid=(
7545
+ str(bootstrap_organization_environment_uid)
7546
+ if bootstrap_organization_environment_uid is not None
7547
+ else None
7548
+ ),
7561
7549
  )
7562
7550
  except ApiError as e:
7563
7551
  error(f"CodeRepository creation failed: {e}")
@@ -7594,11 +7582,6 @@ def code_repository_create_cmd(
7594
7582
  @code_repository.command("delete")
7595
7583
  def code_repository_delete_remote_cmd(
7596
7584
  code_repository_id: str = typer.Argument(..., help="CodeRepository UID"),
7597
- delete_repositories: bool = typer.Option(
7598
- False,
7599
- "--delete-repositories/--no-delete-repositories",
7600
- help="Also delete linked repositories in the backend workflow.",
7601
- ),
7602
7585
  yes: bool = typer.Option(False, "--yes", "-y", help="Do not prompt for confirmation"),
7603
7586
  ):
7604
7587
  """
@@ -7610,8 +7593,6 @@ def code_repository_delete_remote_cmd(
7610
7593
  ----------
7611
7594
  code_repository_id:
7612
7595
  Platform CodeRepository UID.
7613
- delete_repositories:
7614
- Also delete linked repositories on backend workflow.
7615
7596
  yes:
7616
7597
  Skip interactive confirmation.
7617
7598
 
@@ -7620,7 +7601,6 @@ def code_repository_delete_remote_cmd(
7620
7601
  ```bash
7621
7602
  mainsequence code-repository delete code-repository-uid-123
7622
7603
  mainsequence code-repository delete code-repository-uid-123 --yes
7623
- mainsequence code-repository delete code-repository-uid-123 --delete-repositories --yes
7624
7604
  ```
7625
7605
  """
7626
7606
  _require_login()
@@ -7640,10 +7620,10 @@ def code_repository_delete_remote_cmd(
7640
7620
  warning = (
7641
7621
  f"This will permanently delete CodeRepository '{code_repository_name}' "
7642
7622
  f"(uid={code_repository_uid}) from the platform.\n"
7643
- "This action cannot be undone."
7623
+ "Its branch workspaces and cascading Main Sequence descendants are removed. "
7624
+ "The provider repository and Git branches are preserved.\n"
7625
+ "This platform action cannot be undone."
7644
7626
  )
7645
- if delete_repositories:
7646
- warning += "\nLinked repositories will also be deleted."
7647
7627
  if not typer.confirm(f"{warning}\n\nContinue?", default=False):
7648
7628
  info("Cancelled.")
7649
7629
  raise typer.Exit(0)
@@ -7651,7 +7631,6 @@ def code_repository_delete_remote_cmd(
7651
7631
  try:
7652
7632
  resp = bulk_delete_code_repositories(
7653
7633
  uids=[code_repository_uid],
7654
- delete_repositories=delete_repositories,
7655
7634
  )
7656
7635
  except NotLoggedIn as e:
7657
7636
  error("Not logged in. Run: mainsequence login")
@@ -234,21 +234,6 @@ class CodeRepository(LabelableObjectMixin, ShareableObjectMixin, BasePydanticMod
234
234
 
235
235
  branches: list[CodeRepositoryBranchLight] = Field(default_factory=list)
236
236
 
237
- @staticmethod
238
- def _normalize_env_vars(
239
- env_vars: dict[str, str] | list[dict[str, str]] | None,
240
- ) -> list[dict[str, str]] | None:
241
- """
242
- Serializer expects: [{"name": "...", "value": "..."}, ...]
243
- Allow passing a dict for convenience.
244
- """
245
- if env_vars is None:
246
- return None
247
- if isinstance(env_vars, dict):
248
- return [{"name": k, "value": v} for k, v in env_vars.items()]
249
- # assume already list-of-dicts shape
250
- return env_vars
251
-
252
237
  @staticmethod
253
238
  def _coerce_uid(obj: Any, *, field_name: str) -> str | None:
254
239
  """
@@ -283,7 +268,7 @@ class CodeRepository(LabelableObjectMixin, ShareableObjectMixin, BasePydanticMod
283
268
  code_repository_type: str = "python",
284
269
  default_base_image_uid: str | CodeRepositoryBaseImage | dict[str, Any] | None = None,
285
270
  github_org_uid: str | GitHubOrganization | dict[str, Any] | None = None,
286
- env_vars: dict[str, str] | list[dict[str, str]] | None = None,
271
+ bootstrap_organization_environment_uid: str | UUID | dict[str, Any] | BasePydanticModel | None = None,
287
272
  labels: list[str] | None = None,
288
273
  timeout: int | None = None,
289
274
  ) -> CodeRepository:
@@ -295,7 +280,7 @@ class CodeRepository(LabelableObjectMixin, ShareableObjectMixin, BasePydanticMod
295
280
  - code_repository_type
296
281
  - default_base_image_uid (optional)
297
282
  - github_org_uid (optional)
298
- - env_vars (optional list of {name,value})
283
+ - bootstrap_organization_environment_uid (optional active Environment UID)
299
284
  """
300
285
  url = cls.get_object_url() + "/"
301
286
 
@@ -309,9 +294,12 @@ class CodeRepository(LabelableObjectMixin, ShareableObjectMixin, BasePydanticMod
309
294
  if org_uid is not None:
310
295
  payload["github_org_uid"] = org_uid
311
296
 
312
- env_list = cls._normalize_env_vars(env_vars)
313
- if env_list is not None:
314
- payload["env_vars"] = env_list
297
+ bootstrap_environment_uid = cls._coerce_uid(
298
+ bootstrap_organization_environment_uid,
299
+ field_name="bootstrap_organization_environment_uid",
300
+ )
301
+ if bootstrap_environment_uid is not None:
302
+ payload["bootstrap_organization_environment_uid"] = bootstrap_environment_uid
315
303
  if labels is not None:
316
304
  payload["labels"] = list(labels)
317
305
 
@@ -441,7 +429,6 @@ class CodeRepository(LabelableObjectMixin, ShareableObjectMixin, BasePydanticMod
441
429
  *,
442
430
  uids: list[str] | None = None,
443
431
  selection: dict[str, Any] | None = None,
444
- delete_repositories: bool = False,
445
432
  timeout: int | None = None,
446
433
  ) -> CodeRepositoryBulkDeleteResponse:
447
434
  if (uids is None) == (selection is None):
@@ -455,7 +442,7 @@ class CodeRepository(LabelableObjectMixin, ShareableObjectMixin, BasePydanticMod
455
442
  payload={
456
443
  "json": {
457
444
  "selection": resolved_selection,
458
- "options": {"delete_repositories": delete_repositories},
445
+ "options": {},
459
446
  }
460
447
  },
461
448
  time_out=timeout,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 8.0.4
3
+ Version: 8.0.5
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence"
7
- version = "8.0.4"
7
+ version = "8.0.5"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -5705,7 +5705,7 @@ def test_create_code_repository_does_not_send_code_repository_visible(cli_mod, m
5705
5705
  code_repository_name="demo-repository",
5706
5706
  default_base_image_uid="22222222-2222-4222-8222-222222222222",
5707
5707
  github_org_uid="33333333-3333-4333-8333-333333333333",
5708
- env_vars={"FOO": "bar"},
5708
+ bootstrap_organization_environment_uid="44444444-4444-4444-8444-444444444444",
5709
5709
  )
5710
5710
 
5711
5711
  assert captured["method"] == "POST"
@@ -5715,7 +5715,7 @@ def test_create_code_repository_does_not_send_code_repository_visible(cli_mod, m
5715
5715
  "code_repository_type": "python",
5716
5716
  "default_base_image_uid": "22222222-2222-4222-8222-222222222222",
5717
5717
  "github_org_uid": "33333333-3333-4333-8333-333333333333",
5718
- "env_vars": [{"name": "FOO", "value": "bar"}],
5718
+ "bootstrap_organization_environment_uid": "44444444-4444-4444-8444-444444444444",
5719
5719
  }
5720
5720
  assert "project_visible" not in captured["body"]
5721
5721
  assert out == {"id": 321, "code_repository_name": "demo-repository"}
@@ -9665,8 +9665,7 @@ def test_code_repository_create_interactive_defaults(cli_mod, runner, monkeypatc
9665
9665
  # 1) CodeRepository name
9666
9666
  # 2) Default base image uid
9667
9667
  # 3) GitHub organization uid
9668
- # 4) Environment variables line
9669
- user_input = "demo-repository\n\n\nFOO=bar, BAZ=qux\n"
9668
+ user_input = "demo-repository\n\n\n"
9670
9669
  result = runner.invoke(cli_mod.app, ["code-repository", "create"], input=user_input)
9671
9670
 
9672
9671
  assert result.exit_code == 0
@@ -9674,7 +9673,7 @@ def test_code_repository_create_interactive_defaults(cli_mod, runner, monkeypatc
9674
9673
  assert captured["code_repository_type"] == "python"
9675
9674
  assert captured["default_base_image_uid"] == "22222222-2222-4222-8222-222222222222"
9676
9675
  assert captured["github_org_uid"] == "33333333-3333-4333-8333-333333333333"
9677
- assert captured["env_vars"] == {"FOO": "bar", "BAZ": "qux"}
9676
+ assert captured["bootstrap_organization_environment_uid"] is None
9678
9677
  assert "CodeRepository created: demo-repository (uid=code-repository-uid-321)" in result.output
9679
9678
 
9680
9679
 
@@ -9719,13 +9718,14 @@ def test_code_repository_create_with_explicit_options_returns_logical_code_repos
9719
9718
  "22222222-2222-4222-8222-222222222222",
9720
9719
  "--github-org-uid",
9721
9720
  "33333333-3333-4333-8333-333333333333",
9722
- "--env",
9723
- "FOO=bar",
9721
+ "--environment-uid",
9722
+ "44444444-4444-4444-8444-444444444444",
9724
9723
  ],
9725
9724
  )
9726
9725
 
9727
9726
  assert result.exit_code == 0
9728
9727
  assert "default_metatables_data_source_uid" not in captured
9728
+ assert captured["bootstrap_organization_environment_uid"] == "44444444-4444-4444-8444-444444444444"
9729
9729
  assert "CodeRepository created: demo-repository" in result.output
9730
9730
 
9731
9731
 
@@ -9765,20 +9765,18 @@ def test_code_repository_delete_remote_yes(cli_mod, runner, monkeypatch):
9765
9765
 
9766
9766
  captured = {}
9767
9767
 
9768
- def _bulk_delete_code_repositories(*, uids, delete_repositories=False):
9768
+ def _bulk_delete_code_repositories(*, uids):
9769
9769
  captured["uids"] = uids
9770
- captured["delete_repositories"] = delete_repositories
9771
9770
  return {"detail": "deleted", "deleted_count": 1}
9772
9771
 
9773
9772
  monkeypatch.setattr(cli_mod, "bulk_delete_code_repositories", _bulk_delete_code_repositories)
9774
9773
 
9775
9774
  result = runner.invoke(
9776
9775
  cli_mod.app,
9777
- ["code-repository", "delete", "code-repository-uid-321", "--yes", "--delete-repositories"],
9776
+ ["code-repository", "delete", "code-repository-uid-321", "--yes"],
9778
9777
  )
9779
9778
  assert result.exit_code == 0
9780
9779
  assert captured["uids"] == ["code-repository-uid-321"]
9781
- assert captured["delete_repositories"] is True
9782
9780
  assert "CodeRepository deleted: Demo CodeRepository (uid=code-repository-uid-321; deleted=1)" in result.output
9783
9781
 
9784
9782
 
@@ -167,7 +167,7 @@ def test_code_repository_create_sends_only_canonical_fields(monkeypatch):
167
167
  code_repository_type="python",
168
168
  default_base_image_uid="61111111-1111-4111-8111-111111111111",
169
169
  github_org_uid="41111111-1111-4111-8111-111111111111",
170
- env_vars={"FOO": "bar"},
170
+ bootstrap_organization_environment_uid="71111111-1111-4111-8111-111111111111",
171
171
  labels=["analytics"],
172
172
  )
173
173
 
@@ -178,7 +178,7 @@ def test_code_repository_create_sends_only_canonical_fields(monkeypatch):
178
178
  "code_repository_type": "python",
179
179
  "default_base_image_uid": "61111111-1111-4111-8111-111111111111",
180
180
  "github_org_uid": "41111111-1111-4111-8111-111111111111",
181
- "env_vars": [{"name": "FOO", "value": "bar"}],
181
+ "bootstrap_organization_environment_uid": "71111111-1111-4111-8111-111111111111",
182
182
  "labels": ["analytics"],
183
183
  }
184
184
  }
@@ -207,14 +207,13 @@ def test_code_repository_bulk_delete_uses_selection_and_options(monkeypatch):
207
207
 
208
208
  result = models_foundry.CodeRepository.bulk_delete(
209
209
  uids=[CODE_REPOSITORY_UID],
210
- delete_repositories=True,
211
210
  )
212
211
 
213
212
  assert result.deleted_count == 1
214
213
  assert captured["payload"] == {
215
214
  "json": {
216
215
  "selection": {"mode": "explicit", "uids": [CODE_REPOSITORY_UID]},
217
- "options": {"delete_repositories": True},
216
+ "options": {},
218
217
  }
219
218
  }
220
219
 
File without changes
File without changes
File without changes
File without changes