pyarchinit-mini 2.4.2__tar.gz → 2.4.4__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.4.2 → pyarchinit_mini-2.4.4}/CHANGELOG.md +69 -0
- {pyarchinit_mini-2.4.2/pyarchinit_mini.egg-info → pyarchinit_mini-2.4.4}/PKG-INFO +1 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/__init__.py +1 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/__init__.py +39 -0
- pyarchinit_mini-2.4.4/pyarchinit_mini/harris_swimlane/period_sync_service.py +111 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/row_provider.py +23 -13
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/swimlane_state.py +57 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/harris_matrix.py +4 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/inventario_materiali.py +3 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/us.py +4 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/harris_creator_routes.py +2 -3
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +19 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyproject.toml +1 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/fixtures/_generate_harris_swimlane_synthetic.py +18 -17
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_swimlane_routes_create_row.py +6 -3
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_swimlane_routes_session_missing.py +26 -6
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_period_sync.py +28 -12
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_row_provider.py +30 -33
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_state_load.py +6 -8
- pyarchinit_mini-2.4.2/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -90
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/MANIFEST.in +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/README.md +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/babel.cfg +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/media_viewer_demo.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_mini 2.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_mini.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_mini_sample.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_tutorial.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_tutorial_clean.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_tutorial_video.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_v18_demo.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/logo/logo_pyarchinit-mini.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/auth.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/dependencies.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/graphml.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/inventario.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/schemas.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/site.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/sync.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/us.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/export_import_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/graphml_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/harris_import.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/harris_template.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/migrate.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/sync_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli_interface/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/config/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/config/connection_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/config/em_node_types.yaml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/concurrency_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/connection.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/database_creator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/backup.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/postgres_installer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/schemas.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/utils.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/icons.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/dto/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/dto/inventario_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/dto/site_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/dto/us_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/converter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_io/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_io/reader.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_io/writer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/filesystem.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/ingestor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/projector.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/i18n/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/i18n/locale_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/__main__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/config.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/http_server.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/server.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/media_manager/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/media_manager/media_handler.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/ai_chat.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/app_setting.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/base.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/datazione.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/extended_matrix.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/media.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/pottery.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/site.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/thesaurus.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/tma.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/user.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/auto_translate.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/setup_auth.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/verify_docs.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/ai_chat_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/analytics_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/app_setting_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/backup_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/command_parser.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/datazione_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/export_import_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/import_export_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/inventario_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/mcp_executor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/media_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/pottery_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/pottery_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/search_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/site_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/thesaurus_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/tma_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/us_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/user_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/messages.pot +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/auth.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/relationship_validator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/validators.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/i18n.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/loader.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/provider.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/translations/vocab_it.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/types.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/app.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/base.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/SOURCES.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/requires.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/top_level.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/requirements.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/setup.cfg +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/setup.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/conftest.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/e2e/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/e2e/test_web_vocab_full_flow.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/fixtures/_generate_baseline_graphml.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/fixtures/_generate_synthetic_db.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/fixtures/build_legacy_with_pottery.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_admin_ai_settings_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_admin_backup_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_auto_regen_on_save.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_full_sync_flow.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_graph_import_flow.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_graph_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_migrate_vocab_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_paradata_routes_authors.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_paradata_routes_other_types.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_paradata_ui.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_pottery_completion.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_pottery_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_spec2_coverage_gaps.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_vocab_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_yed_export_route.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_yed_writer_parity.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_app_setting_model.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_app_setting_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_auto_regen.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_backup_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_bundle.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_concurrency_columns.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_concurrency_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_database_utils.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_deprecated_writers_shim.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_em_palette_vocab_backed.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphml_io_reader.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphml_io_writer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_edge_registry.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_filesystem.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_projector.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_state_save.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_ingest_plan.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_inventario_schema.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_migrations_backup.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_migrations_idempotent.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_optimistic_locking.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_paradata_store_authors.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_paradata_store_basic.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_paradata_store_other_types.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_pottery_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_pottery_model.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_pottery_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_site_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_api.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_queue.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_state_machine.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_us_schema.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_uuid_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_i18n.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_loader.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_provider.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_types.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_yed_writer.py +0 -0
|
@@ -1,3 +1,72 @@
|
|
|
1
|
+
## [2.4.4] - 2026-05-18
|
|
2
|
+
|
|
3
|
+
### Fixed (IT)
|
|
4
|
+
- Nodi US dell'editor swimlane ora hanno `data.color` (risolto via
|
|
5
|
+
`VocabProvider.get_visual_style().fill_color`). Stop ai warning Cytoscape
|
|
6
|
+
"no mapping for property background-color with data field color".
|
|
7
|
+
- Edge stratigrafici deduplicati: `_build_edges` ora ignora le coppie
|
|
8
|
+
doppie `(source, target, edge_name)` e tratta gli inversi `overlies` /
|
|
9
|
+
`is_after` come la stessa relazione (un solo arco invece di due).
|
|
10
|
+
- Editor lancia un layout `dagre` dopo `cy.add()` + `cy.fit()`, così gli US
|
|
11
|
+
si distribuiscono dentro le row e gli archi diventano visibili.
|
|
12
|
+
|
|
13
|
+
### Added (IT)
|
|
14
|
+
- Modelli SQLAlchemy `US`, `InventarioMateriali`, `Periodizzazione` ora
|
|
15
|
+
definiscono la colonna `node_uuid = Column(String(36))`. Un DB nuovo
|
|
16
|
+
creato via `Base.metadata.create_all()` nasce con la colonna corretta.
|
|
17
|
+
- `DatabaseMigrations.migrate_all_tables()` chiama automaticamente le 3
|
|
18
|
+
migration di Spec 1 (`_2026_05_node_uuid_schema`, `_node_uuid_backfill`,
|
|
19
|
+
`_vocab_alignment`) idempotentemente. Conseguenza: i DB esistenti
|
|
20
|
+
(SQLite o PostgreSQL) vengono aggiornati al primo avvio del web —
|
|
21
|
+
nessun bisogno di lanciare manualmente `pyarchinit-mini-migrate-vocab`.
|
|
22
|
+
|
|
23
|
+
### Fixed (EN)
|
|
24
|
+
- US nodes in the swimlane editor now carry `data.color`, resolved through
|
|
25
|
+
`VocabProvider.get_visual_style().fill_color`. Eliminates Cytoscape
|
|
26
|
+
warnings about missing color mapping.
|
|
27
|
+
- Stratigraphic edges deduplicated: `_build_edges` ignores duplicate
|
|
28
|
+
`(source, target, edge_name)` triples and treats `overlies` / `is_after`
|
|
29
|
+
inverse pairs as the same edge (one arrow, not two).
|
|
30
|
+
- Editor runs a `dagre` layout after `cy.add()` plus a `cy.fit()` so US
|
|
31
|
+
children spread inside their swimlane row and edges become visible.
|
|
32
|
+
|
|
33
|
+
### Added (EN)
|
|
34
|
+
- SQLAlchemy models `US`, `InventarioMateriali`, `Periodizzazione` now
|
|
35
|
+
declare `node_uuid = Column(String(36))`. New DBs created via
|
|
36
|
+
`Base.metadata.create_all()` have the column from the start.
|
|
37
|
+
- `DatabaseMigrations.migrate_all_tables()` now invokes the 3 Spec 1
|
|
38
|
+
migrations (`node_uuid_schema`, `node_uuid_backfill`, `vocab_alignment`)
|
|
39
|
+
idempotently. Existing SQLite or PostgreSQL DBs get auto-upgraded on
|
|
40
|
+
the first web startup — no need to run `pyarchinit-mini-migrate-vocab`
|
|
41
|
+
by hand.
|
|
42
|
+
|
|
43
|
+
## [2.4.3] - 2026-05-18
|
|
44
|
+
|
|
45
|
+
### Fixed (IT)
|
|
46
|
+
- `RowProvider` e `PeriodSyncService` ora usano lo schema reale di pyarchinit
|
|
47
|
+
per `period_table` (`periodo` / `fase` / `datazione` / `sito`) invece dello
|
|
48
|
+
schema ipotetico Spec 3-bis (`period_name` / `phase_name` / `start_date` /
|
|
49
|
+
`end_date`). Risolve l'HTTP 500 "la colonna 'period_name' non esiste"
|
|
50
|
+
visto in produzione su PostgreSQL `pyarchinit_v2`.
|
|
51
|
+
- `period_table` viene ora filtrato per `sito` (con fallback a righe
|
|
52
|
+
cross-site se `sito` IS NULL/''). `start_date` / `end_date` numerici non
|
|
53
|
+
esistono in produzione: nella Row dataclass restano `None` e il sort è
|
|
54
|
+
alfabetico per `(periodo, fase)`. Le date numeriche passate da `+ New
|
|
55
|
+
Row` vengono serializzate nella colonna `datazione` come `start..end`.
|
|
56
|
+
- Fixture sintetica `sqlite_volterra_30us_with_periods.db` e i test
|
|
57
|
+
associati (row_provider, period_sync, state_load, integration routes)
|
|
58
|
+
rigenerati con lo schema reale.
|
|
59
|
+
|
|
60
|
+
### Fixed (EN)
|
|
61
|
+
- `RowProvider` and `PeriodSyncService` now use pyarchinit's real
|
|
62
|
+
`period_table` schema (`periodo` / `fase` / `datazione` / `sito`).
|
|
63
|
+
Fixes the HTTP 500 "column 'period_name' does not exist" against the
|
|
64
|
+
production PostgreSQL DB.
|
|
65
|
+
- Numeric `start_date` / `end_date` are no longer expected as columns; the
|
|
66
|
+
Row dataclass leaves them `None`, rows are sorted alphabetically by
|
|
67
|
+
`(periodo, fase)`, and date inputs from the editor are serialized into
|
|
68
|
+
the existing `datazione` text column as `start..end`.
|
|
69
|
+
|
|
1
70
|
## [2.4.2] - 2026-05-18
|
|
2
71
|
|
|
3
72
|
### Fixed (IT)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.4
|
|
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
|
{pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/__init__.py
RENAMED
|
@@ -803,6 +803,14 @@ class DatabaseMigrations:
|
|
|
803
803
|
except Exception as e:
|
|
804
804
|
logger.warning(f"TMA thesaurus trigger failed: {e}")
|
|
805
805
|
|
|
806
|
+
# Spec 1 (node_uuid + vocab alignment) — auto-applied so fresh
|
|
807
|
+
# installs and upgraded existing DBs both get the swimlane editor
|
|
808
|
+
# working without a manual `pyarchinit-mini-migrate-vocab` step.
|
|
809
|
+
try:
|
|
810
|
+
total_migrations += self._migrate_spec1_node_uuid_and_vocab()
|
|
811
|
+
except Exception as e:
|
|
812
|
+
logger.warning(f"Spec 1 node_uuid/vocab migration failed: {e}")
|
|
813
|
+
|
|
806
814
|
logger.info(f"All migrations completed. Total migrations applied: {total_migrations}")
|
|
807
815
|
return total_migrations
|
|
808
816
|
|
|
@@ -810,6 +818,37 @@ class DatabaseMigrations:
|
|
|
810
818
|
logger.error(f"Error during database migrations: {e}")
|
|
811
819
|
raise
|
|
812
820
|
|
|
821
|
+
def _migrate_spec1_node_uuid_and_vocab(self) -> int:
|
|
822
|
+
"""Apply Spec 1 migrations idempotently: node_uuid schema, backfill,
|
|
823
|
+
vocab alignment (USVA/USVB→USVs, USVC→USVn). Each underlying script
|
|
824
|
+
is a no-op when nothing needs changing, so this is safe to call on
|
|
825
|
+
every startup."""
|
|
826
|
+
import importlib
|
|
827
|
+
|
|
828
|
+
pkg = "pyarchinit_mini.database.migrations"
|
|
829
|
+
scripts = [
|
|
830
|
+
f"{pkg}._2026_05_node_uuid_schema",
|
|
831
|
+
f"{pkg}._2026_05_node_uuid_backfill",
|
|
832
|
+
f"{pkg}._2026_05_vocab_alignment",
|
|
833
|
+
]
|
|
834
|
+
url = str(self.connection.engine.url)
|
|
835
|
+
applied = 0
|
|
836
|
+
for mod_path in scripts:
|
|
837
|
+
try:
|
|
838
|
+
mod = importlib.import_module(mod_path)
|
|
839
|
+
report = mod.run(url, dry_run=False)
|
|
840
|
+
status = getattr(report, "status", "ok")
|
|
841
|
+
if status == "ok":
|
|
842
|
+
rows = getattr(report, "rows_updated", None)
|
|
843
|
+
tables = getattr(report, "tables_changed", None)
|
|
844
|
+
mappings = getattr(report, "mappings", None)
|
|
845
|
+
if rows or tables or mappings:
|
|
846
|
+
applied += 1
|
|
847
|
+
logger.info(f"{mod_path}: {tables or rows or mappings}")
|
|
848
|
+
except Exception as e:
|
|
849
|
+
logger.warning(f"{mod_path} failed: {e}")
|
|
850
|
+
return applied
|
|
851
|
+
|
|
813
852
|
def get_table_info(self, table_name: str) -> Dict[str, Any]:
|
|
814
853
|
"""Get information about a table structure"""
|
|
815
854
|
try:
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""PeriodSyncService — interactive row creation upserts period_table.
|
|
2
|
+
|
|
3
|
+
When user creates a new swimlane row in the editor, this service ensures
|
|
4
|
+
a corresponding ``period_table`` entry exists. Uses the real pyarchinit
|
|
5
|
+
schema: ``periodo`` / ``fase`` / ``datazione`` (NO numeric start/end columns).
|
|
6
|
+
|
|
7
|
+
Caller-supplied ``start_date`` / ``end_date`` (ints) are stringified into
|
|
8
|
+
``datazione`` as ``"start..end"`` when both provided, single year otherwise.
|
|
9
|
+
On promote (``maybe_promote_fallback``), idempotency is on ``(periodo, fase)``.
|
|
10
|
+
"""
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from typing import Optional
|
|
14
|
+
|
|
15
|
+
from sqlalchemy import text
|
|
16
|
+
from sqlalchemy.orm import Session
|
|
17
|
+
|
|
18
|
+
from .compound_layout import derive_row_id
|
|
19
|
+
from .exceptions import PeriodSyncError
|
|
20
|
+
from .row_provider import Row, PERIOD_COLORS
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _format_datazione(start: Optional[int], end: Optional[int]) -> Optional[str]:
|
|
24
|
+
if start is None and end is None:
|
|
25
|
+
return None
|
|
26
|
+
if start is not None and end is not None:
|
|
27
|
+
return f"{start}..{end}"
|
|
28
|
+
return str(start if start is not None else end)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class PeriodSyncService:
|
|
32
|
+
def __init__(self, session: Session, site: Optional[str] = None) -> None:
|
|
33
|
+
self.session = session
|
|
34
|
+
self.site = site
|
|
35
|
+
|
|
36
|
+
def upsert_row(self, period_name: str, phase_name: Optional[str] = None,
|
|
37
|
+
start_date: Optional[int] = None,
|
|
38
|
+
end_date: Optional[int] = None) -> Row:
|
|
39
|
+
if not period_name or not period_name.strip():
|
|
40
|
+
raise PeriodSyncError("period_name is required",
|
|
41
|
+
period_name=period_name, phase_name=phase_name)
|
|
42
|
+
if start_date is not None and end_date is not None and start_date > end_date:
|
|
43
|
+
raise PeriodSyncError(
|
|
44
|
+
"start_date must be <= end_date",
|
|
45
|
+
period_name=period_name, phase_name=phase_name,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
existing = self.session.execute(text(
|
|
49
|
+
"SELECT id_period FROM period_table "
|
|
50
|
+
"WHERE periodo = :p AND "
|
|
51
|
+
"(fase = :ph OR (fase IS NULL AND :ph IS NULL))"
|
|
52
|
+
), {"p": period_name, "ph": phase_name}).fetchone()
|
|
53
|
+
|
|
54
|
+
if existing is None:
|
|
55
|
+
self.session.execute(text(
|
|
56
|
+
"INSERT INTO period_table (sito, periodo, fase, datazione) "
|
|
57
|
+
"VALUES (:s, :p, :ph, :dz)"
|
|
58
|
+
), {
|
|
59
|
+
"s": self.site,
|
|
60
|
+
"p": period_name,
|
|
61
|
+
"ph": phase_name,
|
|
62
|
+
"dz": _format_datazione(start_date, end_date),
|
|
63
|
+
})
|
|
64
|
+
self.session.commit()
|
|
65
|
+
|
|
66
|
+
row_id = derive_row_id(period_name, phase_name)
|
|
67
|
+
return Row(
|
|
68
|
+
row_id=row_id,
|
|
69
|
+
period_name=period_name,
|
|
70
|
+
phase_name=phase_name,
|
|
71
|
+
start_date=start_date,
|
|
72
|
+
end_date=end_date,
|
|
73
|
+
color=PERIOD_COLORS[0],
|
|
74
|
+
source="period_table",
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
def maybe_promote_fallback(self, site: str) -> int:
|
|
78
|
+
"""Bulk-promote distinct (periodo_iniziale, fase_iniziale) values into
|
|
79
|
+
``period_table``. Idempotent on ``(periodo, fase)``. Returns count promoted."""
|
|
80
|
+
# Bind site at promotion time so INSERTs land on the right row.
|
|
81
|
+
prev_site = self.site
|
|
82
|
+
self.site = site
|
|
83
|
+
try:
|
|
84
|
+
existing = {
|
|
85
|
+
(r[0], r[1])
|
|
86
|
+
for r in self.session.execute(text(
|
|
87
|
+
"SELECT periodo, fase FROM period_table "
|
|
88
|
+
"WHERE sito = :s OR sito IS NULL OR sito = ''"
|
|
89
|
+
), {"s": site}).fetchall()
|
|
90
|
+
}
|
|
91
|
+
candidates = self.session.execute(text(
|
|
92
|
+
"SELECT DISTINCT periodo_iniziale, fase_iniziale "
|
|
93
|
+
"FROM periodizzazione_table WHERE sito = :s "
|
|
94
|
+
"UNION "
|
|
95
|
+
"SELECT DISTINCT periodo_iniziale, fase_iniziale "
|
|
96
|
+
"FROM us_table WHERE sito = :s"
|
|
97
|
+
), {"s": site}).fetchall()
|
|
98
|
+
count = 0
|
|
99
|
+
for period, phase in candidates:
|
|
100
|
+
if not period:
|
|
101
|
+
continue
|
|
102
|
+
if (period, phase) in existing:
|
|
103
|
+
continue
|
|
104
|
+
try:
|
|
105
|
+
self.upsert_row(period_name=period, phase_name=phase)
|
|
106
|
+
count += 1
|
|
107
|
+
except PeriodSyncError:
|
|
108
|
+
continue
|
|
109
|
+
return count
|
|
110
|
+
finally:
|
|
111
|
+
self.site = prev_site
|
{pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/row_provider.py
RENAMED
|
@@ -55,18 +55,28 @@ class RowProvider:
|
|
|
55
55
|
return None
|
|
56
56
|
|
|
57
57
|
def _load_from_period_table(self) -> list[Row]:
|
|
58
|
+
"""Load rows from ``period_table`` using the real pyarchinit schema.
|
|
59
|
+
|
|
60
|
+
pyarchinit's ``period_table`` ships with columns ``periodo`` /
|
|
61
|
+
``fase`` / ``datazione`` / ``sito`` — there are no numeric
|
|
62
|
+
``start_date`` / ``end_date`` columns, so we leave those as ``None``
|
|
63
|
+
and sort alphabetically. The ``sito`` column is filtered when
|
|
64
|
+
present (cross-site rows with NULL/empty ``sito`` are still kept,
|
|
65
|
+
matching legacy pyarchinit behaviour).
|
|
66
|
+
"""
|
|
58
67
|
# SQLite < 3.30 doesn't support NULLS LAST. Sort in Python for portability.
|
|
59
|
-
result = self.session.execute(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
result = self.session.execute(
|
|
69
|
+
text(
|
|
70
|
+
"SELECT periodo, fase, datazione "
|
|
71
|
+
"FROM period_table "
|
|
72
|
+
"WHERE sito = :sito OR sito IS NULL OR sito = ''"
|
|
73
|
+
),
|
|
74
|
+
{"sito": self.site},
|
|
75
|
+
).fetchall()
|
|
76
|
+
sorted_result = sorted(
|
|
77
|
+
(r for r in result if r[0]),
|
|
78
|
+
key=lambda r: (r[0] or "", r[1] or ""),
|
|
79
|
+
)
|
|
70
80
|
out = []
|
|
71
81
|
for i, r in enumerate(sorted_result):
|
|
72
82
|
period = r[0]
|
|
@@ -76,8 +86,8 @@ class RowProvider:
|
|
|
76
86
|
row_id=row_id,
|
|
77
87
|
period_name=period,
|
|
78
88
|
phase_name=phase,
|
|
79
|
-
start_date=
|
|
80
|
-
end_date=
|
|
89
|
+
start_date=None,
|
|
90
|
+
end_date=None,
|
|
81
91
|
color=PERIOD_COLORS[i % len(PERIOD_COLORS)],
|
|
82
92
|
source="period_table",
|
|
83
93
|
))
|
{pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/swimlane_state.py
RENAMED
|
@@ -52,6 +52,27 @@ class SwimlaneState:
|
|
|
52
52
|
provider = RowProvider(session, site)
|
|
53
53
|
rows = provider.list_rows()
|
|
54
54
|
|
|
55
|
+
# Resolve unit_type → fill_color via VocabProvider once per request so
|
|
56
|
+
# the editor's `'background-color': data(color)` style renders properly.
|
|
57
|
+
try:
|
|
58
|
+
from pyarchinit_mini.vocab.provider import VocabProvider
|
|
59
|
+
_vocab = VocabProvider.instance()
|
|
60
|
+
_color_cache: dict[str, str] = {}
|
|
61
|
+
|
|
62
|
+
def _color_for(ut: str) -> str:
|
|
63
|
+
if ut in _color_cache:
|
|
64
|
+
return _color_cache[ut]
|
|
65
|
+
try:
|
|
66
|
+
style = _vocab.get_visual_style(ut)
|
|
67
|
+
c = getattr(style, "fill_color", None) or "#CCCCCC"
|
|
68
|
+
except Exception:
|
|
69
|
+
c = "#CCCCCC"
|
|
70
|
+
_color_cache[ut] = c
|
|
71
|
+
return c
|
|
72
|
+
except Exception:
|
|
73
|
+
def _color_for(ut: str) -> str:
|
|
74
|
+
return "#CCCCCC"
|
|
75
|
+
|
|
55
76
|
# Load US records for site
|
|
56
77
|
us_rows = session.execute(text(
|
|
57
78
|
"SELECT id_us, sito, area, us, unita_tipo, rapporti, node_uuid, "
|
|
@@ -89,6 +110,7 @@ class SwimlaneState:
|
|
|
89
110
|
"label": f"{unita_tipo}{us_num}",
|
|
90
111
|
"parent": parent_row_id,
|
|
91
112
|
"unit_type": unita_tipo,
|
|
113
|
+
"color": _color_for(unita_tipo),
|
|
92
114
|
"period": periodo,
|
|
93
115
|
"phase": fase,
|
|
94
116
|
"us": us_num,
|
|
@@ -124,15 +146,33 @@ class SwimlaneState:
|
|
|
124
146
|
|
|
125
147
|
@staticmethod
|
|
126
148
|
def _build_edges(us_rows, us_num_to_node_id: dict) -> list[CytoscapeElement]:
|
|
127
|
-
"""Parse rapporti for each US via EdgeRegistry
|
|
149
|
+
"""Parse rapporti for each US via EdgeRegistry, deduplicating canonical
|
|
150
|
+
triples ``(source, target, edge_name)``.
|
|
151
|
+
|
|
152
|
+
pyarchinit stores stratigraphic relationships from both sides
|
|
153
|
+
(``A copre B`` on row A AND ``B coperto da A`` on row B). Both tokens
|
|
154
|
+
resolve to the same canonical edge ``A overlies B`` — without
|
|
155
|
+
deduplication the editor renders the same arrow twice.
|
|
156
|
+
|
|
157
|
+
Symmetric edge types (``has_same_time``) are deduped on the
|
|
158
|
+
unordered pair so the bidirectional view doesn't show 2 lines.
|
|
159
|
+
"""
|
|
128
160
|
try:
|
|
129
161
|
from pyarchinit_mini.graphproj.edge_registry import EdgeRegistry
|
|
130
162
|
registry = EdgeRegistry()
|
|
131
163
|
except Exception:
|
|
132
164
|
return []
|
|
133
165
|
|
|
166
|
+
# Edges where direction is meaningless (twins).
|
|
167
|
+
SYMMETRIC = {"has_same_time"}
|
|
168
|
+
# Edges that are inverses of each other (A overlies B ≡ B is_after A
|
|
169
|
+
# in stratigraphic Harris semantics). When pyarchinit stores both
|
|
170
|
+
# sides on different US rows, the editor must show one arrow, not two.
|
|
171
|
+
INVERSE_PAIRS = {"overlies": "is_after", "is_after": "overlies"}
|
|
172
|
+
|
|
134
173
|
edges: list[CytoscapeElement] = []
|
|
135
174
|
edge_counter = 0
|
|
175
|
+
seen: set[tuple] = set()
|
|
136
176
|
|
|
137
177
|
for r in us_rows:
|
|
138
178
|
us_num = r[3]
|
|
@@ -157,6 +197,22 @@ class SwimlaneState:
|
|
|
157
197
|
target_node_id = us_num_to_node_id.get(target_int)
|
|
158
198
|
if target_node_id is None:
|
|
159
199
|
continue
|
|
200
|
+
|
|
201
|
+
if edge_name in SYMMETRIC:
|
|
202
|
+
key = (edge_name, tuple(sorted((source_node_id, target_node_id))))
|
|
203
|
+
else:
|
|
204
|
+
key = (edge_name, source_node_id, target_node_id)
|
|
205
|
+
if key in seen:
|
|
206
|
+
continue
|
|
207
|
+
# Check the inverse pair (overlies vs is_after) under the same
|
|
208
|
+
# source/target pair — they represent the same edge.
|
|
209
|
+
inverse_name = INVERSE_PAIRS.get(edge_name)
|
|
210
|
+
if inverse_name is not None:
|
|
211
|
+
inverse_key = (inverse_name, target_node_id, source_node_id)
|
|
212
|
+
if inverse_key in seen:
|
|
213
|
+
continue
|
|
214
|
+
seen.add(key)
|
|
215
|
+
|
|
160
216
|
edge_counter += 1
|
|
161
217
|
edges.append(CytoscapeElement(data={
|
|
162
218
|
"id": f"e{edge_counter}",
|
|
@@ -92,7 +92,10 @@ class Periodizzazione(BaseModel):
|
|
|
92
92
|
# Confidence and notes
|
|
93
93
|
affidabilita = Column(String(50)) # 'alta', 'media', 'bassa'
|
|
94
94
|
note = Column(Text)
|
|
95
|
-
|
|
95
|
+
|
|
96
|
+
# Spec 1: stable node identity for s3dgraphy/EM graph round-trip
|
|
97
|
+
node_uuid = Column(String(36))
|
|
98
|
+
|
|
96
99
|
# Relationships
|
|
97
100
|
site_ref = relationship("Site", foreign_keys=[sito])
|
|
98
101
|
initial_period = relationship("Period", foreign_keys=[period_id_initial])
|
{pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/inventario_materiali.py
RENAMED
|
@@ -97,6 +97,9 @@ class InventarioMateriali(BaseModel):
|
|
|
97
97
|
photo_id = Column(Text)
|
|
98
98
|
drawing_id = Column(Text)
|
|
99
99
|
|
|
100
|
+
# Spec 1: stable node identity for s3dgraphy/EM graph round-trip
|
|
101
|
+
node_uuid = Column(String(36))
|
|
102
|
+
|
|
100
103
|
# Relationships
|
|
101
104
|
site_ref = relationship("Site", foreign_keys=[sito],
|
|
102
105
|
primaryjoin="InventarioMateriali.sito == Site.sito")
|
|
@@ -196,8 +196,11 @@ class US(BaseModel):
|
|
|
196
196
|
rapporti2 = Column(Text)
|
|
197
197
|
doc_usv = Column(Text)
|
|
198
198
|
|
|
199
|
+
# Spec 1: stable node identity for s3dgraphy/EM graph round-trip
|
|
200
|
+
node_uuid = Column(String(36))
|
|
201
|
+
|
|
199
202
|
# Relationships
|
|
200
|
-
site_ref = relationship("Site", foreign_keys=[sito],
|
|
203
|
+
site_ref = relationship("Site", foreign_keys=[sito],
|
|
201
204
|
primaryjoin="US.sito == Site.sito")
|
|
202
205
|
|
|
203
206
|
def __repr__(self):
|
|
@@ -758,8 +758,7 @@ def api_save_state(site: str):
|
|
|
758
758
|
|
|
759
759
|
@harris_creator_bp.post("/api/swimlanes/<site>")
|
|
760
760
|
def api_create_row(site: str):
|
|
761
|
-
"""Create a new swimlane row (upsert period_table
|
|
762
|
-
URL consistency; period_table is currently cross-site."""
|
|
761
|
+
"""Create a new swimlane row (upsert period_table for this site)."""
|
|
763
762
|
payload = request.get_json(silent=True) or {}
|
|
764
763
|
period_name = payload.get("period_name", "")
|
|
765
764
|
phase_name = payload.get("phase_name") or None
|
|
@@ -767,7 +766,7 @@ def api_create_row(site: str):
|
|
|
767
766
|
end_date = payload.get("end_date")
|
|
768
767
|
try:
|
|
769
768
|
session = _get_session()
|
|
770
|
-
svc = PeriodSyncService(session)
|
|
769
|
+
svc = PeriodSyncService(session, site=site)
|
|
771
770
|
row = svc.upsert_row(
|
|
772
771
|
period_name=period_name, phase_name=phase_name,
|
|
773
772
|
start_date=start_date, end_date=end_date,
|
|
@@ -519,6 +519,25 @@ function renderSwimlaneState(state) {
|
|
|
519
519
|
});
|
|
520
520
|
});
|
|
521
521
|
|
|
522
|
+
// Run dagre layout inside each swimlane row so US nodes spread out
|
|
523
|
+
// horizontally and stratigraphic edges become visible. Without a layout
|
|
524
|
+
// pass, all US children of a row get stacked at the row's centroid and
|
|
525
|
+
// the edges collapse into invisible zero-length segments.
|
|
526
|
+
try {
|
|
527
|
+
cy.layout({
|
|
528
|
+
name: 'dagre',
|
|
529
|
+
rankDir: 'LR',
|
|
530
|
+
nodeSep: 50,
|
|
531
|
+
rankSep: 80,
|
|
532
|
+
fit: false,
|
|
533
|
+
}).run();
|
|
534
|
+
} catch (e) {
|
|
535
|
+
console.warn('dagre layout failed, falling back to grid:', e);
|
|
536
|
+
cy.layout({name: 'grid'}).run();
|
|
537
|
+
}
|
|
538
|
+
// Fit viewport so the user actually sees the rows + nodes + edges.
|
|
539
|
+
cy.fit(undefined, 30);
|
|
540
|
+
|
|
522
541
|
// Save state references for later use
|
|
523
542
|
window._currentSite = state.site;
|
|
524
543
|
window._pendingChanges = state.pending_changes || {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.4
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyarchinit-mini"
|
|
7
|
-
version = "2.4.
|
|
7
|
+
version = "2.4.4"
|
|
8
8
|
description = "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"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "GPL-2.0"}
|
|
@@ -18,10 +18,11 @@ c = conn.cursor()
|
|
|
18
18
|
c.executescript("""
|
|
19
19
|
CREATE TABLE period_table (
|
|
20
20
|
id_period INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
sito TEXT,
|
|
22
|
+
periodo TEXT NOT NULL,
|
|
23
|
+
fase TEXT,
|
|
24
|
+
datazione TEXT,
|
|
25
|
+
descrizione TEXT
|
|
25
26
|
);
|
|
26
27
|
CREATE TABLE periodizzazione_table (
|
|
27
28
|
id_periodizzazione INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -39,24 +40,24 @@ CREATE TABLE us_table (
|
|
|
39
40
|
);
|
|
40
41
|
""")
|
|
41
42
|
|
|
42
|
-
# 5 (
|
|
43
|
+
# 5 (periodo, fase) rows on the production schema
|
|
43
44
|
periods = [
|
|
44
|
-
("Roman", "a", -27
|
|
45
|
-
("Roman", "b", 100
|
|
46
|
-
("Late Antiquity", "a", 300
|
|
47
|
-
("Medieval", "a", 600
|
|
48
|
-
("Medieval", "b", 1200
|
|
45
|
+
("Roman", "a", "-27..100"),
|
|
46
|
+
("Roman", "b", "100..300"),
|
|
47
|
+
("Late Antiquity", "a", "300..600"),
|
|
48
|
+
("Medieval", "a", "600..1200"),
|
|
49
|
+
("Medieval", "b", "1200..1500"),
|
|
49
50
|
]
|
|
50
|
-
for p, ph,
|
|
51
|
+
for p, ph, dz in periods:
|
|
51
52
|
c.execute(
|
|
52
|
-
"INSERT INTO period_table (
|
|
53
|
-
(p, ph,
|
|
53
|
+
"INSERT INTO period_table (sito, periodo, fase, datazione) VALUES (?,?,?,?)",
|
|
54
|
+
("Volterra", p, ph, dz),
|
|
54
55
|
)
|
|
55
56
|
|
|
56
57
|
# 30 US distributed
|
|
57
58
|
us_records = []
|
|
58
59
|
for i in range(30):
|
|
59
|
-
period, phase, _
|
|
60
|
+
period, phase, _ = periods[i % 5]
|
|
60
61
|
rapporti = f"copre {1000 + (i+1) % 30}" if i % 3 == 0 else ""
|
|
61
62
|
us_records.append(
|
|
62
63
|
("Volterra", "A", 1000 + i, "US",
|
|
@@ -76,11 +77,11 @@ print(f"Wrote {DB} (30 US, 5 periods)")
|
|
|
76
77
|
# Reference shape for SwimlaneState.load test
|
|
77
78
|
cytoscape = {
|
|
78
79
|
"rows": [
|
|
79
|
-
{"row_id": "row_medieval_b", "period_name": "Medieval", "phase_name": "b"},
|
|
80
|
-
{"row_id": "row_medieval_a", "period_name": "Medieval", "phase_name": "a"},
|
|
81
80
|
{"row_id": "row_late-antiquity_a", "period_name": "Late Antiquity", "phase_name": "a"},
|
|
82
|
-
{"row_id": "
|
|
81
|
+
{"row_id": "row_medieval_a", "period_name": "Medieval", "phase_name": "a"},
|
|
82
|
+
{"row_id": "row_medieval_b", "period_name": "Medieval", "phase_name": "b"},
|
|
83
83
|
{"row_id": "row_roman_a", "period_name": "Roman", "phase_name": "a"},
|
|
84
|
+
{"row_id": "row_roman_b", "period_name": "Roman", "phase_name": "b"},
|
|
84
85
|
],
|
|
85
86
|
"nodes_count": 30,
|
|
86
87
|
"edges_count_at_least": 5,
|
|
@@ -9,12 +9,15 @@ from sqlalchemy.orm import sessionmaker
|
|
|
9
9
|
def client_and_db(tmp_path):
|
|
10
10
|
db = tmp_path / "rc.db"
|
|
11
11
|
conn = sqlite3.connect(db)
|
|
12
|
+
# Real pyarchinit schema: periodo / fase / datazione / sito.
|
|
12
13
|
conn.executescript("""
|
|
13
14
|
CREATE TABLE period_table (
|
|
14
15
|
id_period INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
sito TEXT,
|
|
17
|
+
periodo TEXT,
|
|
18
|
+
fase TEXT,
|
|
19
|
+
datazione TEXT,
|
|
20
|
+
descrizione TEXT
|
|
18
21
|
);
|
|
19
22
|
""")
|
|
20
23
|
conn.commit()
|
|
@@ -5,21 +5,41 @@ had set g.db_session — but no such hook exists in the production app, so every
|
|
|
5
5
|
swimlane request 500'd. 2.4.2 lazy-acquires a session through the same path as
|
|
6
6
|
get_db_session() and binds it to g for the duration of the request.
|
|
7
7
|
"""
|
|
8
|
+
import sqlite3
|
|
9
|
+
|
|
8
10
|
import pytest
|
|
9
11
|
from flask import Flask
|
|
10
|
-
from sqlalchemy import create_engine
|
|
11
12
|
|
|
12
|
-
from pyarchinit_mini.models.base import Base
|
|
13
13
|
from pyarchinit_mini.web_interface.harris_creator_routes import harris_creator_bp
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@pytest.fixture
|
|
17
17
|
def client_no_session(tmp_path, monkeypatch):
|
|
18
18
|
db_path = tmp_path / "swimlane_lazy.db"
|
|
19
|
-
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
# Pre-create the tables Spec 3-bis queries, matching the real pyarchinit
|
|
20
|
+
# production schema (periodo / fase / datazione, not period_name / phase_name).
|
|
21
|
+
conn = sqlite3.connect(db_path)
|
|
22
|
+
conn.executescript("""
|
|
23
|
+
CREATE TABLE period_table (
|
|
24
|
+
id_period INTEGER PRIMARY KEY,
|
|
25
|
+
sito TEXT, periodo TEXT, fase TEXT, datazione TEXT, descrizione TEXT
|
|
26
|
+
);
|
|
27
|
+
CREATE TABLE periodizzazione_table (
|
|
28
|
+
id_periodizzazione INTEGER PRIMARY KEY,
|
|
29
|
+
sito TEXT, area TEXT, us INTEGER,
|
|
30
|
+
periodo_iniziale TEXT, fase_iniziale TEXT,
|
|
31
|
+
periodo_finale TEXT, fase_finale TEXT
|
|
32
|
+
);
|
|
33
|
+
CREATE TABLE us_table (
|
|
34
|
+
id_us INTEGER PRIMARY KEY,
|
|
35
|
+
sito TEXT, us INTEGER, unita_tipo TEXT,
|
|
36
|
+
rapporti TEXT, node_uuid TEXT,
|
|
37
|
+
periodo_iniziale TEXT, fase_iniziale TEXT
|
|
38
|
+
);
|
|
39
|
+
""")
|
|
40
|
+
conn.commit()
|
|
41
|
+
conn.close()
|
|
42
|
+
monkeypatch.setenv("DATABASE_URL", f"sqlite:///{db_path}")
|
|
23
43
|
app = Flask(__name__)
|
|
24
44
|
app.config["TESTING"] = True
|
|
25
45
|
app.register_blueprint(harris_creator_bp)
|