pyarchinit-mini 2.1.68__tar.gz → 2.4.1__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.
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/CHANGELOG.md +197 -0
- {pyarchinit_mini-2.1.68/pyarchinit_mini.egg-info → pyarchinit_mini-2.4.1}/PKG-INFO +95 -2
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/README.md +92 -1
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/__init__.py +1 -1
- pyarchinit_mini-2.4.1/pyarchinit_mini/cli/migrate_vocab.py +164 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +104 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +104 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +73 -0
- pyarchinit_mini-2.1.68/pyarchinit_mini/database/migrations.py → pyarchinit_mini-2.4.1/pyarchinit_mini/database/migrations/__init__.py +35 -35
- pyarchinit_mini-2.4.1/pyarchinit_mini/database/migrations/backup.py +80 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/database/utils.py +33 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/dto/us_dto.py +33 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/converter.py +8 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphml_converter/em_palette.py +439 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/graphml_builder.py +8 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/graphml_exporter.py +8 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +8 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphml_io/__init__.py +1 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphml_io/reader.py +38 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphml_io/writer.py +26 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphml_io/yed_writer.py +157 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphproj/__init__.py +1 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphproj/auto_regen.py +124 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphproj/edge_registry.py +43 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphproj/exceptions.py +53 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphproj/filesystem.py +62 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphproj/ingest_plan.py +32 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphproj/ingestor.py +190 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphproj/paradata_store.py +327 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/graphproj/projector.py +105 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/harris_swimlane/__init__.py +1 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/harris_swimlane/compound_layout.py +57 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/harris_swimlane/exceptions.py +31 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/harris_swimlane/period_sync_service.py +90 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/harris_swimlane/row_provider.py +113 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/harris_swimlane/swimlane_state.py +269 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/s3d_integration/s3d_converter.py +109 -68
- pyarchinit_mini-2.4.1/pyarchinit_mini/vocab/__init__.py +14 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/vocab/exceptions.py +22 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/vocab/i18n.py +75 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/vocab/loader.py +139 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/vocab/provider.py +134 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/vocab/translations/vocab_en.json +20 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/vocab/translations/vocab_it.json +28 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/vocab/types.py +53 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/app.py +33 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/web_interface/graph_routes.py +128 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/harris_creator_routes.py +255 -42
- pyarchinit_mini-2.4.1/pyarchinit_mini/web_interface/paradata_routes.py +137 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/web_interface/paradata_ui_routes.py +143 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/base.html +2 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/web_interface/templates/graph_import_preview.html +40 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/web_interface/templates/graph_import_result.html +19 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +302 -3
- pyarchinit_mini-2.4.1/pyarchinit_mini/web_interface/templates/paradata/edit.html +21 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/web_interface/templates/paradata/index.html +53 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/web_interface/templates/paradata/list.html +33 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/three_d_builder_routes.py +13 -0
- pyarchinit_mini-2.4.1/pyarchinit_mini/web_interface/vocab_routes.py +87 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1/pyarchinit_mini.egg-info}/PKG-INFO +95 -2
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini.egg-info/SOURCES.txt +99 -2
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini.egg-info/entry_points.txt +1 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini.egg-info/requires.txt +3 -1
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyproject.toml +5 -2
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/requirements.txt +1 -1
- pyarchinit_mini-2.4.1/tests/e2e/test_web_vocab_full_flow.py +78 -0
- pyarchinit_mini-2.4.1/tests/fixtures/_generate_baseline_graphml.py +30 -0
- pyarchinit_mini-2.4.1/tests/fixtures/_generate_harris_swimlane_synthetic.py +89 -0
- pyarchinit_mini-2.4.1/tests/fixtures/_generate_synthetic_db.py +39 -0
- pyarchinit_mini-2.4.1/tests/integration/test_auto_regen_on_save.py +61 -0
- pyarchinit_mini-2.4.1/tests/integration/test_graph_import_flow.py +96 -0
- pyarchinit_mini-2.4.1/tests/integration/test_graph_routes.py +54 -0
- pyarchinit_mini-2.4.1/tests/integration/test_harris_matrix_post_cutover.py +44 -0
- pyarchinit_mini-2.4.1/tests/integration/test_harris_matrix_visual_parity.py +56 -0
- pyarchinit_mini-2.4.1/tests/integration/test_harris_swimlane_routes_create_row.py +93 -0
- pyarchinit_mini-2.4.1/tests/integration/test_harris_swimlane_routes_load.py +77 -0
- pyarchinit_mini-2.4.1/tests/integration/test_harris_swimlane_routes_save.py +102 -0
- pyarchinit_mini-2.4.1/tests/integration/test_harris_swimlane_routes_session_missing.py +23 -0
- pyarchinit_mini-2.4.1/tests/integration/test_migrate_vocab_cli.py +92 -0
- pyarchinit_mini-2.4.1/tests/integration/test_paradata_routes_authors.py +80 -0
- pyarchinit_mini-2.4.1/tests/integration/test_paradata_routes_other_types.py +63 -0
- pyarchinit_mini-2.4.1/tests/integration/test_paradata_ui.py +74 -0
- pyarchinit_mini-2.4.1/tests/integration/test_spec2_coverage_gaps.py +28 -0
- pyarchinit_mini-2.4.1/tests/integration/test_vocab_routes.py +66 -0
- pyarchinit_mini-2.4.1/tests/integration/test_yed_export_route.py +83 -0
- pyarchinit_mini-2.4.1/tests/integration/test_yed_writer_parity.py +65 -0
- pyarchinit_mini-2.4.1/tests/unit/__init__.py +0 -0
- pyarchinit_mini-2.4.1/tests/unit/test_auto_regen.py +159 -0
- pyarchinit_mini-2.4.1/tests/unit/test_database_utils.py +19 -0
- pyarchinit_mini-2.4.1/tests/unit/test_deprecated_writers_shim.py +26 -0
- pyarchinit_mini-2.4.1/tests/unit/test_em_palette_vocab_backed.py +68 -0
- pyarchinit_mini-2.4.1/tests/unit/test_graphml_io_reader.py +38 -0
- pyarchinit_mini-2.4.1/tests/unit/test_graphml_io_writer.py +34 -0
- pyarchinit_mini-2.4.1/tests/unit/test_graphproj_edge_registry.py +44 -0
- pyarchinit_mini-2.4.1/tests/unit/test_graphproj_exceptions.py +40 -0
- pyarchinit_mini-2.4.1/tests/unit/test_graphproj_filesystem.py +63 -0
- pyarchinit_mini-2.4.1/tests/unit/test_graphproj_ingestor_apply.py +111 -0
- pyarchinit_mini-2.4.1/tests/unit/test_graphproj_ingestor_preview.py +103 -0
- pyarchinit_mini-2.4.1/tests/unit/test_graphproj_projector.py +104 -0
- pyarchinit_mini-2.4.1/tests/unit/test_harris_swimlane_compound_layout.py +55 -0
- pyarchinit_mini-2.4.1/tests/unit/test_harris_swimlane_exceptions.py +38 -0
- pyarchinit_mini-2.4.1/tests/unit/test_harris_swimlane_period_sync.py +78 -0
- pyarchinit_mini-2.4.1/tests/unit/test_harris_swimlane_row_provider.py +133 -0
- pyarchinit_mini-2.4.1/tests/unit/test_harris_swimlane_state_load.py +84 -0
- pyarchinit_mini-2.4.1/tests/unit/test_harris_swimlane_state_save.py +123 -0
- pyarchinit_mini-2.4.1/tests/unit/test_ingest_plan.py +37 -0
- pyarchinit_mini-2.4.1/tests/unit/test_migrations_backup.py +44 -0
- pyarchinit_mini-2.4.1/tests/unit/test_migrations_idempotent.py +164 -0
- pyarchinit_mini-2.4.1/tests/unit/test_paradata_store_authors.py +51 -0
- pyarchinit_mini-2.4.1/tests/unit/test_paradata_store_basic.py +32 -0
- pyarchinit_mini-2.4.1/tests/unit/test_paradata_store_other_types.py +76 -0
- pyarchinit_mini-2.4.1/tests/unit/test_s3d_converter_vocab_backed.py +122 -0
- pyarchinit_mini-2.4.1/tests/unit/test_us_dto_unita_tipo_validator.py +62 -0
- pyarchinit_mini-2.4.1/tests/unit/test_vocab_bootstrap_failures.py +26 -0
- pyarchinit_mini-2.4.1/tests/unit/test_vocab_exceptions.py +25 -0
- pyarchinit_mini-2.4.1/tests/unit/test_vocab_i18n.py +41 -0
- pyarchinit_mini-2.4.1/tests/unit/test_vocab_loader.py +57 -0
- pyarchinit_mini-2.4.1/tests/unit/test_vocab_provider.py +76 -0
- pyarchinit_mini-2.4.1/tests/unit/test_vocab_types.py +45 -0
- pyarchinit_mini-2.4.1/tests/unit/test_yed_writer.py +122 -0
- pyarchinit_mini-2.1.68/pyarchinit_mini/graphml_converter/em_palette.py +0 -355
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/MANIFEST.in +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/babel.cfg +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/data/media_viewer_demo.db +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/data/pyarchinit_mini 2.db +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/data/pyarchinit_mini.db +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/data/pyarchinit_mini_sample.db +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/data/pyarchinit_tutorial.db +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/data/pyarchinit_tutorial_clean.db +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/data/pyarchinit_tutorial_video.db +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/data/pyarchinit_v18_demo.db +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/logo/logo_pyarchinit-mini.png +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/api/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/api/auth.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/api/dependencies.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/api/graphml.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/api/inventario.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/api/schemas.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/api/site.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/api/sync.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/api/us.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli/export_import_cli.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli/graphml_cli.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli/harris_import.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli/harris_template.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli/migrate.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli/sync_cli.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli_interface/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/config/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/config/connection_manager.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/config/em_node_types.yaml +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/concurrency_manager.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/connection.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/database_creator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/manager.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/postgres_installer.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/database/schemas.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/icons.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/dto/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/dto/inventario_dto.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/dto/site_dto.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/exceptions.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/i18n/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/i18n/locale_manager.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/__main__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/config.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/http_server.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/server.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/media_manager/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/media_manager/media_handler.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/ai_chat.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/app_setting.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/base.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/datazione.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/extended_matrix.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/harris_matrix.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/inventario_materiali.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/media.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/pottery.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/site.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/thesaurus.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/tma.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/us.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/models/user.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/pdf_export/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/auto_translate.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/setup_auth.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/scripts/verify_docs.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/ai_chat_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/analytics_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/app_setting_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/backup_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/command_parser.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/datazione_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/export_import_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/import_export_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/inventario_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/mcp_executor.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/media_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/pottery_dto.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/pottery_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/search_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/site_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/thesaurus_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/tma_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/us_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/services/user_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/stratigraph/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/translations/messages.pot +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/utils/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/utils/auth.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/utils/exceptions.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/utils/relationship_validator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/utils/validators.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/pyarchinit_mini.egg-info/top_level.txt +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/setup.cfg +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/setup.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/conftest.py +0 -0
- {pyarchinit_mini-2.1.68/tests/integration → pyarchinit_mini-2.4.1/tests/e2e}/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/fixtures/build_legacy_with_pottery.py +0 -0
- {pyarchinit_mini-2.1.68/tests/unit → pyarchinit_mini-2.4.1/tests/integration}/__init__.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/integration/test_admin_ai_settings_routes.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/integration/test_admin_backup_routes.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/integration/test_full_sync_flow.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/integration/test_pottery_completion.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/integration/test_pottery_routes.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_app_setting_model.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_app_setting_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_backup_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_bundle.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_concurrency_columns.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_concurrency_manager.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_inventario_schema.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_optimistic_locking.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_pottery_dto.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_pottery_model.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_pottery_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_site_service.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_sync_api.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_sync_cli.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_sync_queue.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_sync_state_machine.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_us_schema.py +0 -0
- {pyarchinit_mini-2.1.68 → pyarchinit_mini-2.4.1}/tests/unit/test_uuid_manager.py +0 -0
|
@@ -1,3 +1,200 @@
|
|
|
1
|
+
## [2.4.1] - 2026-05-18
|
|
2
|
+
|
|
3
|
+
### Fixed (IT)
|
|
4
|
+
- Editor Harris Matrix: `window._currentSite` ora inizializzato server-side
|
|
5
|
+
dall'hidden input `#site-name`, quindi i pulsanti Save / + New Row /
|
|
6
|
+
Export yEd GraphML funzionano anche se `/api/load/<site>` fallisce (caso
|
|
7
|
+
tipico: migration `node_uuid` non ancora applicata sul DB di produzione).
|
|
8
|
+
- Editor Harris Matrix: se `/api/load/<site>` ritorna errore, il corpo
|
|
9
|
+
della risposta viene mostrato in un alert con suggerimento di lanciare
|
|
10
|
+
`pyarchinit-mini-migrate-vocab --apply` (prima era silenzioso).
|
|
11
|
+
- Editor Harris Matrix: messaggio "No site loaded" sostituito con
|
|
12
|
+
istruzione esplicita di tornare all'indice del Creator.
|
|
13
|
+
|
|
14
|
+
### Added (IT)
|
|
15
|
+
- Nuova pagina `/paradata/` (sezione Tools): picker sito + bottoni rapidi
|
|
16
|
+
ai 5 tipi di paradata (authors, licenses, embargoes, documents, epochs).
|
|
17
|
+
Link aggiunto sia al dropdown navbar che alla sidebar laterale.
|
|
18
|
+
- Modal di aiuto nell'editor Harris (icona "?") che spiega la differenza
|
|
19
|
+
tra GraphML (s3dgraphy clean, auto-regen, per Datacenter/3D), Export
|
|
20
|
+
yEd GraphML (TableNode swimlane, on-demand, per yEd Desktop), DOT
|
|
21
|
+
(Graphviz), PNG (snapshot raster).
|
|
22
|
+
- Tooltip migliorati su tutti i pulsanti di export.
|
|
23
|
+
|
|
24
|
+
### Fixed (EN)
|
|
25
|
+
- Harris Matrix Editor: `window._currentSite` is now initialised server-side
|
|
26
|
+
from hidden input `#site-name`, so Save / + New Row / Export buttons work
|
|
27
|
+
even when `/api/load/<site>` fails (typical when the `node_uuid` migration
|
|
28
|
+
is still pending on production).
|
|
29
|
+
- Harris Matrix Editor: failed swimlane loads now surface the backend error
|
|
30
|
+
body in an alert with a hint to run `pyarchinit-mini-migrate-vocab`.
|
|
31
|
+
|
|
32
|
+
### Added (EN)
|
|
33
|
+
- New `/paradata/` landing page (Tools section): site picker + quick links
|
|
34
|
+
to the 5 paradata kinds. Sidebar entries added.
|
|
35
|
+
- Help modal explaining the four export formats (GraphML, yEd GraphML,
|
|
36
|
+
DOT, PNG) accessible via a question-mark icon on the editor toolbar.
|
|
37
|
+
|
|
38
|
+
## [2.4.0] - 2026-05-18
|
|
39
|
+
|
|
40
|
+
### Added (IT)
|
|
41
|
+
- Modulo `pyarchinit_mini/harris_swimlane/` (5 moduli: row_provider,
|
|
42
|
+
swimlane_state, period_sync_service, compound_layout, exceptions) per
|
|
43
|
+
l'editor swimlane di Harris Matrix.
|
|
44
|
+
- `pyarchinit_mini/graphml_io/yed_writer.py` — nuovo emitter
|
|
45
|
+
yEd-flavored con `y:TableNode + y:Rows + y:ShapeNode`, separato
|
|
46
|
+
dall'export s3dgraphy clean di Spec 2.
|
|
47
|
+
- 5 nuove route REST per il Harris Creator:
|
|
48
|
+
`GET/POST /api/swimlanes/<site>`, `GET /api/load/<site>`,
|
|
49
|
+
`POST /api/save/<site>`, `GET /api/export/<site>/yed-graphml`.
|
|
50
|
+
- Editor `/harris-creator/editor` ora carica swimlane automaticamente
|
|
51
|
+
(row da `period_table` priorità → fallback distinct values), supporta
|
|
52
|
+
drag-drop tra row, creazione interattiva di nuove row, save esplicito
|
|
53
|
+
con auto-regen (Spec 2) post-commit.
|
|
54
|
+
- Export yEd GraphML on-demand → `data/exports/harris_yed/<slug>-harris-yed.graphml`.
|
|
55
|
+
|
|
56
|
+
### Added (EN)
|
|
57
|
+
- New `pyarchinit_mini/harris_swimlane/` package — backend for Harris
|
|
58
|
+
Matrix swimlane editing.
|
|
59
|
+
- New `pyarchinit_mini/graphml_io/yed_writer.py` — yEd-flavored GraphML
|
|
60
|
+
emitter (TableNode + Rows + ShapeNode), separate from Spec 2's
|
|
61
|
+
s3dgraphy delegate.
|
|
62
|
+
- 5 new REST endpoints under `/harris-creator/api/`.
|
|
63
|
+
- Editor loads swimlanes auto from `period_table` (fallback distinct);
|
|
64
|
+
drag-drop between rows; interactive row creation; explicit Save with
|
|
65
|
+
Spec 2 auto-regen. On-demand yEd export.
|
|
66
|
+
|
|
67
|
+
### Changed
|
|
68
|
+
- `harris_creator_routes.py` extended additively — existing routes
|
|
69
|
+
unchanged.
|
|
70
|
+
- `editor.html` extended additively — Cytoscape compound nodes,
|
|
71
|
+
swimlane parents, new toolbar buttons.
|
|
72
|
+
|
|
73
|
+
### Architecture note
|
|
74
|
+
Two GraphML outputs now coexist:
|
|
75
|
+
- `data/paradata/<slug>/stratigraphy.graphml` (Spec 2 auto-regen,
|
|
76
|
+
s3dgraphy clean, EM-canonical)
|
|
77
|
+
- `data/exports/harris_yed/<slug>-harris-yed.graphml` (Spec 3-bis,
|
|
78
|
+
on-demand, yEd-flavored with TableNode)
|
|
79
|
+
|
|
80
|
+
Legacy `pure_networkx_exporter` stays deprecated (was deprecated in
|
|
81
|
+
Spec 2 PR8). NOT resurrected.
|
|
82
|
+
|
|
83
|
+
### Dependencies
|
|
84
|
+
- No new dependencies.
|
|
85
|
+
|
|
86
|
+
### Spec / Plan
|
|
87
|
+
- Spec: `docs/superpowers/specs/2026-05-18-harris-swimlane-template-design.md`
|
|
88
|
+
- Plan: `docs/superpowers/plans/2026-05-18-harris-swimlane-template.md`
|
|
89
|
+
- Spec 3-bis (auxiliary): independent of Spec 3 (SyncEngine + EM
|
|
90
|
+
Datacenter, on hold pending Datacenter readiness).
|
|
91
|
+
|
|
92
|
+
## [2.3.0-alpha] - 2026-05-18
|
|
93
|
+
|
|
94
|
+
### Added (IT)
|
|
95
|
+
- Modulo `pyarchinit_mini/graphproj/` con `GraphProjector` (DB → s3dgraphy.Graph),
|
|
96
|
+
`ParadataStore` (storage per-sito su filesystem), `GraphIngestor` (preview/apply
|
|
97
|
+
bidirezionale con staleness check), `auto_regen` (hook post-commit), edge_registry,
|
|
98
|
+
filesystem helpers.
|
|
99
|
+
- Modulo `pyarchinit_mini/graphml_io/` con writer/reader delegati a
|
|
100
|
+
`s3dgraphy.exporter.graphml.GraphMLExporter` / `s3dgraphy.importer.import_graphml.GraphMLImporter`.
|
|
101
|
+
- Auto-regen di `data/paradata/<site_slug>/stratigraphy.graphml` su ogni save US/USM
|
|
102
|
+
(best-effort, errori isolati). Disabilitabile con `PYARCHINIT_DISABLE_AUTO_REGEN=1`
|
|
103
|
+
o col context manager `auto_regen.disable_regen()`.
|
|
104
|
+
- 5 pagine HTML CRUD per paradata (authors, licenses, embargoes, documents, epochs)
|
|
105
|
+
con form Bootstrap.
|
|
106
|
+
- REST API completa `/api/v1/paradata/<site>/{authors,licenses,embargoes,documents,epochs}`.
|
|
107
|
+
- Route web `/sites/<site>/graph/{view,download,import-preview,import-apply}` con
|
|
108
|
+
preview 2-fasi obbligatorio per l'import GraphML + snapshot staleness check.
|
|
109
|
+
|
|
110
|
+
### Changed
|
|
111
|
+
- `pyarchinit_mini/graphml_converter/{graphml_builder, graphml_exporter,
|
|
112
|
+
pure_networkx_exporter, converter}.py` marcati deprecati (emettono
|
|
113
|
+
`DeprecationWarning` all'import). Verranno rimossi in Spec 3.
|
|
114
|
+
- `harris_creator_routes.py` refactored: il branch `graphml` ora usa
|
|
115
|
+
`GraphProjector.populate_graph()` + `graphml_io.writer.write_graphml()`
|
|
116
|
+
invece di passare attraverso `HarrisMatrixGenerator.export_to_graphml()` /
|
|
117
|
+
`GraphMLBuilder`.
|
|
118
|
+
- Edge canonical names allineati a s3dgraphy 0.1.42: `covers` → `overlies`,
|
|
119
|
+
`leans_against` → `abuts`. Fix del bug latente Spec 1 in
|
|
120
|
+
`vocab_{en,it}.json` e `s3d_converter._LEGACY_CODE_MAP`.
|
|
121
|
+
|
|
122
|
+
### Architecture note (paradata storage)
|
|
123
|
+
s3dgraphy 0.1.42's GraphML exporter does not round-trip standalone paradata
|
|
124
|
+
nodes (AuthorNode, etc.) — they're only serialised when wrapped in
|
|
125
|
+
ParadataNodeGroup. Spec 2 therefore adopted a **JSON sidecar pattern**:
|
|
126
|
+
paradata entities live in `data/paradata/<site_slug>/paradata.json`
|
|
127
|
+
(committed to git), while the auto-regenerated `stratigraphy.graphml` is
|
|
128
|
+
purely the stratigraphic projection. Paradata are exposed via REST/UI but
|
|
129
|
+
not embedded in the GraphML output.
|
|
130
|
+
|
|
131
|
+
### Added (EN)
|
|
132
|
+
- New `pyarchinit_mini/graphproj/` package: GraphProjector, ParadataStore,
|
|
133
|
+
GraphIngestor (2-phase preview/apply), auto_regen post-commit hook,
|
|
134
|
+
edge_registry, filesystem helpers.
|
|
135
|
+
- New `pyarchinit_mini/graphml_io/` package delegating to s3dgraphy.
|
|
136
|
+
- Auto-regen of stratigraphy.graphml on US/USM save, error-isolated.
|
|
137
|
+
- 5 paradata CRUD HTML pages + REST API.
|
|
138
|
+
- Graph routes: view, download, import-preview, import-apply with snapshot
|
|
139
|
+
staleness check (409 on stale).
|
|
140
|
+
- Deprecation warnings on 4 legacy writers.
|
|
141
|
+
|
|
142
|
+
### Dependencies
|
|
143
|
+
- No new dependencies. Uses s3dgraphy 0.1.42 (bumped in 2.2.0-alpha).
|
|
144
|
+
|
|
145
|
+
### Spec / Plan
|
|
146
|
+
- Spec: `docs/superpowers/specs/2026-05-17-spec-2-local-graph-paradata-design.md`
|
|
147
|
+
- Plan: `docs/superpowers/plans/2026-05-17-spec-2-local-graph-paradata.md`
|
|
148
|
+
- Spec 2 of 4 for the s3dgraphy bidirectional bridge work.
|
|
149
|
+
|
|
150
|
+
## [2.2.0-alpha] - 2026-05-17
|
|
151
|
+
|
|
152
|
+
### Added (IT)
|
|
153
|
+
- Modulo `pyarchinit_mini/vocab/` con `VocabProvider` singleton: legge i tre pillar JSON di s3dgraphy
|
|
154
|
+
(`s3Dgraphy_node_datamodel.json`, `s3Dgraphy_connections_datamodel.json`, `em_visual_rules.json`)
|
|
155
|
+
come fonte canonica per tipi di unità, tipi di relazione, e stili visivi.
|
|
156
|
+
- Endpoint REST `/api/v1/vocab/{unit-types, edge-types, visual-style, diagnostics}` per popolare
|
|
157
|
+
select e form lato web.
|
|
158
|
+
- CLI `pyarchinit-mini-migrate-vocab` per allineare il vocabolario legacy
|
|
159
|
+
(`USVA`/`USVB` → `USVs`, `USVC` → `USVn`) e fare il backfill della colonna `node_uuid` (UUID v7)
|
|
160
|
+
su `us_table`, `inventario_materiali_table`, `periodizzazione_table`.
|
|
161
|
+
- Colonna `node_uuid` (prerequisito per il sync futuro col Datacenter EM).
|
|
162
|
+
- Catalogo i18n custom (`pyarchinit_mini/vocab/translations/vocab_{en,it}.json`) con
|
|
163
|
+
`edge_type_aliases` per il parsing dei `rapporti` italiani.
|
|
164
|
+
|
|
165
|
+
### Added (EN)
|
|
166
|
+
- New `pyarchinit_mini/vocab/` package with `VocabProvider` singleton reading three s3dgraphy
|
|
167
|
+
JSON pillars as canonical source of unit types, edge types, and visual styles.
|
|
168
|
+
- REST endpoints `/api/v1/vocab/{unit-types, edge-types, visual-style, diagnostics}` to populate
|
|
169
|
+
forms in the web UI.
|
|
170
|
+
- CLI `pyarchinit-mini-migrate-vocab` to align legacy vocabulary (`USVA`/`USVB` → `USVs`,
|
|
171
|
+
`USVC` → `USVn`) and backfill `node_uuid` (UUID v7) across `us_table`,
|
|
172
|
+
`inventario_materiali_table`, `periodizzazione_table`.
|
|
173
|
+
- `node_uuid` column (prerequisite for future EM Datacenter sync).
|
|
174
|
+
- Custom i18n catalogue with `edge_type_aliases` for parsing Italian `rapporti` strings.
|
|
175
|
+
|
|
176
|
+
### Changed
|
|
177
|
+
- `graphml_converter/em_palette.py` reads visual styles from `VocabProvider` instead of the
|
|
178
|
+
hardcoded `PALETTE` dict (kept as deprecated shim emitting `DeprecationWarning` on access).
|
|
179
|
+
- `s3d_integration/s3d_converter.py` parses `rapporti` text and categorizes node families via
|
|
180
|
+
`VocabProvider` (`italian_aliases`, `family`, `class_name`) instead of hardcoded if/elif chains.
|
|
181
|
+
- Harris Matrix Creator now consumes `VocabProvider` visual styles end-to-end.
|
|
182
|
+
|
|
183
|
+
### Migration required
|
|
184
|
+
- After upgrading, run `pyarchinit-mini-migrate-vocab --dry-run` to preview, then
|
|
185
|
+
`--apply` to migrate (auto-backup under `data/backups/`).
|
|
186
|
+
- See `docs/CLI_MIGRATE_VOCAB.md` for full reference.
|
|
187
|
+
|
|
188
|
+
### Dependencies
|
|
189
|
+
- `s3dgraphy>=0.1.42` (was 0.1.15).
|
|
190
|
+
- New: `uuid7>=0.1.0` (importable as `uuid_extensions`).
|
|
191
|
+
- Dev: `freezegun>=1.5.0`.
|
|
192
|
+
|
|
193
|
+
### Spec / Plan
|
|
194
|
+
- Spec: `docs/superpowers/specs/2026-05-16-s3dgraphy-web-foundation-design.md`
|
|
195
|
+
- Plan: `docs/superpowers/plans/2026-05-16-s3dgraphy-web-foundation.md`
|
|
196
|
+
- This is Spec 1 of 4 for porting the s3dgraphy bidirectional bridge from the QGIS plugin.
|
|
197
|
+
|
|
1
198
|
## [2.1.6] - 2026-02-25
|
|
2
199
|
|
|
3
200
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.1
|
|
3
|
+
Version: 2.4.1
|
|
4
4
|
Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
|
|
5
5
|
Home-page: https://github.com/enzococca/pyarchinit-mini
|
|
6
6
|
Author: PyArchInit Team
|
|
@@ -42,7 +42,8 @@ Requires-Dist: networkx>=3.0.0
|
|
|
42
42
|
Requires-Dist: reportlab>=4.0.0
|
|
43
43
|
Requires-Dist: pillow>=10.0.0
|
|
44
44
|
Requires-Dist: qrcode[pil]>=7.4.0
|
|
45
|
-
Requires-Dist: s3dgraphy>=0.1.
|
|
45
|
+
Requires-Dist: s3dgraphy>=0.1.42
|
|
46
|
+
Requires-Dist: uuid7>=0.1.0
|
|
46
47
|
Requires-Dist: click>=8.1.0
|
|
47
48
|
Requires-Dist: rich>=13.0.0
|
|
48
49
|
Requires-Dist: inquirer>=3.0.0
|
|
@@ -91,6 +92,7 @@ Requires-Dist: black>=23.0.0; extra == "dev"
|
|
|
91
92
|
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
92
93
|
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
93
94
|
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
95
|
+
Requires-Dist: freezegun>=1.5.0; extra == "dev"
|
|
94
96
|
Provides-Extra: docs
|
|
95
97
|
Requires-Dist: sphinx>=6.0.0; extra == "docs"
|
|
96
98
|
Requires-Dist: sphinx-rtd-theme>=1.2.0; extra == "docs"
|
|
@@ -2366,3 +2368,94 @@ This project is licensed under the GNU General Public License v2.0 - see the [LI
|
|
|
2366
2368
|
|
|
2367
2369
|
|
|
2368
2370
|
**Made with ❤️ for the Archaeological Community**
|
|
2371
|
+
|
|
2372
|
+
## s3dgraphy integration
|
|
2373
|
+
|
|
2374
|
+
Since 2.2.0-alpha, pyarchinit-mini-web reads the canonical Extended Matrix
|
|
2375
|
+
vocabulary (unit types, edge types, visual styles) from the
|
|
2376
|
+
[s3dgraphy](https://github.com/zalmoxes-laran/s3dgraphy) package's JSON
|
|
2377
|
+
catalogues. Unit types like `US`, `USVs`, `USVn`, `RSF`, `USM` come from
|
|
2378
|
+
`s3Dgraphy_node_datamodel.json` (v1.5.4 at time of writing).
|
|
2379
|
+
|
|
2380
|
+
Bumping s3dgraphy (`pip install --upgrade s3dgraphy`) makes new EM types
|
|
2381
|
+
immediately available in form selects without any pyarchinit-mini code change.
|
|
2382
|
+
|
|
2383
|
+
After upgrading, run the data alignment to update legacy records:
|
|
2384
|
+
|
|
2385
|
+
```bash
|
|
2386
|
+
pyarchinit-mini-migrate-vocab --dry-run # preview changes
|
|
2387
|
+
pyarchinit-mini-migrate-vocab --apply # backup + migrate
|
|
2388
|
+
```
|
|
2389
|
+
|
|
2390
|
+
See `docs/CLI_MIGRATE_VOCAB.md` for the full CLI reference.
|
|
2391
|
+
|
|
2392
|
+
The vocab is exposed to the browser via:
|
|
2393
|
+
|
|
2394
|
+
- `GET /api/v1/vocab/unit-types?lang=it`
|
|
2395
|
+
- `GET /api/v1/vocab/unit-types/<abbr>`
|
|
2396
|
+
- `GET /api/v1/vocab/edge-types?lang=it`
|
|
2397
|
+
- `GET /api/v1/vocab/visual-style/<unit_type>`
|
|
2398
|
+
- `GET /api/v1/vocab/diagnostics` (admin-only)
|
|
2399
|
+
|
|
2400
|
+
## Graph projection & paradata
|
|
2401
|
+
|
|
2402
|
+
Since 2.3.0-alpha, pyarchinit-mini-web auto-generates the stratigraphic graph
|
|
2403
|
+
as a GraphML file every time you save a US/USM record. Output lives at
|
|
2404
|
+
`data/paradata/<site_slug>/stratigraphy.graphml`.
|
|
2405
|
+
|
|
2406
|
+
Paradata (authors, licenses, embargoes, documents, epochs) are stored in a
|
|
2407
|
+
JSON sidecar:
|
|
2408
|
+
```
|
|
2409
|
+
data/paradata/<site_slug>/paradata.json
|
|
2410
|
+
```
|
|
2411
|
+
because s3dgraphy 0.1.42's GraphML exporter does not round-trip standalone
|
|
2412
|
+
paradata nodes. The JSON sidecar IS committed to git.
|
|
2413
|
+
|
|
2414
|
+
### Paradata editing
|
|
2415
|
+
|
|
2416
|
+
Visit `/paradata/<site>/{authors,licenses,embargoes,documents,epochs}` to
|
|
2417
|
+
manage paradata. REST endpoints under `/api/v1/paradata/<site>/...` mirror
|
|
2418
|
+
the UI. See `docs/PARADATA_GUIDE.md`.
|
|
2419
|
+
|
|
2420
|
+
### Graph import
|
|
2421
|
+
|
|
2422
|
+
`/sites/<site>/graph/import-preview` accepts a GraphML upload; you see a
|
|
2423
|
+
preview of planned INSERT/UPDATE/SKIP and must confirm via
|
|
2424
|
+
`/sites/<site>/graph/import-apply` before any DB write.
|
|
2425
|
+
|
|
2426
|
+
### Auto-regen control
|
|
2427
|
+
|
|
2428
|
+
- Disable globally: `export PYARCHINIT_DISABLE_AUTO_REGEN=1`
|
|
2429
|
+
- Disable during bulk ops: `with graphproj.auto_regen.disable_regen():`
|
|
2430
|
+
|
|
2431
|
+
See `docs/GRAPH_AUTO_REGEN.md`.
|
|
2432
|
+
|
|
2433
|
+
## Harris Swimlane Editor
|
|
2434
|
+
|
|
2435
|
+
Since 2.4.0, the Harris Matrix Creator at `/harris-creator/editor`
|
|
2436
|
+
displays stratigraphic graphs with **yEd-like swimlanes** — horizontal
|
|
2437
|
+
rows representing periods+phases. Existing US records are auto-placed
|
|
2438
|
+
in their row based on `periodo_iniziale + fase_iniziale`. Users can
|
|
2439
|
+
drag US records between rows, create new rows interactively, and save
|
|
2440
|
+
back to the DB.
|
|
2441
|
+
|
|
2442
|
+
Row source priority:
|
|
2443
|
+
1. `period_table` (formal definitions)
|
|
2444
|
+
2. Fallback: distinct `(periodo_iniziale, fase_iniziale)` from
|
|
2445
|
+
`periodizzazione_table` + `us_table`
|
|
2446
|
+
|
|
2447
|
+
### Two GraphML outputs
|
|
2448
|
+
|
|
2449
|
+
- `data/paradata/<site>/stratigraphy.graphml` (Spec 2, auto-regen):
|
|
2450
|
+
s3dgraphy clean, EM-canonical, for the EM Datacenter
|
|
2451
|
+
- `data/exports/harris_yed/<site>-harris-yed.graphml` (Spec 3-bis,
|
|
2452
|
+
on-demand): yEd-flavored with `y:TableNode`, for users editing in
|
|
2453
|
+
yEd Desktop
|
|
2454
|
+
|
|
2455
|
+
### Auto-regen integration
|
|
2456
|
+
|
|
2457
|
+
Save endpoint also triggers Spec 2's auto_regen for
|
|
2458
|
+
`stratigraphy.graphml`, keeping the canonical output consistent with
|
|
2459
|
+
DB state.
|
|
2460
|
+
|
|
2461
|
+
See `docs/HARRIS_SWIMLANE.md` and `docs/YED_INTEGRATION.md`.
|
|
@@ -2264,4 +2264,95 @@ This project is licensed under the GNU General Public License v2.0 - see the [LI
|
|
|
2264
2264
|
---
|
|
2265
2265
|
|
|
2266
2266
|
|
|
2267
|
-
**Made with ❤️ for the Archaeological Community**
|
|
2267
|
+
**Made with ❤️ for the Archaeological Community**
|
|
2268
|
+
|
|
2269
|
+
## s3dgraphy integration
|
|
2270
|
+
|
|
2271
|
+
Since 2.2.0-alpha, pyarchinit-mini-web reads the canonical Extended Matrix
|
|
2272
|
+
vocabulary (unit types, edge types, visual styles) from the
|
|
2273
|
+
[s3dgraphy](https://github.com/zalmoxes-laran/s3dgraphy) package's JSON
|
|
2274
|
+
catalogues. Unit types like `US`, `USVs`, `USVn`, `RSF`, `USM` come from
|
|
2275
|
+
`s3Dgraphy_node_datamodel.json` (v1.5.4 at time of writing).
|
|
2276
|
+
|
|
2277
|
+
Bumping s3dgraphy (`pip install --upgrade s3dgraphy`) makes new EM types
|
|
2278
|
+
immediately available in form selects without any pyarchinit-mini code change.
|
|
2279
|
+
|
|
2280
|
+
After upgrading, run the data alignment to update legacy records:
|
|
2281
|
+
|
|
2282
|
+
```bash
|
|
2283
|
+
pyarchinit-mini-migrate-vocab --dry-run # preview changes
|
|
2284
|
+
pyarchinit-mini-migrate-vocab --apply # backup + migrate
|
|
2285
|
+
```
|
|
2286
|
+
|
|
2287
|
+
See `docs/CLI_MIGRATE_VOCAB.md` for the full CLI reference.
|
|
2288
|
+
|
|
2289
|
+
The vocab is exposed to the browser via:
|
|
2290
|
+
|
|
2291
|
+
- `GET /api/v1/vocab/unit-types?lang=it`
|
|
2292
|
+
- `GET /api/v1/vocab/unit-types/<abbr>`
|
|
2293
|
+
- `GET /api/v1/vocab/edge-types?lang=it`
|
|
2294
|
+
- `GET /api/v1/vocab/visual-style/<unit_type>`
|
|
2295
|
+
- `GET /api/v1/vocab/diagnostics` (admin-only)
|
|
2296
|
+
|
|
2297
|
+
## Graph projection & paradata
|
|
2298
|
+
|
|
2299
|
+
Since 2.3.0-alpha, pyarchinit-mini-web auto-generates the stratigraphic graph
|
|
2300
|
+
as a GraphML file every time you save a US/USM record. Output lives at
|
|
2301
|
+
`data/paradata/<site_slug>/stratigraphy.graphml`.
|
|
2302
|
+
|
|
2303
|
+
Paradata (authors, licenses, embargoes, documents, epochs) are stored in a
|
|
2304
|
+
JSON sidecar:
|
|
2305
|
+
```
|
|
2306
|
+
data/paradata/<site_slug>/paradata.json
|
|
2307
|
+
```
|
|
2308
|
+
because s3dgraphy 0.1.42's GraphML exporter does not round-trip standalone
|
|
2309
|
+
paradata nodes. The JSON sidecar IS committed to git.
|
|
2310
|
+
|
|
2311
|
+
### Paradata editing
|
|
2312
|
+
|
|
2313
|
+
Visit `/paradata/<site>/{authors,licenses,embargoes,documents,epochs}` to
|
|
2314
|
+
manage paradata. REST endpoints under `/api/v1/paradata/<site>/...` mirror
|
|
2315
|
+
the UI. See `docs/PARADATA_GUIDE.md`.
|
|
2316
|
+
|
|
2317
|
+
### Graph import
|
|
2318
|
+
|
|
2319
|
+
`/sites/<site>/graph/import-preview` accepts a GraphML upload; you see a
|
|
2320
|
+
preview of planned INSERT/UPDATE/SKIP and must confirm via
|
|
2321
|
+
`/sites/<site>/graph/import-apply` before any DB write.
|
|
2322
|
+
|
|
2323
|
+
### Auto-regen control
|
|
2324
|
+
|
|
2325
|
+
- Disable globally: `export PYARCHINIT_DISABLE_AUTO_REGEN=1`
|
|
2326
|
+
- Disable during bulk ops: `with graphproj.auto_regen.disable_regen():`
|
|
2327
|
+
|
|
2328
|
+
See `docs/GRAPH_AUTO_REGEN.md`.
|
|
2329
|
+
|
|
2330
|
+
## Harris Swimlane Editor
|
|
2331
|
+
|
|
2332
|
+
Since 2.4.0, the Harris Matrix Creator at `/harris-creator/editor`
|
|
2333
|
+
displays stratigraphic graphs with **yEd-like swimlanes** — horizontal
|
|
2334
|
+
rows representing periods+phases. Existing US records are auto-placed
|
|
2335
|
+
in their row based on `periodo_iniziale + fase_iniziale`. Users can
|
|
2336
|
+
drag US records between rows, create new rows interactively, and save
|
|
2337
|
+
back to the DB.
|
|
2338
|
+
|
|
2339
|
+
Row source priority:
|
|
2340
|
+
1. `period_table` (formal definitions)
|
|
2341
|
+
2. Fallback: distinct `(periodo_iniziale, fase_iniziale)` from
|
|
2342
|
+
`periodizzazione_table` + `us_table`
|
|
2343
|
+
|
|
2344
|
+
### Two GraphML outputs
|
|
2345
|
+
|
|
2346
|
+
- `data/paradata/<site>/stratigraphy.graphml` (Spec 2, auto-regen):
|
|
2347
|
+
s3dgraphy clean, EM-canonical, for the EM Datacenter
|
|
2348
|
+
- `data/exports/harris_yed/<site>-harris-yed.graphml` (Spec 3-bis,
|
|
2349
|
+
on-demand): yEd-flavored with `y:TableNode`, for users editing in
|
|
2350
|
+
yEd Desktop
|
|
2351
|
+
|
|
2352
|
+
### Auto-regen integration
|
|
2353
|
+
|
|
2354
|
+
Save endpoint also triggers Spec 2's auto_regen for
|
|
2355
|
+
`stratigraphy.graphml`, keeping the canonical output consistent with
|
|
2356
|
+
DB state.
|
|
2357
|
+
|
|
2358
|
+
See `docs/HARRIS_SWIMLANE.md` and `docs/YED_INTEGRATION.md`.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""CLI: pyarchinit-mini-migrate-vocab
|
|
2
|
+
|
|
3
|
+
Wraps the 3 Spec 1 Foundation migrations (node_uuid schema → backfill →
|
|
4
|
+
vocab alignment USVA/USVB→USVs USVC→USVn) and the backup module.
|
|
5
|
+
|
|
6
|
+
Discovery order for target DBs:
|
|
7
|
+
1. --database <url> (CLI flag, wins outright)
|
|
8
|
+
2. $DATABASE_URL (default app DB)
|
|
9
|
+
3. data/connections.json (saved web connections; skip with --only-default)
|
|
10
|
+
|
|
11
|
+
Usage examples:
|
|
12
|
+
pyarchinit-mini-migrate-vocab --dry-run
|
|
13
|
+
pyarchinit-mini-migrate-vocab --apply --yes
|
|
14
|
+
pyarchinit-mini-migrate-vocab --rollback --yes
|
|
15
|
+
pyarchinit-mini-migrate-vocab --list-backups
|
|
16
|
+
pyarchinit-mini-migrate-vocab --apply --script vocab_alignment --database sqlite:///x.db --yes
|
|
17
|
+
"""
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import argparse
|
|
21
|
+
import importlib
|
|
22
|
+
import json
|
|
23
|
+
import os
|
|
24
|
+
import sys
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
|
|
27
|
+
# Use importlib to avoid name collisions with the legacy DatabaseMigrations
|
|
28
|
+
# class exported from pyarchinit_mini.database.migrations.__init__.
|
|
29
|
+
_pkg = "pyarchinit_mini.database.migrations"
|
|
30
|
+
schema_m = importlib.import_module(f"{_pkg}._2026_05_node_uuid_schema")
|
|
31
|
+
backfill_m = importlib.import_module(f"{_pkg}._2026_05_node_uuid_backfill")
|
|
32
|
+
align_m = importlib.import_module(f"{_pkg}._2026_05_vocab_alignment")
|
|
33
|
+
|
|
34
|
+
from pyarchinit_mini.database.migrations.backup import backup_database # noqa: E402
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
SCRIPTS = {
|
|
38
|
+
"node_uuid_schema": schema_m,
|
|
39
|
+
"node_uuid_backfill": backfill_m,
|
|
40
|
+
"vocab_alignment": align_m,
|
|
41
|
+
}
|
|
42
|
+
ORDER = ["node_uuid_schema", "node_uuid_backfill", "vocab_alignment"]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _discover_dbs(args) -> list[str]:
|
|
46
|
+
if args.database:
|
|
47
|
+
return [args.database]
|
|
48
|
+
dbs: list[str] = []
|
|
49
|
+
env = os.environ.get("DATABASE_URL")
|
|
50
|
+
if env:
|
|
51
|
+
dbs.append(env)
|
|
52
|
+
if not args.only_default:
|
|
53
|
+
conns = Path("data/connections.json")
|
|
54
|
+
if conns.exists():
|
|
55
|
+
try:
|
|
56
|
+
data = json.loads(conns.read_text(encoding="utf-8"))
|
|
57
|
+
for entry in data.get("connections", []):
|
|
58
|
+
url = entry.get("url")
|
|
59
|
+
if url and url not in dbs:
|
|
60
|
+
dbs.append(url)
|
|
61
|
+
except json.JSONDecodeError:
|
|
62
|
+
print(f"warning: could not parse {conns}", file=sys.stderr)
|
|
63
|
+
return dbs
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _confirm(prompt: str, yes: bool) -> bool:
|
|
67
|
+
if yes:
|
|
68
|
+
return True
|
|
69
|
+
try:
|
|
70
|
+
ans = input(f"{prompt} [y/N] ").strip().lower()
|
|
71
|
+
except EOFError:
|
|
72
|
+
return False
|
|
73
|
+
return ans == "y"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _list_backups(backups_dir: Path) -> int:
|
|
77
|
+
idx = backups_dir / "_index.json"
|
|
78
|
+
if not idx.exists():
|
|
79
|
+
print("No backups found.")
|
|
80
|
+
return 0
|
|
81
|
+
for r in json.loads(idx.read_text(encoding="utf-8")):
|
|
82
|
+
print(f"{r['timestamp']} {r['backup_path']} ({r['size_bytes']} bytes)")
|
|
83
|
+
return 0
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def main(argv=None) -> int:
|
|
87
|
+
p = argparse.ArgumentParser(
|
|
88
|
+
prog="pyarchinit-mini-migrate-vocab",
|
|
89
|
+
description="Foundation migrations: node_uuid schema + backfill + vocab alignment.",
|
|
90
|
+
)
|
|
91
|
+
mode = p.add_mutually_exclusive_group(required=True)
|
|
92
|
+
mode.add_argument("--dry-run", action="store_true", help="Report changes without mutating")
|
|
93
|
+
mode.add_argument("--apply", action="store_true", help="Backup then apply migrations")
|
|
94
|
+
mode.add_argument("--rollback", action="store_true", help="(Manual) restore from backup")
|
|
95
|
+
mode.add_argument("--list-backups", action="store_true", help="List recorded backups")
|
|
96
|
+
p.add_argument("--database", type=str, help="Target a specific DB URL")
|
|
97
|
+
p.add_argument("--script", type=str, choices=list(SCRIPTS.keys()),
|
|
98
|
+
help="Run a single script (advanced)")
|
|
99
|
+
p.add_argument("--only-default", action="store_true",
|
|
100
|
+
help="Skip data/connections.json discovery")
|
|
101
|
+
p.add_argument("--backups-dir", type=Path, default=Path("data/backups"))
|
|
102
|
+
p.add_argument("--yes", action="store_true", help="Skip confirmation prompts")
|
|
103
|
+
args = p.parse_args(argv)
|
|
104
|
+
|
|
105
|
+
if args.list_backups:
|
|
106
|
+
return _list_backups(args.backups_dir)
|
|
107
|
+
|
|
108
|
+
if args.rollback:
|
|
109
|
+
# TODO(Spec-2): implement actual rollback (read _index.json → restore latest backup
|
|
110
|
+
# SQLite via cp / PG via pg_restore). Currently prints manual instructions only.
|
|
111
|
+
print("Rollback requires manual restore. Use --list-backups to see what's available,")
|
|
112
|
+
print("then copy/restore the backup file manually (SQLite) or pg_restore (PostgreSQL).")
|
|
113
|
+
return 0
|
|
114
|
+
|
|
115
|
+
dbs = _discover_dbs(args)
|
|
116
|
+
if not dbs:
|
|
117
|
+
print("No databases discovered. Use --database <url> or set DATABASE_URL.",
|
|
118
|
+
file=sys.stderr)
|
|
119
|
+
return 2
|
|
120
|
+
|
|
121
|
+
scripts_to_run = (
|
|
122
|
+
[SCRIPTS[args.script]] if args.script
|
|
123
|
+
else [SCRIPTS[k] for k in ORDER]
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
# TODO(Spec-2): acquire data/.migration_lock (PID + timestamp) to reject concurrent
|
|
127
|
+
# --apply invocations per Spec §6.3
|
|
128
|
+
overall_status = 0
|
|
129
|
+
for db in dbs:
|
|
130
|
+
print(f"== DB: {db} ==")
|
|
131
|
+
if args.apply:
|
|
132
|
+
if not _confirm(f"Backup and migrate {db}?", args.yes):
|
|
133
|
+
print(" skipped (no confirmation)")
|
|
134
|
+
continue
|
|
135
|
+
try:
|
|
136
|
+
rec = backup_database(db, backups_dir=args.backups_dir)
|
|
137
|
+
print(f" backup: {rec.backup_path}")
|
|
138
|
+
except Exception as e:
|
|
139
|
+
print(f" backup failed: {e}", file=sys.stderr)
|
|
140
|
+
overall_status = 1
|
|
141
|
+
continue
|
|
142
|
+
for script in scripts_to_run:
|
|
143
|
+
try:
|
|
144
|
+
report = script.run(db, dry_run=args.dry_run)
|
|
145
|
+
print(f" {report.script}: status={report.status}")
|
|
146
|
+
if hasattr(report, "tables_changed") and report.tables_changed:
|
|
147
|
+
print(f" tables_changed: {report.tables_changed}")
|
|
148
|
+
if hasattr(report, "tables_skipped") and report.tables_skipped:
|
|
149
|
+
print(f" tables_skipped: {report.tables_skipped}")
|
|
150
|
+
if hasattr(report, "rows_updated"):
|
|
151
|
+
print(f" rows_updated: {report.rows_updated}")
|
|
152
|
+
if hasattr(report, "mappings"):
|
|
153
|
+
print(f" mappings: {report.mappings}")
|
|
154
|
+
except Exception as e:
|
|
155
|
+
print(f" {script.__name__} FAILED: {e}", file=sys.stderr)
|
|
156
|
+
overall_status = 1
|
|
157
|
+
|
|
158
|
+
# TODO(Spec-2): append per-script JSON-line entry to data/migration.log per Spec §6.4
|
|
159
|
+
# (ts, script, db, rows_updated/mappings/tables_*, duration_ms, status)
|
|
160
|
+
return overall_status
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
if __name__ == "__main__":
|
|
164
|
+
sys.exit(main())
|