mainsequence 6.0.42__tar.gz → 6.0.44__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 (129) hide show
  1. {mainsequence-6.0.42/mainsequence.egg-info → mainsequence-6.0.44}/PKG-INFO +1 -1
  2. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/models_helpers.py +17 -0
  3. {mainsequence-6.0.42 → mainsequence-6.0.44/mainsequence.egg-info}/PKG-INFO +1 -1
  4. {mainsequence-6.0.42 → mainsequence-6.0.44}/pyproject.toml +1 -1
  5. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_cli.py +9 -0
  6. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_filter_normalization.py +52 -0
  7. {mainsequence-6.0.42 → mainsequence-6.0.44}/LICENSE +0 -0
  8. {mainsequence-6.0.42 → mainsequence-6.0.44}/README.md +0 -0
  9. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/AGENTS.md +0 -0
  10. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  11. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  12. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  13. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
  14. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  15. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  16. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  17. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/maintenance/project-maintenance/SKILL.md +0 -0
  18. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  19. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  20. {mainsequence-6.0.42 → mainsequence-6.0.44}/agent_scaffold/skills/sdk_project_execution/SKILL.md +0 -0
  21. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/__init__.py +0 -0
  22. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/__main__.py +0 -0
  23. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/bootstrap.py +0 -0
  24. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/__init__.py +0 -0
  25. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/api.py +0 -0
  26. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/browser_auth.py +0 -0
  27. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/cli.py +0 -0
  28. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/config.py +0 -0
  29. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/docker_utils.py +0 -0
  30. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/doctor.py +0 -0
  31. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/local_ops.py +0 -0
  32. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/migrations.py +0 -0
  33. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/model_filters.py +0 -0
  34. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/project_status.py +0 -0
  35. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/pydantic_cli.py +0 -0
  36. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/sdk_utils.py +0 -0
  37. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/ssh_utils.py +0 -0
  38. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/cli/ui.py +0 -0
  39. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/__init__.py +0 -0
  40. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/agent_runtime_models.py +0 -0
  41. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/base.py +0 -0
  42. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/client.py +0 -0
  43. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/compute_validation.py +0 -0
  44. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  45. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  46. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  47. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  48. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/dtype_codec.py +0 -0
  49. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/exceptions.py +0 -0
  50. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/metatables/__init__.py +0 -0
  51. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/metatables/core.py +0 -0
  52. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/models_foundry.py +0 -0
  53. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/models_user.py +0 -0
  54. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/client/utils.py +0 -0
  55. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/defaults.py +0 -0
  56. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/instrumentation/__init__.py +0 -0
  57. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/instrumentation/utils.py +0 -0
  58. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/logconf.py +0 -0
  59. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/__init__.py +0 -0
  60. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/__main__.py +0 -0
  61. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  62. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  63. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
  64. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
  65. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
  66. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/data_nodes/models.py +0 -0
  67. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
  68. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
  69. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
  70. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
  71. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/future_registry.py +0 -0
  72. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/hashing.py +0 -0
  73. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/migrations/__init__.py +0 -0
  74. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  75. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/migrations/env.py +0 -0
  76. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/migrations/provider.py +0 -0
  77. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/migrations/registry.py +0 -0
  78. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  79. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  80. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  81. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  82. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  83. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/schema_names.py +0 -0
  84. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  85. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/project_context.py +0 -0
  86. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/project_skills.py +0 -0
  87. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/runtime_flags.py +0 -0
  88. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence/scaffold_skills.py +0 -0
  89. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence.egg-info/SOURCES.txt +0 -0
  90. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence.egg-info/dependency_links.txt +0 -0
  91. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence.egg-info/entry_points.txt +0 -0
  92. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence.egg-info/requires.txt +0 -0
  93. {mainsequence-6.0.42 → mainsequence-6.0.44}/mainsequence.egg-info/top_level.txt +0 -0
  94. {mainsequence-6.0.42 → mainsequence-6.0.44}/setup.cfg +0 -0
  95. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_auth_precedence.py +0 -0
  96. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_build_operations_hashing.py +0 -0
  97. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_canonical_api_route_contract.py +0 -0
  98. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_cli_browser_auth.py +0 -0
  99. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_cli_migrations.py +0 -0
  100. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_client.py +0 -0
  101. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_data_access_mixin_dimension_audit.py +0 -0
  102. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_data_node_storage_dimension_queries.py +0 -0
  103. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_data_node_update_flow.py +0 -0
  104. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_dependency_extras.py +0 -0
  105. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_duckdb_interface_dimensions.py +0 -0
  106. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_environment_resource_context.py +0 -0
  107. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_instrumentation.py +0 -0
  108. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_local_ops.py +0 -0
  109. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_logconf.py +0 -0
  110. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_meta_table_migrations.py +0 -0
  111. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_meta_tables_client_models.py +0 -0
  112. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
  113. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_models_user_request_bound_auth.py +0 -0
  114. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_notification_uid_contract.py +0 -0
  115. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_pod_project_resolution.py +0 -0
  116. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_project_batch_jobs_from_file.py +0 -0
  117. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_project_branch_contract.py +0 -0
  118. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_project_runtime_context.py +0 -0
  119. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_project_skills.py +0 -0
  120. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_run_configuration.py +0 -0
  121. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_scaffold_skills.py +0 -0
  122. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_schema_names.py +0 -0
  123. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_secret_client_model.py +0 -0
  124. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_source_table_configuration.py +0 -0
  125. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_sqlite_interface_dimensions.py +0 -0
  126. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_ssh_utils.py +0 -0
  127. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_update_runner_uid_runtime.py +0 -0
  128. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_update_statistics.py +0 -0
  129. {mainsequence-6.0.42 → mainsequence-6.0.44}/tests/test_update_uid_guards.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 6.0.42
3
+ Version: 6.0.44
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -760,6 +760,14 @@ class JobRun(BaseObjectOrm, BasePydanticModel):
760
760
  description="Read-only repository branch name associated with the run, or null for an unscoped run.",
761
761
  examples=["main"],
762
762
  )
763
+ organization_project_environment_uid: str = Field(
764
+ ...,
765
+ description=(
766
+ "Read-only public UID of the Organization Environment resolved from the "
767
+ "JobRun's owning project branch."
768
+ ),
769
+ examples=["58218213-5e4e-43de-a5bd-6757f4e1c8f6"],
770
+ )
763
771
 
764
772
  execution_start: datetime.datetime | None = Field(
765
773
  default=None,
@@ -1184,6 +1192,15 @@ class ResourceRelease(
1184
1192
  "The revision is returned by the API and is not part of create requests."
1185
1193
  ),
1186
1194
  )
1195
+ cors_allowed_origins: list[str] | None = Field(
1196
+ default=None,
1197
+ title="CORS Allowed Origins",
1198
+ description=(
1199
+ "Browser origins allowed to call a FastAPI release. The backend omits "
1200
+ "this field for other release kinds."
1201
+ ),
1202
+ examples=[["https://app.example.com", "https://*.site-dev.main-sequence.app"]],
1203
+ )
1187
1204
 
1188
1205
  @classmethod
1189
1206
  def create(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 6.0.42
3
+ Version: 6.0.44
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 = "6.0.42"
7
+ version = "6.0.44"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -5803,6 +5803,9 @@ def test_get_project_job_run_logs_uses_client_model(cli_mod, monkeypatch):
5803
5803
  "project_name": "market-data-service",
5804
5804
  "project_branch_uid": "5a28020a-0f1b-47ee-aab8-334286234bea",
5805
5805
  "project_branch_name": "main",
5806
+ "organization_project_environment_uid": (
5807
+ "58218213-5e4e-43de-a5bd-6757f4e1c8f6"
5808
+ ),
5806
5809
  "status": "RUNNING",
5807
5810
  "runtime_image_uid": "6cfdb152-923e-45b9-a150-c4541c68b0d1",
5808
5811
  "runtime_image_digest": "sha256:" + "b" * 64,
@@ -5811,6 +5814,9 @@ def test_get_project_job_run_logs_uses_client_model(cli_mod, monkeypatch):
5811
5814
 
5812
5815
  def get_logs(self, *, timeout=None):
5813
5816
  captured["get_logs_timeout"] = timeout
5817
+ captured["organization_project_environment_uid"] = (
5818
+ self.organization_project_environment_uid
5819
+ )
5814
5820
  return {
5815
5821
  "job_run_uid": self.uid,
5816
5822
  "status": self.status,
@@ -5829,6 +5835,9 @@ def test_get_project_job_run_logs_uses_client_model(cli_mod, monkeypatch):
5829
5835
  out = api_mod.get_project_job_run_logs("4c1d77c8-8a42-42b8-a9c1-06be9a336e5d")
5830
5836
  assert captured["job_run_uid_arg"] == "4c1d77c8-8a42-42b8-a9c1-06be9a336e5d"
5831
5837
  assert captured["get_logs_timeout"] is None
5838
+ assert captured["organization_project_environment_uid"] == (
5839
+ "58218213-5e4e-43de-a5bd-6757f4e1c8f6"
5840
+ )
5832
5841
  assert captured["jwt"] == ("acc", "ref")
5833
5842
  assert out == {
5834
5843
  "job_run_uid": "4c1d77c8-8a42-42b8-a9c1-06be9a336e5d",
@@ -180,6 +180,7 @@ def test_job_run_status_uses_status_detail_endpoint(monkeypatch):
180
180
  project_name=None,
181
181
  project_branch_uid=None,
182
182
  project_branch_name=None,
183
+ organization_project_environment_uid=ENVIRONMENT_UID,
183
184
  runtime_image_uid="6cfdb152-923e-45b9-a150-c4541c68b0d1",
184
185
  runtime_image_digest="sha256:" + "b" * 64,
185
186
  )
@@ -271,6 +272,7 @@ def test_job_run_deserializes_uid_payload_without_id():
271
272
  project_name="market-data-service",
272
273
  project_branch_uid="5a28020a-0f1b-47ee-aab8-334286234bea",
273
274
  project_branch_name="main",
275
+ organization_project_environment_uid=ENVIRONMENT_UID,
274
276
  status="RUNNING",
275
277
  cpu_request="1",
276
278
  cpu_limit="2",
@@ -286,6 +288,7 @@ def test_job_run_deserializes_uid_payload_without_id():
286
288
  dumped = job_run.model_dump()
287
289
  assert dumped["uid"] == "4c1d77c8-8a42-42b8-a9c1-06be9a336e5d"
288
290
  assert dumped["job_uid"] == "ab6a5d50-8a3e-4f0d-a9bb-7e84180bd50e"
291
+ assert dumped["organization_project_environment_uid"] == ENVIRONMENT_UID
289
292
  assert "id" not in dumped
290
293
 
291
294
 
@@ -2464,6 +2467,7 @@ def test_job_run_requires_immutable_runtime_image_snapshot():
2464
2467
  "project_name": "market-data-service",
2465
2468
  "project_branch_uid": "5a28020a-0f1b-47ee-aab8-334286234bea",
2466
2469
  "project_branch_name": "main",
2470
+ "organization_project_environment_uid": ENVIRONMENT_UID,
2467
2471
  "commit_hash": "a" * 40,
2468
2472
  "runtime_image_uid": "6cfdb152-923e-45b9-a150-c4541c68b0d1",
2469
2473
  "runtime_image_digest": "sha256:" + "b" * 64,
@@ -2477,6 +2481,7 @@ def test_job_run_requires_immutable_runtime_image_snapshot():
2477
2481
  assert run.project_name == payload["project_name"]
2478
2482
  assert run.project_branch_uid == payload["project_branch_uid"]
2479
2483
  assert run.project_branch_name == payload["project_branch_name"]
2484
+ assert run.organization_project_environment_uid == ENVIRONMENT_UID
2480
2485
 
2481
2486
  missing_project_context = dict(payload)
2482
2487
  missing_project_context.pop("project_uid")
@@ -2492,6 +2497,7 @@ def test_job_run_requires_immutable_runtime_image_snapshot():
2492
2497
  "project_name": None,
2493
2498
  "project_branch_uid": None,
2494
2499
  "project_branch_name": None,
2500
+ "organization_project_environment_uid": ENVIRONMENT_UID,
2495
2501
  "runtime_image_digest": "sha256:" + "b" * 64,
2496
2502
  }
2497
2503
  )
@@ -2668,6 +2674,52 @@ def test_project_resource_accepts_canonical_backend_resource_types(resource_type
2668
2674
  assert resource.resource_type == resource_type
2669
2675
 
2670
2676
 
2677
+ def test_resource_release_get_accepts_fastapi_cors_allowed_origins(monkeypatch):
2678
+ captured = {}
2679
+ release_uid = "2f4c4c3d-5669-4da5-9d86-b84633c1e6ed"
2680
+ response_payload = {
2681
+ "uid": release_uid,
2682
+ "resource_uid": "857bec7b-dd77-4272-aecd-13fc2138eacc",
2683
+ "readme_resource_uid": None,
2684
+ "related_job_uid": "7d0ab07c-d1c0-4b7f-9c69-3c1a41c0a4da",
2685
+ "release_kind": "fastapi",
2686
+ "automatic_deployment": True,
2687
+ "automatic_redeployment_policy": None,
2688
+ "cors_allowed_origins": [
2689
+ "https://app.example.com",
2690
+ "https://*.site-dev.main-sequence.app",
2691
+ ],
2692
+ }
2693
+
2694
+ class FakeResponse:
2695
+ status_code = 200
2696
+
2697
+ @staticmethod
2698
+ def json():
2699
+ return dict(response_payload)
2700
+
2701
+ def _fake_make_request(*, s, loaders, r_type, url, payload, time_out=None):
2702
+ captured.update(
2703
+ {
2704
+ "r_type": r_type,
2705
+ "url": url,
2706
+ "payload": payload,
2707
+ "timeout": time_out,
2708
+ }
2709
+ )
2710
+ return FakeResponse()
2711
+
2712
+ monkeypatch.setattr(base_mod, "make_request", _fake_make_request)
2713
+
2714
+ release = models_helpers_mod.ResourceRelease.get(pk=release_uid, timeout=13)
2715
+
2716
+ assert release.release_kind == models_helpers_mod.ResourceReleaseKind.FAST_API
2717
+ assert release.cors_allowed_origins == response_payload["cors_allowed_origins"]
2718
+ assert captured["r_type"] == "GET"
2719
+ assert captured["url"].endswith(f"/resource-releases/{release_uid}/")
2720
+ assert captured["timeout"] == 13
2721
+
2722
+
2671
2723
  def _resource_release_pipeline_payload(*, running_step: str | None = None):
2672
2724
  keys = (
2673
2725
  "resolve_revision",
File without changes
File without changes
File without changes