exobrain-database 0.1.2__tar.gz → 0.2.0__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.
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/PKG-INFO +34 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/README.md +33 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/pyproject.toml +15 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/env.py +5 -3
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/migration_manager.py +1 -1
- exobrain_database-0.2.0/src/exobrain/database/migrations/versions/2026_06_29_1324-b23761c01aac_add_updated_data_to_running_action_context.py +36 -0
- exobrain_database-0.2.0/src/exobrain/database/migrations/versions/2026_06_29_1500-c5a9e1f3b7d2_add_widget_executive_view_fields.py +78 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/copilot_license.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/exec_conf_execution_reason.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/predefined_action_action_reason.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/predefined_action_predefined_risk.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/predefined_execution_execution_reason.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/predefined_execution_predefined_action.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/predefined_risk_risk_reason.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/risk_conf_risk_reason.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/roles_action_conf.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/roles_exec_conf.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/roles_permissions.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/roles_predefined_action.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/roles_predefined_execution.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/roles_running_actions.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/roles_running_executions.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/roles_users.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/running_action_context_scopes.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/users_scopes.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/enums/__init__.py +2 -0
- exobrain_database-0.2.0/src/exobrain/database/model/enums/dashboard.py +14 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/permission.py +3 -2
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/predefined_models.py +3 -4
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/reason_models.py +3 -2
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/dashboard_models.py +21 -7
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/running_models.py +11 -5
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/user.py +2 -1
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/tools/jsonb_filter.py +2 -2
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/LICENSE.md +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/__init__.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/README.md +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/__init__.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/alembic.ini +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/script.py.mako +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_08_17_0937-3ed3cf31c9d4_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_08_31_1322-aa6854636eac_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_09_01_0925-9667f0608380_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_09_13_1243-3cd1eb0d7b52_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_09_15_1447-52f33bc03521_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_09_19_0956-f8e096a41120_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_09_21_1642-74f18c0bab6e_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_09_28_1237-919ce06afab1_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_10_04_0718-03535f8dfe5f_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_10_05_1508-f64d4c00b610_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_10_06_0819-e544518a415c_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_10_06_1312-b9b232d63be3_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_10_25_0902-aab08fb68941_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_10_25_0937-d59ec80e6dd7_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_11_22_1628-84b116f3df26_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_11_22_1654-bcb01e365c42_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_11_27_1045-00ce519af235_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_11_27_1048-f779dc9fe429_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_11_29_1421-ad2b4c9c38fe_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_12_04_1029-f91d936478fb_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_12_11_1104-b33e0d6a5bdd_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2023_12_18_1406-73ac94585923_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_01_05_1022-f231770c573e_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_01_17_1606-b94c145b2310_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_01_18_1547-c450c961dfd0_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_01_18_1855-7101980bc238_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_01_22_1616-a35a2828dbcd_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_03_04_1549-4cc4ffdb6c02_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_03_13_1323-97a9ef3f38c3_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_03_20_1033-13bc4d2ab3ab_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_03_28_0905-ffd01ebb2c87_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_03_28_1332-33744d8620d3_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_04_05_0919-a14d98908583_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_04_29_1515-882409414d37_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_05_23_0959-24bb8fdb3ba7_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_05_24_1248-f2a78a625a74_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_06_07_1537-004b611f77cf_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_06_10_1306-f0fe99d57963_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2024_10_15_0646-ef0829fe3540_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_01_28_1020-ea2ebd0e2cdc_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_03_19_1341-adeeb7c46a3c_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_03_25_1449-8fb5b2059d5a_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_05_06_1503-88aa2ef323c5-org.json +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_05_06_1503-88aa2ef323c5-public.json +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_05_06_1503-88aa2ef323c5_add_constraints_to_fk.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_05_20_1302-37f7dbf56615_add_is_learning_field_to_license.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_05_21_0839-096c1ab6ea15_add_is_learning_field_to_predefined_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_03_0336-60d91382b626_add_grace_period_field_to_risk_conf.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_17_1013-4894e248a31d_add_risk_conf_buffer_period_field_to_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_20_0845-c0e0c905cfb1_add_computing_strategy.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_20_0919-360b6879ae25_add_fully_computed_field_to_running_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_21_1200-1a37475a962d_fix_feasible_field_in_running_risk_table_set_not_null.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_21_1300-d456be82025a_add_computed_mapping_field_in_running_.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_27_0154-317d388748a1_adding_auto_rejected_reason_code.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_27_0227-0a9522eb04f0_update_predefined_actions_execution.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_27_0610-9daee7d935b1_add_rejection_and_expiration_fields.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_27_0617-ee6062e6dc4d_add_rejection_and_expiration_fields.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_06_29_0828-90923eeab038_calculate_due_dates_and_due_indicators.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_09_26_1624-2716d77c7904_make_context_fields_non_nullable.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_09_26_1857-0ab6e7d1a127_add_note_column_to_running_action.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_10_17_1620-6400ea4ce6f0_add_index_overdue_risks.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_10_31_0222-67c46f78caca_convert_action_context_data_json_to_jsonb.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2025_11_04_2117-a8a814d7f2ea_rename_execution_reason_code.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_04_1647-87c0d5fd2688_apply_new_naming_rules_for_indexes.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_04_1801-392b727bbaa1_remove_unused_exo_conf_table.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_05_0840-4b12100a932c_add_constraints_to_organizations_settings.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_05_0917-f67bd91a1913_change_copilot_uiConfiguration_json_to_jsonb.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_05_0935-87de8335f045_constrain_organizations_preferences_fields.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_05_1018-7271b6d49e2c_enforce_not_null_and_jsonb_for_predefined_tables.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_05_1510-711567521aa6_convert_config_tables_json_to_jsonb.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_05_1540-ce5a35090a82_convert_connection_json_to_jsonb.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_06_0939-115812c0bcd6_make_scope_key_non_nullable.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_06_1109-7dd6b5f271ed_convert_json_to_jsonb_for_dashboard_and_widgets.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_06_1452-4e4ad858fdf9_convert_json_to_jsonb_for_running_entities.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_09_1558-6954766729aa_simplify_one_to_many_relationships.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_01_12_1639-e548f437e5de_simplify_one_to_many_relationships.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_02_03_1456-abbb5a630567_simplify_one_to_many_relationships.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_02_06_0827-95438a5ec210_simplify_one_to_many_relationships.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_02_06_0835-881f104f8b2b_simplify_one_to_many_relationships.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_04_20_1015-8f3c5e2d9a1b_add_running_action_summary_table_with_text_column.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_04_30_1357-c3e8047f29f6_add_kpi_names_to_predefined_action.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/versions/2026_05_07_0100-a1b2c3d4e5f6_create_scores_table.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/__init__.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/__init__.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/associations/action_conf_action_reason.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/base.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/enums/config.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/enums/currency.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/enums/running.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/field_types.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/__init__.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/copilot.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/general_base.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/organization_models.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/role.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/__init__.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/config_models.py +2 -2
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/connection.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/org_base.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/organization_settings.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/scope.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/py.typed +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/tools/__init__.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/tools/record_count.py +0 -0
- {exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/tools/sql_query_logger.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: exobrain-database
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Exobrain database model and migration management
|
|
5
5
|
Keywords:
|
|
6
6
|
Author: Laurent LAPORTE
|
|
@@ -101,6 +101,39 @@ uv add --group dev package-name # Development
|
|
|
101
101
|
uv sync --upgrade # Update all
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
+
### Database migrations
|
|
105
|
+
|
|
106
|
+
Alembic reads the database connection from environment variables. Create a `.env` file at the project root (do not commit it):
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
export SQL_HOST="localhost"
|
|
110
|
+
export SQL_DATABASE="exobrain"
|
|
111
|
+
export SQL_USER="postgres"
|
|
112
|
+
export SQL_PORT="5432"
|
|
113
|
+
export SQL_PASSWORD="Dfya2023"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Source it before running any Alembic command:
|
|
117
|
+
|
|
118
|
+
```console
|
|
119
|
+
source .env
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
The Alembic settings are declared in `pyproject.toml` under `[tool.alembic]`, so you can run commands directly from the project root without the `-c` flag:
|
|
123
|
+
|
|
124
|
+
```console
|
|
125
|
+
alembic current # Show applied revision
|
|
126
|
+
alembic history # List migration history
|
|
127
|
+
alembic upgrade head # Apply all pending migrations
|
|
128
|
+
alembic downgrade -1 # Roll back one migration
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
For creating a new migration, pass `-c` explicitly so the file naming template from `alembic.ini` is applied:
|
|
132
|
+
|
|
133
|
+
```console
|
|
134
|
+
alembic -c src/exobrain/database/migrations/alembic.ini revision --autogenerate -m "short description"
|
|
135
|
+
```
|
|
136
|
+
|
|
104
137
|
---
|
|
105
138
|
|
|
106
139
|
## Project Structure
|
|
@@ -69,6 +69,39 @@ uv add --group dev package-name # Development
|
|
|
69
69
|
uv sync --upgrade # Update all
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
+
### Database migrations
|
|
73
|
+
|
|
74
|
+
Alembic reads the database connection from environment variables. Create a `.env` file at the project root (do not commit it):
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
export SQL_HOST="localhost"
|
|
78
|
+
export SQL_DATABASE="exobrain"
|
|
79
|
+
export SQL_USER="postgres"
|
|
80
|
+
export SQL_PORT="5432"
|
|
81
|
+
export SQL_PASSWORD="Dfya2023"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Source it before running any Alembic command:
|
|
85
|
+
|
|
86
|
+
```console
|
|
87
|
+
source .env
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The Alembic settings are declared in `pyproject.toml` under `[tool.alembic]`, so you can run commands directly from the project root without the `-c` flag:
|
|
91
|
+
|
|
92
|
+
```console
|
|
93
|
+
alembic current # Show applied revision
|
|
94
|
+
alembic history # List migration history
|
|
95
|
+
alembic upgrade head # Apply all pending migrations
|
|
96
|
+
alembic downgrade -1 # Roll back one migration
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
For creating a new migration, pass `-c` explicitly so the file naming template from `alembic.ini` is applied:
|
|
100
|
+
|
|
101
|
+
```console
|
|
102
|
+
alembic -c src/exobrain/database/migrations/alembic.ini revision --autogenerate -m "short description"
|
|
103
|
+
```
|
|
104
|
+
|
|
72
105
|
---
|
|
73
106
|
|
|
74
107
|
## Project Structure
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "exobrain-database"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.0"
|
|
8
8
|
description = "Exobrain database model and migration management"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "Laurent LAPORTE", email = "laurent@dfya.io" }
|
|
@@ -98,6 +98,20 @@ exclude = [
|
|
|
98
98
|
"src/exobrain/database/migrations/versions",
|
|
99
99
|
]
|
|
100
100
|
|
|
101
|
+
[tool.ruff.lint.extend-per-file-ignores]
|
|
102
|
+
"src/exobrain/database/model/*/*.py" = ["TID252"]
|
|
103
|
+
"src/exobrain/database/migrations/versions/*.py" = ["INP001"]
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
# -----------------------------------------------
|
|
107
|
+
# Configuration for "alembic" migration tool
|
|
108
|
+
# Mirrors alembic.ini so `alembic` commands can be run
|
|
109
|
+
# from the project root without the `-c` flag.
|
|
110
|
+
# -----------------------------------------------
|
|
111
|
+
|
|
112
|
+
[tool.alembic]
|
|
113
|
+
script_location = "src/exobrain/database/migrations"
|
|
114
|
+
|
|
101
115
|
# -----------------------------------------------
|
|
102
116
|
# Configuration for "ty" type checker
|
|
103
117
|
# -----------------------------------------------
|
|
@@ -12,8 +12,9 @@ from sqlalchemy.sql.schema import SchemaItem
|
|
|
12
12
|
|
|
13
13
|
from exobrain.database.model.base import BASE
|
|
14
14
|
|
|
15
|
-
# Apply logging configuration from alembic.ini
|
|
16
|
-
|
|
15
|
+
# Apply logging configuration from alembic.ini (only when the file exists,
|
|
16
|
+
# e.g. not when alembic is invoked via [tool.alembic] in pyproject.toml).
|
|
17
|
+
if context.config.config_file_name and os.path.exists(context.config.config_file_name):
|
|
17
18
|
fileConfig(context.config.config_file_name)
|
|
18
19
|
|
|
19
20
|
logger = logging.getLogger("alembic.runtime.migration")
|
|
@@ -169,7 +170,8 @@ def run_migrations_online() -> None:
|
|
|
169
170
|
sql_port = int(os.getenv("SQL_PORT", "5432"))
|
|
170
171
|
sql_password = os.getenv("SQL_PASSWORD")
|
|
171
172
|
if not sql_password:
|
|
172
|
-
|
|
173
|
+
err = "SQL_PASSWORD environment variable is required."
|
|
174
|
+
raise MigrationException(err)
|
|
173
175
|
|
|
174
176
|
db_url = URL.create(
|
|
175
177
|
drivername=sql_engine,
|
|
@@ -32,7 +32,7 @@ P = ParamSpec("P")
|
|
|
32
32
|
T = TypeVar("T")
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
def _synchronized(func: abc.Callable[P, T]) -> abc.Callable[P, T]:
|
|
35
|
+
def _synchronized(func: abc.Callable[P, T]) -> abc.Callable[P, T]: # noqa: UP047
|
|
36
36
|
"""
|
|
37
37
|
Decorator to synchronize access to migration functions.
|
|
38
38
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""add updated_data to running_action_context_context
|
|
2
|
+
|
|
3
|
+
Revision ID: b23761c01aac
|
|
4
|
+
Revises: a1b2c3d4e5f6
|
|
5
|
+
Create Date: 2026-06-29 13:24:09.539774+00:00
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from collections.abc import Sequence
|
|
9
|
+
|
|
10
|
+
import sqlalchemy as sa
|
|
11
|
+
from alembic import op
|
|
12
|
+
from sqlalchemy.dialects import postgresql
|
|
13
|
+
|
|
14
|
+
# revision identifiers, used by Alembic.
|
|
15
|
+
revision: str = "b23761c01aac"
|
|
16
|
+
down_revision: str | None = "a1b2c3d4e5f6"
|
|
17
|
+
branch_labels: str | Sequence[str] | None = None
|
|
18
|
+
depends_on: str | Sequence[str] | None = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def upgrade(schema_type: str) -> None:
|
|
22
|
+
if schema_type != "base":
|
|
23
|
+
op.add_column(
|
|
24
|
+
"running_action_context",
|
|
25
|
+
sa.Column(
|
|
26
|
+
"updated_data",
|
|
27
|
+
postgresql.JSONB(astext_type=sa.Text()),
|
|
28
|
+
server_default=sa.text("'{}'::jsonb"),
|
|
29
|
+
nullable=False,
|
|
30
|
+
),
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def downgrade(schema_type: str) -> None:
|
|
35
|
+
if schema_type != "base":
|
|
36
|
+
op.drop_column("running_action_context", "updated_data")
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""Add executive-view fields to widget: is_pinned, widget_kind, nullable dashboard_id
|
|
2
|
+
|
|
3
|
+
Revision ID: c5a9e1f3b7d2
|
|
4
|
+
Revises: b23761c01aac
|
|
5
|
+
Create Date: 2026-06-29 15:00:00.000000+00:00
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import contextlib
|
|
10
|
+
from collections.abc import Sequence
|
|
11
|
+
|
|
12
|
+
import sqlalchemy as sa
|
|
13
|
+
from alembic import op
|
|
14
|
+
from sqlalchemy.exc import InternalError
|
|
15
|
+
|
|
16
|
+
# revision identifiers, used by Alembic.
|
|
17
|
+
revision: str = "c5a9e1f3b7d2"
|
|
18
|
+
down_revision: str | None = "b23761c01aac"
|
|
19
|
+
branch_labels: str | Sequence[str] | None = None
|
|
20
|
+
depends_on: str | Sequence[str] | None = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def upgrade(schema_type: str) -> None:
|
|
24
|
+
if schema_type != "base":
|
|
25
|
+
upgrade_organization()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def downgrade(schema_type: str) -> None:
|
|
29
|
+
if schema_type != "base":
|
|
30
|
+
downgrade_organization()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def upgrade_organization() -> None:
|
|
34
|
+
"""Add the executive-view fields to the widget table in organization schemas."""
|
|
35
|
+
widget_kind = sa.Enum("STANDARD", "AGGREGATE", name="widget_kind")
|
|
36
|
+
widget_kind.create(op.get_bind(), checkfirst=True)
|
|
37
|
+
|
|
38
|
+
op.add_column(
|
|
39
|
+
"widget",
|
|
40
|
+
sa.Column(
|
|
41
|
+
"is_pinned",
|
|
42
|
+
sa.Boolean(),
|
|
43
|
+
server_default=sa.text("false"),
|
|
44
|
+
nullable=False,
|
|
45
|
+
),
|
|
46
|
+
)
|
|
47
|
+
op.add_column(
|
|
48
|
+
"widget",
|
|
49
|
+
sa.Column(
|
|
50
|
+
"widget_kind",
|
|
51
|
+
widget_kind,
|
|
52
|
+
server_default="STANDARD",
|
|
53
|
+
nullable=False,
|
|
54
|
+
),
|
|
55
|
+
)
|
|
56
|
+
op.alter_column(
|
|
57
|
+
"widget",
|
|
58
|
+
"dashboard_id",
|
|
59
|
+
existing_type=sa.UUID(),
|
|
60
|
+
nullable=True,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def downgrade_organization() -> None:
|
|
65
|
+
"""Revert the executive-view fields on the widget table in organization schemas."""
|
|
66
|
+
op.alter_column(
|
|
67
|
+
"widget",
|
|
68
|
+
"dashboard_id",
|
|
69
|
+
existing_type=sa.UUID(),
|
|
70
|
+
nullable=False,
|
|
71
|
+
)
|
|
72
|
+
op.drop_column("widget", "widget_kind")
|
|
73
|
+
op.drop_column("widget", "is_pinned")
|
|
74
|
+
|
|
75
|
+
# Note: the drop is wrapped defensively in case the enum type is still
|
|
76
|
+
# referenced by tables in other organization schemas when this runs.
|
|
77
|
+
with contextlib.suppress(InternalError):
|
|
78
|
+
sa.Enum(name="widget_kind").drop(op.get_bind(), checkfirst=True)
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/enums/__init__.py
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from .config import ComputingStrategy, ExpirationOp
|
|
2
2
|
from .currency import Currency
|
|
3
3
|
from .running import ActionStatus, DueIndicator, ExecutionStatus, RiskStatus
|
|
4
|
+
from .dashboard import WidgetKind
|
|
4
5
|
|
|
5
6
|
__all__ = (
|
|
6
7
|
"ActionStatus",
|
|
@@ -10,4 +11,5 @@ __all__ = (
|
|
|
10
11
|
"ExecutionStatus",
|
|
11
12
|
"ExpirationOp",
|
|
12
13
|
"RiskStatus",
|
|
14
|
+
"WidgetKind",
|
|
13
15
|
)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from enum import StrEnum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class WidgetKind(StrEnum):
|
|
5
|
+
"""
|
|
6
|
+
Distinguishes a standard dashboard widget from a dashboard-less
|
|
7
|
+
aggregate widget used on the executive view.
|
|
8
|
+
|
|
9
|
+
- STANDARD: A widget that belongs to a dashboard (the existing behavior).
|
|
10
|
+
- AGGREGATE: A dashboard-less widget aggregating data for the executive view.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
STANDARD = "STANDARD"
|
|
14
|
+
AGGREGATE = "AGGREGATE"
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import uuid
|
|
2
1
|
import typing as t
|
|
2
|
+
import uuid
|
|
3
3
|
|
|
4
|
-
from ..base import CommonBase
|
|
5
4
|
from sqlalchemy import UUID, Text
|
|
6
5
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
7
6
|
|
|
7
|
+
from ..base import CommonBase
|
|
8
|
+
|
|
8
9
|
if t.TYPE_CHECKING: # pragma: no cover
|
|
9
10
|
from ..general import Role
|
|
10
11
|
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import typing as t
|
|
2
2
|
import uuid
|
|
3
3
|
|
|
4
|
-
from sqlalchemy import
|
|
5
|
-
from sqlalchemy.dialects.postgresql import
|
|
4
|
+
from sqlalchemy import UUID, Boolean, ForeignKey, Text, text
|
|
5
|
+
from sqlalchemy.dialects.postgresql import ARRAY, JSONB
|
|
6
6
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
7
7
|
|
|
8
|
-
from ..general.general_base import GeneralBase
|
|
9
|
-
|
|
10
8
|
from ..field_types import JSONDict
|
|
9
|
+
from ..general.general_base import GeneralBase
|
|
11
10
|
|
|
12
11
|
if t.TYPE_CHECKING: # pragma: no cover
|
|
13
12
|
from ..general import ActionReason, Copilot, ExecutionReason, RiskReason, Role
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import uuid
|
|
2
1
|
import typing as t
|
|
2
|
+
import uuid
|
|
3
3
|
|
|
4
|
-
from ..base import CommonBase
|
|
5
4
|
from sqlalchemy import UUID, Boolean, Text
|
|
6
5
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
7
6
|
|
|
7
|
+
from ..base import CommonBase
|
|
8
|
+
|
|
8
9
|
if t.TYPE_CHECKING: # pragma: no cover
|
|
9
10
|
from ..general import PredefinedAction, PredefinedExecution, PredefinedRisk
|
|
10
11
|
from ..org import (
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import uuid
|
|
2
2
|
|
|
3
|
-
from sqlalchemy import UUID, ForeignKey, Text, text
|
|
3
|
+
from sqlalchemy import UUID, Boolean, Enum, ForeignKey, Text, text
|
|
4
4
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
5
5
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
6
6
|
|
|
7
|
+
from ..enums import WidgetKind
|
|
7
8
|
from ..field_types import JSONDict
|
|
8
9
|
from ..general import Copilot
|
|
9
10
|
from ..org.org_base import OrgBase
|
|
@@ -35,7 +36,7 @@ class Dashboard(OrgBase):
|
|
|
35
36
|
# Many-to-one relationship with Copilot.
|
|
36
37
|
# Note: Copilot does not declare the reverse relationship — public entities must not
|
|
37
38
|
# navigate to org entities, as org schemas are created dynamically per organization.
|
|
38
|
-
copilot_obj: Mapped[
|
|
39
|
+
copilot_obj: Mapped[Copilot] = relationship(
|
|
39
40
|
foreign_keys=[copilot],
|
|
40
41
|
)
|
|
41
42
|
|
|
@@ -70,15 +71,28 @@ class Widget(OrgBase):
|
|
|
70
71
|
server_default=text("'{}'::jsonb"),
|
|
71
72
|
)
|
|
72
73
|
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
is_pinned: Mapped[bool] = mapped_column(
|
|
75
|
+
Boolean,
|
|
76
|
+
default=False,
|
|
77
|
+
server_default=text("false"),
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
widget_kind: Mapped[WidgetKind] = mapped_column(
|
|
81
|
+
Enum(WidgetKind, name="widget_kind"),
|
|
82
|
+
default=WidgetKind.STANDARD,
|
|
83
|
+
server_default=WidgetKind.STANDARD,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Foreign key to Dashboard. Nullable so a widget can exist without a
|
|
87
|
+
# dashboard (e.g.: an aggregate widget pinned to the executive view).
|
|
88
|
+
dashboard_id: Mapped[uuid.UUID | None] = mapped_column(
|
|
75
89
|
UUID,
|
|
76
90
|
ForeignKey("dashboard.id", onupdate="CASCADE", ondelete="CASCADE"),
|
|
77
91
|
)
|
|
78
92
|
|
|
79
|
-
#
|
|
80
|
-
|
|
93
|
+
# This is configured as a many-to-one relationship.
|
|
94
|
+
# No innerjoin: an inner join would silently filter out dashboard-less widgets.
|
|
95
|
+
dashboard: Mapped["Dashboard | None"] = relationship(
|
|
81
96
|
back_populates="widgets",
|
|
82
|
-
innerjoin=True,
|
|
83
97
|
foreign_keys=[dashboard_id],
|
|
84
98
|
)
|
|
@@ -25,8 +25,7 @@ from sqlalchemy.ext.mutable import MutableDict
|
|
|
25
25
|
from sqlalchemy.orm import Mapped, attribute_keyed_dict, declared_attr, mapped_column, relationship
|
|
26
26
|
|
|
27
27
|
from ..base import BASE
|
|
28
|
-
from ..enums import ComputingStrategy, ExpirationOp
|
|
29
|
-
from ..enums import ActionStatus, DueIndicator, ExecutionStatus, RiskStatus
|
|
28
|
+
from ..enums import ActionStatus, ComputingStrategy, DueIndicator, ExecutionStatus, ExpirationOp, RiskStatus
|
|
30
29
|
from ..field_types import JSONDict
|
|
31
30
|
from ..org.org_base import OrgBase
|
|
32
31
|
|
|
@@ -86,8 +85,8 @@ class RunningContextBase(OrgBase):
|
|
|
86
85
|
)
|
|
87
86
|
|
|
88
87
|
@declared_attr
|
|
89
|
-
def user_obj(
|
|
90
|
-
return relationship(foreign_keys=[
|
|
88
|
+
def user_obj(self) -> Mapped["User | None"]:
|
|
89
|
+
return relationship(foreign_keys=[self.user]) # type: ignore
|
|
91
90
|
|
|
92
91
|
|
|
93
92
|
class RunningRisk(OrgBase):
|
|
@@ -161,8 +160,8 @@ class RunningRisk(OrgBase):
|
|
|
161
160
|
else: # noqa: RET505
|
|
162
161
|
return (datetime.now(tz=self.created_at.tzinfo) - self.created_at).total_seconds() / SECONDS_PER_DAY
|
|
163
162
|
|
|
164
|
-
@age_days.inplace.expression
|
|
165
163
|
@classmethod
|
|
164
|
+
@age_days.inplace.expression
|
|
166
165
|
def _age_days__expression(cls) -> ColumnElement[float]:
|
|
167
166
|
"""
|
|
168
167
|
SQL expression for the ``age_days`` hybrid property.
|
|
@@ -479,6 +478,13 @@ class RunningActionContext(RunningContextBase):
|
|
|
479
478
|
),
|
|
480
479
|
)
|
|
481
480
|
|
|
481
|
+
# Free-form key/value dictionary of fields updated on this context.
|
|
482
|
+
updated_data: Mapped[JSONDict] = mapped_column(
|
|
483
|
+
JSONB,
|
|
484
|
+
default=dict,
|
|
485
|
+
server_default=text("'{}'::jsonb"),
|
|
486
|
+
)
|
|
487
|
+
|
|
482
488
|
# Foreign key to ActionReason (org -> public is allowed).
|
|
483
489
|
# When the reason is deleted, this reference is set to NULL.
|
|
484
490
|
reason_id: Mapped[uuid.UUID | None] = mapped_column(
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import typing as t
|
|
2
2
|
|
|
3
|
-
from ..org.org_base import OrgBase
|
|
4
3
|
from sqlalchemy import Text
|
|
5
4
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
6
5
|
|
|
6
|
+
from ..org.org_base import OrgBase
|
|
7
|
+
|
|
7
8
|
if t.TYPE_CHECKING: # pragma: no cover
|
|
8
9
|
from ..general import Role
|
|
9
10
|
from ..org import Scope
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/tools/jsonb_filter.py
RENAMED
|
@@ -312,13 +312,13 @@ class JSONBFilter:
|
|
|
312
312
|
def combine_and(self, other: "JSONBFilter") -> "JSONBFilter":
|
|
313
313
|
"""Combine this filter with another using AND logic."""
|
|
314
314
|
combined = JSONBFilter(self.field)
|
|
315
|
-
combined._conditions = [sa.and_(self.build(), other.build())]
|
|
315
|
+
combined._conditions = [sa.and_(self.build(), other.build())]
|
|
316
316
|
return combined
|
|
317
317
|
|
|
318
318
|
def combine_or(self, other: "JSONBFilter") -> "JSONBFilter":
|
|
319
319
|
"""Combine this filter with another using OR logic."""
|
|
320
320
|
combined = JSONBFilter(self.field)
|
|
321
|
-
combined._conditions = [sa.or_(self.build(), other.build())]
|
|
321
|
+
combined._conditions = [sa.or_(self.build(), other.build())]
|
|
322
322
|
return combined
|
|
323
323
|
|
|
324
324
|
# -------------------------------------------------------------------
|
|
File without changes
|
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/README.md
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/__init__.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/alembic.ini
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/migrations/script.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
|
|
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
|
|
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
|
|
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
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/enums/config.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/enums/currency.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/enums/running.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/field_types.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/__init__.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/copilot.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/general/role.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/__init__.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/config_models.py
RENAMED
|
@@ -14,11 +14,11 @@ if typing.TYPE_CHECKING: # pragma: no cover
|
|
|
14
14
|
from ..general import (
|
|
15
15
|
ActionReason,
|
|
16
16
|
ExecutionReason,
|
|
17
|
+
PredefinedAction,
|
|
18
|
+
PredefinedExecution,
|
|
17
19
|
PredefinedRisk,
|
|
18
20
|
RiskReason,
|
|
19
21
|
Role,
|
|
20
|
-
PredefinedAction,
|
|
21
|
-
PredefinedExecution,
|
|
22
22
|
)
|
|
23
23
|
|
|
24
24
|
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/connection.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/org_base.py
RENAMED
|
File without changes
|
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/model/org/scope.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/tools/record_count.py
RENAMED
|
File without changes
|
{exobrain_database-0.1.2 → exobrain_database-0.2.0}/src/exobrain/database/tools/sql_query_logger.py
RENAMED
|
File without changes
|