mainsequence 4.2.14__tar.gz → 4.2.25__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 (128) hide show
  1. {mainsequence-4.2.14/mainsequence.egg-info → mainsequence-4.2.25}/PKG-INFO +2 -2
  2. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +7 -4
  3. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +12 -5
  4. mainsequence-4.2.25/mainsequence/cli/migrations.py +866 -0
  5. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/metatables/core.py +348 -4
  6. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/migrations.py +584 -205
  7. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/sqlalchemy_contracts.py +27 -183
  8. {mainsequence-4.2.14 → mainsequence-4.2.25/mainsequence.egg-info}/PKG-INFO +2 -2
  9. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence.egg-info/requires.txt +1 -1
  10. {mainsequence-4.2.14 → mainsequence-4.2.25}/pyproject.toml +2 -2
  11. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_cli_migrations.py +186 -40
  12. mainsequence-4.2.25/tests/test_meta_table_migrations.py +1206 -0
  13. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_meta_tables_client_models.py +216 -0
  14. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_meta_tables_sqlalchemy_contracts.py +60 -49
  15. mainsequence-4.2.14/mainsequence/cli/migrations.py +0 -514
  16. mainsequence-4.2.14/tests/test_meta_table_migrations.py +0 -647
  17. {mainsequence-4.2.14 → mainsequence-4.2.25}/LICENSE +0 -0
  18. {mainsequence-4.2.14 → mainsequence-4.2.25}/README.md +0 -0
  19. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/AGENTS.md +0 -0
  20. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/a2a_communication/SKILL.md +0 -0
  21. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  22. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
  23. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
  24. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
  25. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
  26. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
  27. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
  28. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
  29. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
  30. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  31. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  32. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
  33. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  34. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  35. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
  36. {mainsequence-4.2.14 → mainsequence-4.2.25}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
  37. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/__init__.py +0 -0
  38. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/__main__.py +0 -0
  39. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/bootstrap.py +0 -0
  40. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/__init__.py +0 -0
  41. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/api.py +0 -0
  42. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/browser_auth.py +0 -0
  43. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/cli.py +0 -0
  44. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/config.py +0 -0
  45. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/docker_utils.py +0 -0
  46. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/doctor.py +0 -0
  47. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/local_ops.py +0 -0
  48. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/model_filters.py +0 -0
  49. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/project_status.py +0 -0
  50. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/pydantic_cli.py +0 -0
  51. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/sdk_utils.py +0 -0
  52. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/ssh_utils.py +0 -0
  53. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/cli/ui.py +0 -0
  54. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/__init__.py +0 -0
  55. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/agent_runtime_models.py +0 -0
  56. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/base.py +0 -0
  57. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/client.py +0 -0
  58. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/command_center/__init__.py +0 -0
  59. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/command_center/app_component.py +0 -0
  60. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/command_center/connections.py +0 -0
  61. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/command_center/data_models.py +0 -0
  62. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/command_center/workspace.py +0 -0
  63. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
  64. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/compute_validation.py +0 -0
  65. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  66. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  67. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  68. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  69. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/dtype_codec.py +0 -0
  70. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/exceptions.py +0 -0
  71. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/fastapi/__init__.py +0 -0
  72. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/fastapi/auth.py +0 -0
  73. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/metatables/__init__.py +0 -0
  74. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/models_foundry.py +0 -0
  75. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/models_helpers.py +0 -0
  76. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/models_user.py +0 -0
  77. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/client/utils.py +0 -0
  78. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/defaults.py +0 -0
  79. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/instrumentation/__init__.py +0 -0
  80. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/instrumentation/utils.py +0 -0
  81. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/logconf.py +0 -0
  82. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/__init__.py +0 -0
  83. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/__main__.py +0 -0
  84. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  85. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  86. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
  87. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
  88. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
  89. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/data_nodes/models.py +0 -0
  90. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
  91. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
  92. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
  93. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
  94. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/future_registry.py +0 -0
  95. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/hashing.py +0 -0
  96. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  97. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence/runtime_flags.py +0 -0
  98. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence.egg-info/SOURCES.txt +0 -0
  99. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence.egg-info/dependency_links.txt +0 -0
  100. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence.egg-info/entry_points.txt +0 -0
  101. {mainsequence-4.2.14 → mainsequence-4.2.25}/mainsequence.egg-info/top_level.txt +0 -0
  102. {mainsequence-4.2.14 → mainsequence-4.2.25}/setup.cfg +0 -0
  103. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_auth_precedence.py +0 -0
  104. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_build_operations_hashing.py +0 -0
  105. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_cli.py +0 -0
  106. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_cli_browser_auth.py +0 -0
  107. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_client.py +0 -0
  108. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_command_center_app_component_models.py +0 -0
  109. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_command_center_data_models.py +0 -0
  110. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_command_center_models.py +0 -0
  111. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_data_access_mixin_dimension_audit.py +0 -0
  112. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_data_node_storage_dimension_queries.py +0 -0
  113. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_data_node_update_flow.py +0 -0
  114. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_dependency_extras.py +0 -0
  115. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_duckdb_interface_dimensions.py +0 -0
  116. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_filter_normalization.py +0 -0
  117. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_logconf.py +0 -0
  118. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_models_user_request_bound_auth.py +0 -0
  119. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_pod_project_resolution.py +0 -0
  120. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_project_batch_jobs_from_file.py +0 -0
  121. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_run_configuration.py +0 -0
  122. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_secret_client_model.py +0 -0
  123. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_source_table_configuration.py +0 -0
  124. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_sqlite_interface_dimensions.py +0 -0
  125. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_update_runner_uid_runtime.py +0 -0
  126. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_update_statistics.py +0 -0
  127. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_update_uid_guards.py +0 -0
  128. {mainsequence-4.2.14 → mainsequence-4.2.25}/tests/test_workspace_snapshot.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 4.2.14
3
+ Version: 4.2.25
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License: MainSequence GmbH SDK License Agreement
@@ -68,7 +68,7 @@ Requires-Dist: pydantic
68
68
  Requires-Dist: pytz
69
69
  Requires-Dist: pyyaml
70
70
  Requires-Dist: requests
71
- Requires-Dist: sqlalchemy
71
+ Requires-Dist: sqlalchemy<3,>=2
72
72
  Requires-Dist: structlog
73
73
  Requires-Dist: tqdm
74
74
  Requires-Dist: typer
@@ -148,7 +148,7 @@ class Base(DeclarativeBase):
148
148
 
149
149
  class PricesTable(PlatformTimeIndexMetaData, Base):
150
150
  __metatable_namespace__ = "<domain_namespace>"
151
- __metatable_identifier__ = "<table_identifier>"
151
+ __metatable_identifier__ = "<project_name>.<table_identifier>"
152
152
  __metatable_extra_hash_components__ = {"storage_name": "<stable_storage_name>"}
153
153
  __metatable_description__ = (
154
154
  "Daily close prices keyed by asset unique identifier for portfolio and "
@@ -387,9 +387,9 @@ DataNode storage table needs a platform-managed FK, use
387
387
  `ForeignKey(Target.__table__.c.uid)`, table fullnames, or explicit target UID
388
388
  maps in DataNode examples.
389
389
 
390
- Do not ask users to name these foreign keys. `MetaTableForeignKey(...)` derives
391
- a stable contract name when `name` is omitted; `name=...` is only for deliberate
392
- overrides.
390
+ Do not ask users to name these foreign keys. Platform-managed
391
+ `MetaTableForeignKey(...)` contracts store logical relationships only. Alembic,
392
+ SQLAlchemy, and the database own physical FK constraint names.
393
393
 
394
394
  Registration of the storage class follows the MetaTable migration lifecycle.
395
395
  Migration tooling recursively resolves/registers unresolved FK target model
@@ -402,6 +402,9 @@ Do not add DataNode configuration fields just to mutate storage metadata.
402
402
 
403
403
  Production-quality table identifiers, descriptions, labels, column docs, and
404
404
  foreign-key metadata belong to the storage class/MetaTable registration path.
405
+ Prefix explicit table identifiers, explicit physical table names, and Alembic
406
+ version table names with the project or package name rather than using bare
407
+ names that can collide across projects.
405
408
 
406
409
  Do not put schema or published table metadata on the DataNode configuration.
407
410
 
@@ -152,12 +152,17 @@ table. Do not use it for labels, descriptions, runtime options, test isolation,
152
152
  backend UIDs, data-source UIDs, or updater scope. Use `hash_namespace` for test
153
153
  or experiment isolation.
154
154
 
155
+ Prefix explicit table identifiers, explicit physical table names, and Alembic
156
+ version table names with the project or package name. Bare names such as
157
+ `Account`, `Asset`, or `alembic_version` can collide across projects sharing an
158
+ organization or database schema.
159
+
155
160
  Register through the class API:
156
161
 
157
162
  ```python
158
163
  class Account(PlatformManagedMetaTable, Base):
159
164
  __metatable_namespace__ = "sdk-examples"
160
- __metatable_identifier__ = "Account"
165
+ __metatable_identifier__ = "sdk_examples.Account"
161
166
  __metatable_extra_hash_components__ = {"storage_name": "account"}
162
167
  __metatable_description__ = (
163
168
  "Customer account master records used to scope balances, holdings, and "
@@ -222,10 +227,9 @@ tooling resolves/registers unresolved target model classes, stores each
222
227
  returned `MetaTable` in a local process registry keyed by `storage_hash`, and
223
228
  uses the target `MetaTable.uid` in the child FK contract.
224
229
 
225
- Do not require users to provide foreign-key names. `MetaTableForeignKey(...)`
226
- accepts `name=...` only as an override; when omitted, the SDK derives a stable
227
- PostgreSQL-safe contract name from the child table and source column after the
228
- column is attached to the SQLAlchemy table.
230
+ Do not require users to provide foreign-key names. Platform-managed
231
+ `MetaTableForeignKey(...)` contracts store logical relationships only. Alembic,
232
+ SQLAlchemy, and the database own physical FK constraint names.
229
233
 
230
234
  Use this pattern:
231
235
 
@@ -300,6 +304,9 @@ global identity. If it does not, the SDK derives the identifier from
300
304
  `[project].name` in `pyproject.toml` plus
301
305
  `<model.__module__>.<model.__qualname__>`. Pin an explicit identifier when a
302
306
  class is renamed or moved but must keep the same platform identity.
307
+ When declaring an explicit identifier, explicit physical table name, or Alembic
308
+ version table name, prefix it with the project or package name rather than using
309
+ a bare table name.
303
310
 
304
311
  Do not ask users to construct backend migration payloads, call low-level
305
312
  migration request models, or use SDK helper functions directly. The backend