mainsequence 3.18.7__tar.gz → 3.18.9__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 (179) hide show
  1. {mainsequence-3.18.7 → mainsequence-3.18.9}/PKG-INFO +1 -1
  2. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/cli.py +41 -0
  3. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/logconf.py +17 -1
  4. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence.egg-info/PKG-INFO +1 -1
  5. {mainsequence-3.18.7 → mainsequence-3.18.9}/pyproject.toml +1 -1
  6. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_cli.py +33 -0
  7. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_logconf.py +14 -0
  8. {mainsequence-3.18.7 → mainsequence-3.18.9}/LICENSE +0 -0
  9. {mainsequence-3.18.7 → mainsequence-3.18.9}/README.md +0 -0
  10. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/AGENTS.md +0 -0
  11. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  12. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
  13. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
  14. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
  15. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
  16. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
  17. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  18. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
  19. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/data_publishing/simple_tables/SKILL.md +0 -0
  20. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  21. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/maintenance/local_journal/SKILL.md +0 -0
  22. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/markets_platform/assets_and_translation/SKILL.md +0 -0
  23. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/markets_platform/instruments_and_pricing/SKILL.md +0 -0
  24. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/markets_platform/virtualfundbuilder/SKILL.md +0 -0
  25. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  26. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  27. {mainsequence-3.18.7 → mainsequence-3.18.9}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
  28. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/__init__.py +0 -0
  29. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/__main__.py +0 -0
  30. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/bootstrap.py +0 -0
  31. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/__init__.py +0 -0
  32. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/api.py +0 -0
  33. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/browser_auth.py +0 -0
  34. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/config.py +0 -0
  35. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/docker_utils.py +0 -0
  36. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/doctor.py +0 -0
  37. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/local_ops.py +0 -0
  38. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/model_filters.py +0 -0
  39. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/project_status.py +0 -0
  40. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/pydantic_cli.py +0 -0
  41. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/sdk_utils.py +0 -0
  42. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/ssh_utils.py +0 -0
  43. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/cli/ui.py +0 -0
  44. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/__init__.py +0 -0
  45. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/agent.py +0 -0
  46. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/agent_runtime_models.py +0 -0
  47. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/base.py +0 -0
  48. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/client.py +0 -0
  49. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/command_center/__init__.py +0 -0
  50. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/command_center/app_component.py +0 -0
  51. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/command_center/data_models.py +0 -0
  52. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/command_center/workspace.py +0 -0
  53. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
  54. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  55. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  56. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/data_sources_interfaces/timescale.py +0 -0
  57. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/exceptions.py +0 -0
  58. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/fastapi/__init__.py +0 -0
  59. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/fastapi/auth.py +0 -0
  60. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/models_helpers.py +0 -0
  61. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/models_simple_tables.py +0 -0
  62. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/models_tdag.py +0 -0
  63. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/models_user.py +0 -0
  64. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/models_vam.py +0 -0
  65. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/client/utils.py +0 -0
  66. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/compute_validation.py +0 -0
  67. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/__init__.py +0 -0
  68. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/__init__.py +0 -0
  69. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/assets/config.toml +0 -0
  70. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/assets/favicon.png +0 -0
  71. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/assets/image_1_base64.txt +0 -0
  72. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/assets/image_2_base64.txt +0 -0
  73. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/assets/image_3_base64.txt +0 -0
  74. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/assets/image_4_base64.txt +0 -0
  75. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/assets/image_5_base64.txt +0 -0
  76. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/assets/logo.png +0 -0
  77. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/components/__init__.py +0 -0
  78. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/components/asset_select.py +0 -0
  79. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/components/date_settings.py +0 -0
  80. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/components/logged_user.py +0 -0
  81. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/core/__init__.py +0 -0
  82. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/core/theme.py +0 -0
  83. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/instruments/__init__.py +0 -0
  84. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/instruments/streamlit_form_factory.py +0 -0
  85. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/pages/__init__.py +0 -0
  86. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/dashboards/streamlit/scaffold.py +0 -0
  87. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/defaults.py +0 -0
  88. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instrumentation/__init__.py +0 -0
  89. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instrumentation/utils.py +0 -0
  90. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/__init__.py +0 -0
  91. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/data_interface/__init__.py +0 -0
  92. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/data_interface/data_interface.py +0 -0
  93. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/instruments/__init__.py +0 -0
  94. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/instruments/base_instrument.py +0 -0
  95. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/instruments/bond.py +0 -0
  96. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/instruments/callability.py +0 -0
  97. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/instruments/interest_rate_swap.py +0 -0
  98. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/instruments/json_codec.py +0 -0
  99. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/instruments/position.py +0 -0
  100. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/instruments/ql_fields.py +0 -0
  101. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/interest_rates/__init__.py +0 -0
  102. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/interest_rates/etl/__init__.py +0 -0
  103. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/interest_rates/etl/curve_codec.py +0 -0
  104. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/interest_rates/etl/nodes.py +0 -0
  105. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/interest_rates/etl/registry.py +0 -0
  106. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/pricing_models/__init__.py +0 -0
  107. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/pricing_models/bond_pricer.py +0 -0
  108. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/pricing_models/indices.py +0 -0
  109. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/pricing_models/indices_builders.py +0 -0
  110. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/pricing_models/swap_pricer.py +0 -0
  111. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/settings.py +0 -0
  112. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/instruments/utils.py +0 -0
  113. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/runtime_flags.py +0 -0
  114. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/__init__.py +0 -0
  115. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/__main__.py +0 -0
  116. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/base_persist_managers.py +0 -0
  117. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/config.py +0 -0
  118. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/configuration_models.py +0 -0
  119. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/data_nodes/__init__.py +0 -0
  120. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/data_nodes/build_operations.py +0 -0
  121. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/data_nodes/data_nodes.py +0 -0
  122. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/data_nodes/filters.py +0 -0
  123. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/data_nodes/models.py +0 -0
  124. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/data_nodes/namespacing.py +0 -0
  125. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/data_nodes/persist_managers.py +0 -0
  126. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/data_nodes/run_operations.py +0 -0
  127. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/data_nodes/utils.py +0 -0
  128. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/filters.py +0 -0
  129. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/future_registry.py +0 -0
  130. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/pydantic_metadata.py +0 -0
  131. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/simple_tables/__init__.py +0 -0
  132. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/simple_tables/filters.py +0 -0
  133. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/simple_tables/models.py +0 -0
  134. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/simple_tables/persist_managers.py +0 -0
  135. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/simple_tables/schema.py +0 -0
  136. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/simple_tables/table_nodes.py +0 -0
  137. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/tdag/utils.py +0 -0
  138. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/__init__.py +0 -0
  139. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/__init__.py +0 -0
  140. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/data_nodes/__init__.py +0 -0
  141. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/data_nodes/external_weights.py +0 -0
  142. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/data_nodes/intraday_trend.py +0 -0
  143. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/data_nodes/market_cap.py +0 -0
  144. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/data_nodes/mock_signal.py +0 -0
  145. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/data_nodes/portfolio_replicator.py +0 -0
  146. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/prices/__init__.py +0 -0
  147. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/prices/data_nodes.py +0 -0
  148. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/prices/utils.py +0 -0
  149. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/rebalance_strategies/__init__.py +0 -0
  150. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/contrib/rebalance_strategies/rebalance_strategies.py +0 -0
  151. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/enums.py +0 -0
  152. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/models.py +0 -0
  153. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/portfolio_nodes.py +0 -0
  154. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/resource_factory/__init__.py +0 -0
  155. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/resource_factory/rebalance_factory.py +0 -0
  156. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/resource_factory/signal_factory.py +0 -0
  157. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence/virtualfundbuilder/utils.py +0 -0
  158. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence.egg-info/SOURCES.txt +0 -0
  159. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence.egg-info/dependency_links.txt +0 -0
  160. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence.egg-info/entry_points.txt +0 -0
  161. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence.egg-info/requires.txt +0 -0
  162. {mainsequence-3.18.7 → mainsequence-3.18.9}/mainsequence.egg-info/top_level.txt +0 -0
  163. {mainsequence-3.18.7 → mainsequence-3.18.9}/setup.cfg +0 -0
  164. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_auth_precedence.py +0 -0
  165. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_build_operations_hashing.py +0 -0
  166. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_cli_browser_auth.py +0 -0
  167. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_client.py +0 -0
  168. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_command_center_app_component_models.py +0 -0
  169. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_command_center_models.py +0 -0
  170. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_dependency_extras.py +0 -0
  171. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_filter_normalization.py +0 -0
  172. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_instruments.py +0 -0
  173. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_logged_user_components.py +0 -0
  174. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_models_user_request_bound_auth.py +0 -0
  175. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_pod_project_resolution.py +0 -0
  176. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_project_batch_jobs_from_file.py +0 -0
  177. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_run_configuration.py +0 -0
  178. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_simple_tables_configuration_hashing.py +0 -0
  179. {mainsequence-3.18.7 → mainsequence-3.18.9}/tests/test_simple_tables_persistence.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 3.18.7
3
+ Version: 3.18.9
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
@@ -2417,6 +2417,47 @@ def organization_project_names_alias_cmd(
2417
2417
  organization_project_names_cmd(timeout=timeout)
2418
2418
 
2419
2419
 
2420
+ @organization.command("github-organizations")
2421
+ def organization_github_organizations_cmd():
2422
+ """
2423
+ List GitHub organizations available to the authenticated user.
2424
+
2425
+ Examples
2426
+ --------
2427
+ ```bash
2428
+ mainsequence organization github-organizations
2429
+ mainsequence organization github-organizations --json
2430
+ ```
2431
+ """
2432
+ _require_login()
2433
+
2434
+ try:
2435
+ organizations = list_github_organizations()
2436
+ except ApiError as e:
2437
+ error(f"GitHub organizations fetch failed: {e}")
2438
+ raise typer.Exit(1) from e
2439
+
2440
+ if _emit_json(organizations):
2441
+ return
2442
+
2443
+ if organizations:
2444
+ print_table(
2445
+ "GitHub Organizations",
2446
+ ["ID", "Name", "Login"],
2447
+ [
2448
+ [
2449
+ str(org.get("id") or "-"),
2450
+ str(org.get("name") or "-"),
2451
+ str(org.get("login") or org.get("slug") or "-"),
2452
+ ]
2453
+ for org in organizations
2454
+ ],
2455
+ )
2456
+ else:
2457
+ info("No GitHub organizations available.")
2458
+ info(f"Total GitHub organizations: {len(organizations)}")
2459
+
2460
+
2420
2461
  def _organization_teams_list_impl(
2421
2462
  *,
2422
2463
  timeout: int | None,
@@ -7,6 +7,8 @@ import os
7
7
  import sys
8
8
  import traceback
9
9
  from collections.abc import Mapping
10
+ from importlib.metadata import PackageNotFoundError
11
+ from importlib.metadata import version as package_version
10
12
  from pathlib import Path
11
13
  from typing import Any
12
14
 
@@ -24,6 +26,16 @@ from .runtime_flags import is_running_in_pod
24
26
  logger = None
25
27
 
26
28
 
29
+ def _get_sdk_version() -> str:
30
+ """Return the installed SDK package version for automatic log binding."""
31
+ try:
32
+ return package_version("mainsequence")
33
+ except PackageNotFoundError:
34
+ return "unknown"
35
+ except Exception:
36
+ return "unknown"
37
+
38
+
27
39
  def ensure_dir(file_path):
28
40
  directory = os.path.dirname(file_path)
29
41
  Path(directory).mkdir(parents=True, exist_ok=True)
@@ -406,7 +418,11 @@ def build_application_logger(application_name: str = "ms-sdk", **metadata):
406
418
 
407
419
  # Create the structlog logger and bind metadata
408
420
  logger = structlog.get_logger(logger_name)
409
- logger = logger.bind(application_name=application_name, **metadata)
421
+ logger = logger.bind(
422
+ application_name=application_name,
423
+ sdk_version=_get_sdk_version(),
424
+ **metadata,
425
+ )
410
426
 
411
427
  try:
412
428
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 3.18.7
3
+ Version: 3.18.9
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence"
7
- version = "3.18.7"
7
+ version = "3.18.9"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -196,6 +196,39 @@ def test_organization_project_names(cli_mod, runner, monkeypatch):
196
196
  assert "Total organization-visible project names: 2" in result.output
197
197
 
198
198
 
199
+ def test_organization_github_organizations(cli_mod, runner, monkeypatch):
200
+ monkeypatch.setattr(cli_mod, "_require_login", lambda: {"username": "u"})
201
+ monkeypatch.setattr(
202
+ cli_mod,
203
+ "list_github_organizations",
204
+ lambda: [
205
+ {"id": 33, "name": "Main Sequence Projects", "login": "mainsequence-projects"},
206
+ {"id": 34, "slug": "research-labs"},
207
+ ],
208
+ )
209
+
210
+ result = runner.invoke(cli_mod.app, ["organization", "github-organizations"])
211
+ assert result.exit_code == 0
212
+ assert "GitHub Organizations" in result.output
213
+ assert "mainsequence-projects" in result.output
214
+ assert "research-labs" in result.output
215
+ assert "Total GitHub organizations: 2" in result.output
216
+
217
+
218
+ def test_organization_github_organizations_json(cli_mod, runner, monkeypatch):
219
+ monkeypatch.setattr(cli_mod, "_require_login", lambda: {"username": "u"})
220
+ monkeypatch.setattr(
221
+ cli_mod,
222
+ "list_github_organizations",
223
+ lambda: [{"id": 33, "name": "Main Sequence Projects", "login": "mainsequence-projects"}],
224
+ )
225
+
226
+ result = runner.invoke(cli_mod.app, ["organization", "github-organizations", "--json"])
227
+ assert result.exit_code == 0
228
+ payload = json.loads(result.output)
229
+ assert payload == [{"id": 33, "name": "Main Sequence Projects", "login": "mainsequence-projects"}]
230
+
231
+
199
232
  def test_organization_teams_list(cli_mod, runner, monkeypatch):
200
233
  monkeypatch.setattr(cli_mod, "_require_login", lambda: {"username": "u"})
201
234
  monkeypatch.setattr(
@@ -59,6 +59,20 @@ def test_logconf_import_skips_job_startup_state_request_outside_pod(monkeypatch)
59
59
  assert logconf._request_job_startup_state() == {}
60
60
 
61
61
 
62
+ def test_logconf_binds_sdk_version(monkeypatch):
63
+ monkeypatch.delenv("MAINSEQUENCE_ACCESS_TOKEN", raising=False)
64
+ monkeypatch.delenv("MAINSEQUENCE_REFRESH_TOKEN", raising=False)
65
+ monkeypatch.delenv("COMMAND_ID", raising=False)
66
+ monkeypatch.delenv("JOB_RUN_ID", raising=False)
67
+
68
+ logconf = _load_mainsequence_submodule("mainsequence.logconf")
69
+
70
+ bound_context = logconf.dump_structlog_bound_logger(logconf.logger)["bound_context"]
71
+
72
+ assert bound_context["application_name"] == "ms-sdk"
73
+ assert bound_context["sdk_version"] == logconf._get_sdk_version()
74
+
75
+
62
76
  def test_logconf_import_skips_job_startup_state_request_without_job_run_id(monkeypatch):
63
77
  monkeypatch.delenv("MAINSEQUENCE_ACCESS_TOKEN", raising=False)
64
78
  monkeypatch.delenv("MAINSEQUENCE_REFRESH_TOKEN", raising=False)
File without changes
File without changes
File without changes