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.
- {mainsequence-8.0.4/mainsequence.egg-info → mainsequence-8.0.5}/PKG-INFO +1 -1
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/api.py +4 -5
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/cli.py +15 -36
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/models_foundry.py +9 -22
- {mainsequence-8.0.4 → mainsequence-8.0.5/mainsequence.egg-info}/PKG-INFO +1 -1
- {mainsequence-8.0.4 → mainsequence-8.0.5}/pyproject.toml +1 -1
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_cli.py +9 -11
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_branch_contract.py +3 -4
- {mainsequence-8.0.4 → mainsequence-8.0.5}/LICENSE +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/MANIFEST.in +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/README.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_publishing/time_index_table_updates/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/__main__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/bootstrap.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/code_repository_status.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/config.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/migrations.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/cli/ui.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/agent_runtime_models.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/base.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/client.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/dtype_codec.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/metatables/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/metatables/core.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/models_user.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/observability.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/utils.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/code_repository_context.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/code_repository_skills.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/defaults.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/logconf.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/__main__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/future_registry.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/hashing.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/alembic.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/env.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/provider.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/registry.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/schema_names.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_refs.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/__init__.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/configuration.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/dependencies.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/managers.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/namespacing.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/runner.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/updaters.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/utils.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/repository_identity_security.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/scaffold_skills.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/setup.cfg +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/fixtures/time_index_table_update_hash_v2_golden.json +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_auth_precedence.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_canonical_api_route_contract.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_cli_migrations.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_client.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_batch_jobs_from_file.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_documentation_contract.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_runtime_context.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_skills.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_dependency_extras.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_duckdb_interface_dimensions.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_environment_resource_context.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_environment_response_contracts.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_filter_normalization.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_instrumentation.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_local_ops.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_logconf.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_meta_table_migrations.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_meta_tables_client_models.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_notification_uid_contract.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_observability_client.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_pod_project_resolution.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_scaffold_skills.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_scheduler_client_model.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_schema_names.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_secret_client_model.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_source_table_configuration.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_sqlite_interface_dimensions.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_ssh_utils.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_access_dimension_audit.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_dimension_queries.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_configuration.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_configuration_client.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_flow.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_hard_cut.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_update_runner_uid_runtime.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_update_statistics.py +0 -0
- {mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_update_uid_guards.py +0 -0
|
@@ -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
|
-
|
|
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
|
|
5244
|
-
payload["
|
|
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": {
|
|
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
|
-
|
|
7430
|
+
bootstrap_organization_environment_uid: uuid.UUID | None = typer.Option(
|
|
7431
7431
|
None,
|
|
7432
|
-
"--
|
|
7433
|
-
|
|
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
|
-
|
|
7453
|
-
Environment
|
|
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 --
|
|
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
|
-
|
|
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
|
-
"
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
313
|
-
|
|
314
|
-
|
|
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": {
|
|
445
|
+
"options": {},
|
|
459
446
|
}
|
|
460
447
|
},
|
|
461
448
|
time_out=timeout,
|
|
@@ -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
|
-
|
|
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
|
-
"
|
|
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
|
-
|
|
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["
|
|
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
|
-
"--
|
|
9723
|
-
"
|
|
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
|
|
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"
|
|
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
|
-
|
|
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
|
-
"
|
|
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": {
|
|
216
|
+
"options": {},
|
|
218
217
|
}
|
|
219
218
|
}
|
|
220
219
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_access/exploration/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md
RENAMED
|
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
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/__init__.py
RENAMED
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/duckdb.py
RENAMED
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/local_paths.py
RENAMED
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/client/data_sources_interfaces/sqlite.py
RENAMED
|
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
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/templates/__init__.py
RENAMED
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/migrations/templates/env.py.mako
RENAMED
|
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
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/mainsequence/meta_tables/time_index_table_updates/utils.py
RENAMED
|
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
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/tests/fixtures/time_index_table_update_hash_v2_golden.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_batch_jobs_from_file.py
RENAMED
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_code_repository_documentation_contract.py
RENAMED
|
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
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_access_dimension_audit.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_configuration.py
RENAMED
|
File without changes
|
{mainsequence-8.0.4 → mainsequence-8.0.5}/tests/test_time_index_table_update_configuration_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|