pyarchinit-mini 2.9.0__tar.gz → 2.9.2__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.9.0 → pyarchinit_mini-2.9.2}/CHANGELOG.md +22 -0
- {pyarchinit_mini-2.9.0/pyarchinit_mini.egg-info → pyarchinit_mini-2.9.2}/PKG-INFO +1 -1
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/__init__.py +1 -1
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/rapporti_codec.py +15 -2
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/s3d_projector.py +14 -5
- pyarchinit_mini-2.9.2/pyarchinit_mini/graphproj/s3d_to_cytoscape.py +134 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/vocab/translations/vocab_it.json +5 -1
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/app.py +10 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/harris_creator_routes.py +33 -6
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +70 -17
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +40 -16
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyproject.toml +1 -1
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_api_load_site.py +28 -15
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_rapporti_codec.py +4 -2
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_s3d_projector.py +90 -0
- pyarchinit_mini-2.9.2/tests/unit/test_s3d_to_cytoscape.py +138 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_vocab_i18n.py +8 -3
- pyarchinit_mini-2.9.0/pyarchinit_mini/graphproj/s3d_to_cytoscape.py +0 -105
- pyarchinit_mini-2.9.0/tests/unit/test_s3d_to_cytoscape.py +0 -76
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/MANIFEST.in +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/README.md +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/babel.cfg +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/data/media_viewer_demo.db +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/data/pyarchinit_mini 2.db +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/data/pyarchinit_mini.db +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/data/pyarchinit_mini_sample.db +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/data/pyarchinit_tutorial.db +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/data/pyarchinit_tutorial_clean.db +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/data/pyarchinit_tutorial_video.db +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/data/pyarchinit_v18_demo.db +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/logo/logo_pyarchinit-mini.png +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/ai_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/ai_matrix/apply.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/ai_matrix/plan.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/ai_matrix/vision_extractor.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/api/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/api/auth.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/api/dependencies.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/api/graphml.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/api/inventario.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/api/schemas.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/api/site.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/api/sync.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/api/us.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/export_import_cli.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/graphml_cli.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/harris_import.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/harris_template.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/migrate.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli/sync_cli.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli_interface/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/config/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/config/connection_manager.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/config/em_node_types.yaml +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/concurrency_manager.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/connection.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/database_creator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/manager.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migrations/_2026_05_period_table_schema.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migrations/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/migrations/backup.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/postgres_installer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/schemas.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/database/utils.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/icons.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/dto/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/dto/inventario_dto.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/dto/site_dto.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/dto/us_dto.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/em_palette/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/em_palette/loader.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/em_palette/styles.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/exceptions.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/converter.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_io/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_io/reader.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_io/writer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_io/yed_importer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_io/yed_keys.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/exceptions.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/filesystem.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/graph_to_db.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/graphml_reader.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/graphml_writer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/heriverse_parser.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/ingestor.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/graphproj/projector.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_swimlane/harris_layout.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_swimlane/row_provider.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/harris_swimlane/swimlane_state.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/i18n/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/i18n/lang_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/i18n/locale_manager.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/__main__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/config.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/http_server.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/server.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/media_manager/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/media_manager/media_handler.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/ai_chat.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/app_setting.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/base.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/datazione.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/extended_matrix.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/harris_matrix.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/inventario_materiali.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/media.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/pottery.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/site.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/thesaurus.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/tma.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/us.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/models/user.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/pdf_export/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/auto_translate.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/setup_auth.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/scripts/verify_docs.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/ai_chat_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/analytics_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/app_setting_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/backup_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/command_parser.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/datazione_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/export_import_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/import_export_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/inventario_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/mcp_executor.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/media_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/pottery_dto.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/pottery_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/search_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/site_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/thesaurus_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/tma_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/us_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/services/user_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/stratigraph/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/translations/messages.pot +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/utils/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/utils/auth.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/utils/exceptions.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/utils/relationship_validator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/utils/validators.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/vocab/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/vocab/exceptions.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/vocab/i18n.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/vocab/loader.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/vocab/provider.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/vocab/types.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/data/paradata/domus-pompeiana/stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/data/paradata/metro-c-amba-aradam/stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/data/paradata/pompei-regio-vii/stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/matrix_import_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/matrix_tools_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/base.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/matrix_import/preview.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/matrix_import/rejected.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/matrix_import/upload.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/matrix_tools/index.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/yed_import/index.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/yed_import/preview.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/templates/yed_import/result.html +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/web_interface/yed_import_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini.egg-info/SOURCES.txt +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini.egg-info/requires.txt +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini.egg-info/top_level.txt +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/requirements.txt +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/setup.cfg +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/setup.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/conftest.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/e2e/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/e2e/test_web_vocab_full_flow.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/fixtures/_generate_baseline_graphml.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/fixtures/_generate_harris_swimlane_synthetic.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/fixtures/_generate_synthetic_db.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/fixtures/_generate_yed_test_files.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/fixtures/build_legacy_with_pottery.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_adarte_regression.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_admin_ai_settings_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_admin_backup_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_api_export_graphml.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_api_export_heriverse.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_api_import_graphml.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_api_import_json.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_auto_regen_on_save.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_feature_flag_pipelines.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_full_sync_flow.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_graph_import_flow.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_graph_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_harris_swimlane_routes_create_row.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_harris_swimlane_routes_session_missing.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_lang_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_matrix_import_apply_route.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_matrix_import_rejected_route.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_matrix_import_site_widget.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_matrix_import_upload_route.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_migrate_vocab_cli.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_paradata_routes_authors.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_paradata_routes_other_types.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_paradata_ui.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_pottery_completion.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_pottery_filters_id_number_anno.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_pottery_list_media_thumbs.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_pottery_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_roundtrip.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_roundtrip_extmatrix.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_spec2_coverage_gaps.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_swimlane_group_by.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_vocab_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_yed_export_route.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_yed_import_routes.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/integration/test_yed_writer_parity.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/__init__.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_ai_matrix_apply.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_ai_matrix_extractor_parse.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_ai_matrix_extractor_providers.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_ai_matrix_plan_serialization.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_app_setting_model.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_app_setting_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_auto_regen.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_backup_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_bundle.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_concurrency_columns.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_concurrency_manager.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_database_utils.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_deprecated_writers_shim.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_em_palette_vocab_backed.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_graph_to_db.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_graphml_io_reader.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_graphml_io_writer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_graphproj_edge_registry.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_graphproj_exceptions.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_graphproj_filesystem.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_graphproj_projector.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_harris_layout.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_harris_swimlane_period_sync.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_harris_swimlane_row_provider.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_harris_swimlane_state_load.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_harris_swimlane_state_save.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_heriverse_parser.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_ingest_plan.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_inventario_schema.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_migrations_backup.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_migrations_idempotent.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_optimistic_locking.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_palette_loader.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_palette_styles.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_paradata_store_authors.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_paradata_store_basic.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_paradata_store_other_types.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_pottery_dto.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_pottery_model.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_pottery_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_rapporti_codec_display.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_site_service.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_sync_api.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_sync_cli.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_sync_queue.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_sync_state_machine.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_us_schema.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_uuid_manager.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_vocab_exceptions.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_vocab_loader.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_vocab_provider.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_vocab_types.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_yed_importer_parse.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_yed_importer_plan.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_yed_writer.py +0 -0
- {pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/tests/unit/test_yed_writer_extended_matrix.py +0 -0
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
## 2.9.1 — 2026-05-19
|
|
2
|
+
|
|
3
|
+
### Fixed — Harris Matrix proper rendering (post-2.9.0 feedback)
|
|
4
|
+
- **Edge direction normalized to forward**: was reading "Coperto da" / "Tagliato da" etc. on the swimlane. Harris convention is recent→ancient with forward labels. Now every inverse canonical (`is_after`, `is_cut_by`, `is_filled_by`, `is_abutted_by`) is auto-swapped to its forward (`overlies`/`cuts`/`fills`/`abuts`) with source/target reversed. User reads "Copre" / "Taglia" / "Riempie" / "Si appoggia a".
|
|
5
|
+
- **Arrows now visible**: was missing because cytoscape's `data(style.targetArrowShape)` dot-notation accessor didn't resolve nested objects. All palette/edge fields flattened into top-level data keys (`shape`, `bgcolor`, `bordercolor`, `linecolor`, `arrowtarget`, …). Selectors `node[shape]`, `edge[linecolor]` etc. now match reliably.
|
|
6
|
+
- **Palette node styling visible**: USM/USD/USV/SF/VSF/TSU now appear with their palette shape + colors (was plain gray rectangles). Same flattening fix.
|
|
7
|
+
- **Period rows as compound swimlanes**: every US node is a child of its `period_row_N` compound parent (visible as a horizontal lane on the canvas with label "Periodo X — Fase Y — Datazione"). Sub-groupings (area/settore/quadrato/attivita/strutture) nest INSIDE period rows as sub-clusters.
|
|
8
|
+
- **Symmetric edges without arrows**: `has_same_time` / `is_bonded_to` now render as solid lines, no arrow heads, thicker stroke for visibility.
|
|
9
|
+
- **Vertical layout**: dagre `rankDir: "TB"` (top-to-bottom) — newer US on top, older on bottom.
|
|
10
|
+
- **Cuts dashed**: `cuts` edges get `line-style: dashed` (Harris convention).
|
|
11
|
+
|
|
12
|
+
### Fixed — Vocabulary corrections
|
|
13
|
+
- `vocab_it.json` had `"tagliato da"` mapping to `is_after` (wrong) — corrected to `is_cut_by`.
|
|
14
|
+
- `_IT_EXTRAS` had `"riempito da"` → `"is_after"` (wrong) — corrected to `is_filled_by`.
|
|
15
|
+
- `_IT_EXTRAS` had `"gli si appoggia"` → `"is_before"` (wrong) — corrected to `is_abutted_by`.
|
|
16
|
+
|
|
17
|
+
### Internals
|
|
18
|
+
- New constant `rapporti_codec.REVERSE_TO_FORWARD: Dict[str, str]` lookup.
|
|
19
|
+
- `s3d_projector._load_edges` normalizes inverse direction before dedup.
|
|
20
|
+
- `s3d_to_cytoscape.to_cytoscape` emits flat data fields + ALWAYS-on period row compounds (even with `group_by=none`).
|
|
21
|
+
- `harris_creator_editor.js` rebuilt cytoscape style selectors against flat data; layout switched to `rankDir: "TB"`.
|
|
22
|
+
|
|
1
23
|
## 2.9.0 — 2026-05-19
|
|
2
24
|
|
|
3
25
|
### Fixed — Swimlane UI/UX cleanup (post-2.8.0 feedback)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.9.
|
|
3
|
+
Version: 2.9.2
|
|
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
|
|
@@ -13,6 +13,15 @@ import logging
|
|
|
13
13
|
from dataclasses import dataclass
|
|
14
14
|
from typing import Dict, List, Optional
|
|
15
15
|
|
|
16
|
+
# Inverse canonicals that must be converted to their forward counterpart by
|
|
17
|
+
# swapping source and target. Only directional (non-symmetric) inverses.
|
|
18
|
+
REVERSE_TO_FORWARD: Dict[str, str] = {
|
|
19
|
+
"is_after": "overlies",
|
|
20
|
+
"is_cut_by": "cuts",
|
|
21
|
+
"is_filled_by": "fills",
|
|
22
|
+
"is_abutted_by": "abuts",
|
|
23
|
+
}
|
|
24
|
+
|
|
16
25
|
|
|
17
26
|
logger = logging.getLogger(__name__)
|
|
18
27
|
|
|
@@ -36,14 +45,18 @@ INVERSE_PAIRS: Dict[str, str] = {
|
|
|
36
45
|
# Italian aliases that are NOT in vocab_it.json (observed in live Adarte data
|
|
37
46
|
# on Rimini_RN_2020_21_Museo_Fellini).
|
|
38
47
|
_IT_EXTRAS: Dict[str, str] = {
|
|
39
|
-
|
|
48
|
+
# Inverse directional aliases (will be swapped to forward by REVERSE_TO_FORWARD)
|
|
49
|
+
"riempito da": "is_filled_by", # was wrongly "is_after" — fixed
|
|
50
|
+
"tagliato da": "is_cut_by", # was missing
|
|
51
|
+
"coperto da": "is_after", # explicit fallback in case EdgeRegistry misses it
|
|
52
|
+
# Symmetric / other
|
|
40
53
|
"si lega a": "is_bonded_to",
|
|
41
54
|
"si lega_a": "is_bonded_to",
|
|
42
55
|
"connesso a": "is_bonded_to",
|
|
43
56
|
"connesso_a": "is_bonded_to",
|
|
44
57
|
"anteriore a": "is_before",
|
|
45
58
|
"posteriore a": "is_after",
|
|
46
|
-
"gli si appoggia": "is_before"
|
|
59
|
+
"gli si appoggia": "is_abutted_by", # was "is_before" — fixed to proper inverse
|
|
47
60
|
}
|
|
48
61
|
|
|
49
62
|
# Canonical → italian display label (for swimlane web + GraphML edge labels).
|
|
@@ -18,7 +18,7 @@ from typing import Dict, List, Optional
|
|
|
18
18
|
from sqlalchemy import text
|
|
19
19
|
from sqlalchemy.orm import Session
|
|
20
20
|
|
|
21
|
-
from pyarchinit_mini.graphproj.rapporti_codec import parse_rapporti, SYMMETRIC, INVERSE_PAIRS
|
|
21
|
+
from pyarchinit_mini.graphproj.rapporti_codec import parse_rapporti, SYMMETRIC, INVERSE_PAIRS, REVERSE_TO_FORWARD
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
logger = logging.getLogger(__name__)
|
|
@@ -217,17 +217,26 @@ class S3DProjector:
|
|
|
217
217
|
if src_id is None:
|
|
218
218
|
continue
|
|
219
219
|
for rap in parse_rapporti(rapp_raw, current_site=site):
|
|
220
|
+
canonical = rap.canonical
|
|
220
221
|
tgt_id = us_index.get(rap.target_us)
|
|
221
222
|
if tgt_id is None:
|
|
222
223
|
continue
|
|
223
|
-
|
|
224
|
-
|
|
224
|
+
# Normalize inverse → forward + swap source/target so only
|
|
225
|
+
# forward canonicals (overlies, cuts, fills, abuts) appear in
|
|
226
|
+
# graph.edges. Symmetric edges are never swapped.
|
|
227
|
+
if canonical in REVERSE_TO_FORWARD:
|
|
228
|
+
canonical = REVERSE_TO_FORWARD[canonical]
|
|
229
|
+
src_id, tgt_id = tgt_id, src_id
|
|
230
|
+
if canonical in SYMMETRIC:
|
|
231
|
+
key = (canonical, tuple(sorted((src_id, tgt_id))))
|
|
225
232
|
else:
|
|
226
|
-
key = (
|
|
233
|
+
key = (canonical, src_id, tgt_id)
|
|
227
234
|
if key in seen:
|
|
228
235
|
continue
|
|
229
236
|
seen.add(key)
|
|
230
|
-
graph.edges.append(Edge(source_id=src_id, target_id=tgt_id, canonical=
|
|
237
|
+
graph.edges.append(Edge(source_id=src_id, target_id=tgt_id, canonical=canonical))
|
|
238
|
+
# Reset src_id to the original for the next iteration
|
|
239
|
+
src_id = us_index.get(str(us_num))
|
|
231
240
|
|
|
232
241
|
# === Step A: Inverse dedup — drop the redundant inverse direction ===
|
|
233
242
|
# E.g., if (overlies, A→B) exists, drop (is_after, B→A).
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"""Translate a ProjectedGraph into cytoscape.js JSON with palette-derived styles.
|
|
2
|
+
|
|
3
|
+
Changes from 2.9.0:
|
|
4
|
+
- Palette fields are FLAT top-level data keys (shape, bgcolor, bordercolor …)
|
|
5
|
+
instead of a nested ``style`` object. Cytoscape's ``data()`` accessor does
|
|
6
|
+
not reliably traverse nested objects, so ``data(style.shape)`` silently
|
|
7
|
+
returns nothing.
|
|
8
|
+
- Period rows are ALWAYS emitted as compound parents (regardless of group_by)
|
|
9
|
+
so the UI always shows horizontal swimlanes.
|
|
10
|
+
- When group_by != "none", sub-cluster compounds are nested INSIDE their period
|
|
11
|
+
row compound (cytoscape supports nested compounds).
|
|
12
|
+
"""
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from typing import Any, Dict, List, Tuple
|
|
16
|
+
|
|
17
|
+
from pyarchinit_mini.em_palette import get_palette
|
|
18
|
+
from pyarchinit_mini.graphproj.rapporti_codec import display_label, SYMMETRIC
|
|
19
|
+
from pyarchinit_mini.graphproj.s3d_projector import ProjectedGraph
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def to_cytoscape(graph: ProjectedGraph) -> Dict[str, Any]:
|
|
23
|
+
palette = get_palette()
|
|
24
|
+
out_nodes: List[Dict[str, Any]] = []
|
|
25
|
+
out_edges: List[Dict[str, Any]] = []
|
|
26
|
+
|
|
27
|
+
# ── Fix C: ALWAYS emit period row compound parents first ─────────────────
|
|
28
|
+
for r in graph.rows:
|
|
29
|
+
label = r.label
|
|
30
|
+
if r.datazione:
|
|
31
|
+
label = f"{r.label} — {r.datazione}"
|
|
32
|
+
out_nodes.append({
|
|
33
|
+
"data": {
|
|
34
|
+
"id": r.row_id,
|
|
35
|
+
"label": label,
|
|
36
|
+
"compound": True,
|
|
37
|
+
"is_period_row": True,
|
|
38
|
+
"is_fallback": r.is_fallback,
|
|
39
|
+
},
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
# ── Fix D: sub-cluster compounds nested inside period rows ───────────────
|
|
43
|
+
# Indexed by (row_id, sub_group) → cluster node id
|
|
44
|
+
parent_ids: Dict[Tuple[str, str], str] = {}
|
|
45
|
+
if graph.group_by != "none":
|
|
46
|
+
for n in graph.nodes:
|
|
47
|
+
if n.sub_group is None:
|
|
48
|
+
continue
|
|
49
|
+
key = (n.row_id, n.sub_group)
|
|
50
|
+
if key not in parent_ids:
|
|
51
|
+
cluster_id = f"cluster_{n.row_id}_{n.sub_group}"
|
|
52
|
+
parent_ids[key] = cluster_id
|
|
53
|
+
out_nodes.append({
|
|
54
|
+
"data": {
|
|
55
|
+
"id": cluster_id,
|
|
56
|
+
"label": n.sub_group,
|
|
57
|
+
"row": n.row_id,
|
|
58
|
+
"compound": True,
|
|
59
|
+
"is_period_row": False,
|
|
60
|
+
# Nested inside the period row
|
|
61
|
+
"parent": n.row_id,
|
|
62
|
+
},
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
# ── Fix B: flat palette fields on US nodes ────────────────────────────────
|
|
66
|
+
for n in graph.nodes:
|
|
67
|
+
ns = palette.get_node_style(n.unit_type)
|
|
68
|
+
|
|
69
|
+
# Determine the immediate parent for this node
|
|
70
|
+
if graph.group_by != "none" and n.sub_group is not None:
|
|
71
|
+
immediate_parent = parent_ids.get((n.row_id, n.sub_group), n.row_id)
|
|
72
|
+
else:
|
|
73
|
+
immediate_parent = n.row_id
|
|
74
|
+
|
|
75
|
+
node_obj: Dict[str, Any] = {
|
|
76
|
+
"data": {
|
|
77
|
+
"id": n.node_id,
|
|
78
|
+
"label": n.us,
|
|
79
|
+
"us": n.us,
|
|
80
|
+
"area": n.area,
|
|
81
|
+
"unit_type": n.unit_type,
|
|
82
|
+
"description": n.description,
|
|
83
|
+
"row": n.row_id,
|
|
84
|
+
"parent": immediate_parent,
|
|
85
|
+
# ── Flat palette fields (Fix B) ──
|
|
86
|
+
"shape": ns.shape,
|
|
87
|
+
"bgcolor": ns.fill_color,
|
|
88
|
+
"bordercolor": ns.border_color,
|
|
89
|
+
"borderwidth": ns.border_width,
|
|
90
|
+
"borderstyle": ns.border_style,
|
|
91
|
+
"fontcolor": ns.font_color,
|
|
92
|
+
"fontsize": ns.font_size,
|
|
93
|
+
},
|
|
94
|
+
}
|
|
95
|
+
out_nodes.append(node_obj)
|
|
96
|
+
|
|
97
|
+
# ── Fix B: flat palette fields on edges ──────────────────────────────────
|
|
98
|
+
for e in graph.edges:
|
|
99
|
+
es = palette.get_edge_style(e.canonical)
|
|
100
|
+
is_symmetric = e.canonical in SYMMETRIC
|
|
101
|
+
out_edges.append({
|
|
102
|
+
"data": {
|
|
103
|
+
"id": f"{e.source_id}__{e.canonical}__{e.target_id}",
|
|
104
|
+
"source": e.source_id,
|
|
105
|
+
"target": e.target_id,
|
|
106
|
+
"label": display_label(e.canonical, locale="it"),
|
|
107
|
+
"canonical": e.canonical,
|
|
108
|
+
# ── Flat palette fields (Fix B) ──
|
|
109
|
+
"linecolor": es.line_color,
|
|
110
|
+
"linewidth": es.line_width,
|
|
111
|
+
"linestyle": es.line_style,
|
|
112
|
+
"arrowtarget": "none" if is_symmetric else es.arrow_target,
|
|
113
|
+
"arrowsource": es.arrow_source,
|
|
114
|
+
"is_dashed": "true" if e.canonical == "cuts" else "false",
|
|
115
|
+
},
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
"site": graph.site,
|
|
120
|
+
"group_by": graph.group_by,
|
|
121
|
+
"rows": [
|
|
122
|
+
{
|
|
123
|
+
"row_id": r.row_id,
|
|
124
|
+
"label": r.label,
|
|
125
|
+
"periodo": r.periodo,
|
|
126
|
+
"fase": r.fase,
|
|
127
|
+
"datazione": r.datazione,
|
|
128
|
+
"is_fallback": r.is_fallback,
|
|
129
|
+
}
|
|
130
|
+
for r in graph.rows
|
|
131
|
+
],
|
|
132
|
+
"nodes": out_nodes,
|
|
133
|
+
"edges": out_edges,
|
|
134
|
+
}
|
{pyarchinit_mini-2.9.0 → pyarchinit_mini-2.9.2}/pyarchinit_mini/vocab/translations/vocab_it.json
RENAMED
|
@@ -19,10 +19,14 @@
|
|
|
19
19
|
},
|
|
20
20
|
"edge_type_aliases": {
|
|
21
21
|
"overlies": ["copre"],
|
|
22
|
-
"is_after": ["coperto da", "coperta da"
|
|
22
|
+
"is_after": ["coperto da", "coperta da"],
|
|
23
|
+
"is_cut_by": ["tagliato da", "tagliata da"],
|
|
24
|
+
"is_filled_by": ["riempito da", "riempita da"],
|
|
25
|
+
"is_abutted_by": ["gli si appoggia"],
|
|
23
26
|
"cuts": ["taglia"],
|
|
24
27
|
"fills": ["riempie"],
|
|
25
28
|
"abuts": ["si appoggia a", "si appoggia"],
|
|
29
|
+
"is_bonded_to": ["si lega a", "si lega_a", "connesso a", "connesso_a"],
|
|
26
30
|
"has_same_time": ["uguale a"]
|
|
27
31
|
}
|
|
28
32
|
}
|
|
@@ -3991,6 +3991,16 @@ def create_app():
|
|
|
3991
3991
|
db_conn = DatabaseConnection.from_url(new_db_url)
|
|
3992
3992
|
db_manager = DatabaseManager(db_conn)
|
|
3993
3993
|
|
|
3994
|
+
# Auto-apply schema migrations on the new DB so missing columns
|
|
3995
|
+
# (e.g. node_uuid added in 2.8.x) get created without a manual
|
|
3996
|
+
# `pyarchinit-mini-migrate-vocab` step. Failures are logged but
|
|
3997
|
+
# do not abort the switch — read-only users will still see data
|
|
3998
|
+
# they have access to, and admins can re-run the CLI migration.
|
|
3999
|
+
try:
|
|
4000
|
+
db_manager.run_migrations()
|
|
4001
|
+
except Exception as mig_err:
|
|
4002
|
+
print(f"[DATABASE SWITCH] Migration warning on {connection_name}: {mig_err}")
|
|
4003
|
+
|
|
3994
4004
|
# Reinitialize ALL services with new database manager
|
|
3995
4005
|
global site_service, us_service, inventario_service, thesaurus_service
|
|
3996
4006
|
global user_service, analytics_service, relationship_sync_service, datazione_service
|
|
@@ -728,14 +728,41 @@ def api_get_swimlanes(site: str):
|
|
|
728
728
|
|
|
729
729
|
@harris_creator_bp.get("/api/load/<site>")
|
|
730
730
|
def api_load_state(site: str):
|
|
731
|
-
"""Load full editor state (rows + nodes + edges) as Cytoscape JSON.
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
731
|
+
"""Load full editor state (rows + nodes + edges) as Cytoscape JSON.
|
|
732
|
+
|
|
733
|
+
Pipeline selection honours SWIMLANE_PIPELINE env var:
|
|
734
|
+
- "s3dgraphy" (default): S3DProjector → flat palette fields (Fix B/C/D)
|
|
735
|
+
- "legacy": SwimlaneState.load → nested style dict (backward compat)
|
|
736
|
+
"""
|
|
737
|
+
pipeline = os.environ.get("SWIMLANE_PIPELINE", "s3dgraphy").lower()
|
|
737
738
|
try:
|
|
738
739
|
session = _get_session()
|
|
740
|
+
|
|
741
|
+
if pipeline == "s3dgraphy":
|
|
742
|
+
# ── New pipeline: S3DProjector + flat-palette to_cytoscape ──────
|
|
743
|
+
from pyarchinit_mini.graphproj.s3d_projector import (
|
|
744
|
+
S3DProjector, VALID_GROUP_BY as S3D_VALID,
|
|
745
|
+
)
|
|
746
|
+
from pyarchinit_mini.graphproj.s3d_to_cytoscape import to_cytoscape
|
|
747
|
+
|
|
748
|
+
group_by = request.args.get("group_by", "none")
|
|
749
|
+
s3d_group_by = group_by if group_by in S3D_VALID else "none"
|
|
750
|
+
projected = S3DProjector.from_site(session, site, group_by=s3d_group_by)
|
|
751
|
+
cyto = to_cytoscape(projected)
|
|
752
|
+
# Wrap nodes/edges in the envelope renderSwimlaneState expects:
|
|
753
|
+
# each element is {data: {...}} (no nested style key — flat fields
|
|
754
|
+
# are already in data). Pending changes not relevant for this path.
|
|
755
|
+
return jsonify({
|
|
756
|
+
"site": cyto["site"],
|
|
757
|
+
"group_by": cyto["group_by"],
|
|
758
|
+
"rows": cyto["rows"],
|
|
759
|
+
"nodes": cyto["nodes"],
|
|
760
|
+
"edges": cyto["edges"],
|
|
761
|
+
"pending_changes": {"us_updates": [], "us_inserts": [], "us_deletes": []},
|
|
762
|
+
}), 200
|
|
763
|
+
|
|
764
|
+
# ── Legacy pipeline ──────────────────────────────────────────────────
|
|
765
|
+
group_by = request.args.get("group_by", "period_phase")
|
|
739
766
|
state = SwimlaneState.load(session, site, group_by=group_by)
|
|
740
767
|
return jsonify({
|
|
741
768
|
"site": state.site,
|
|
@@ -320,29 +320,82 @@ function initCytoscape() {
|
|
|
320
320
|
'target-arrow-shape': 'none'
|
|
321
321
|
}
|
|
322
322
|
},
|
|
323
|
-
// Palette-driven
|
|
324
|
-
//
|
|
323
|
+
// Palette-driven node styling — flat data keys (Fix B/E).
|
|
324
|
+
// Overrides the generic defaults above for US nodes loaded from /api/load.
|
|
325
325
|
{
|
|
326
|
-
selector: 'node[
|
|
326
|
+
selector: 'node[shape]',
|
|
327
|
+
style: {
|
|
328
|
+
'shape': 'data(shape)',
|
|
329
|
+
'background-color': 'data(bgcolor)',
|
|
330
|
+
'border-color': 'data(bordercolor)',
|
|
331
|
+
'border-width': 'data(borderwidth)',
|
|
332
|
+
'border-style': 'data(borderstyle)',
|
|
333
|
+
'color': 'data(fontcolor)',
|
|
334
|
+
'font-size': 'data(fontsize)',
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
// Period row swimlanes (Fix C/E)
|
|
338
|
+
{
|
|
339
|
+
selector: 'node[?is_period_row]',
|
|
340
|
+
style: {
|
|
341
|
+
'shape': 'roundrectangle',
|
|
342
|
+
'background-color': '#F5F5F5',
|
|
343
|
+
'background-opacity': 0.3,
|
|
344
|
+
'border-color': '#9E9E9E',
|
|
345
|
+
'border-width': 1,
|
|
346
|
+
'label': 'data(label)',
|
|
347
|
+
'text-valign': 'top',
|
|
348
|
+
'text-halign': 'left',
|
|
349
|
+
'text-margin-x': 10,
|
|
350
|
+
'text-margin-y': 5,
|
|
351
|
+
'font-size': 14,
|
|
352
|
+
'font-weight': 'bold',
|
|
353
|
+
'padding': 30,
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
// Sub-cluster compounds nested inside period rows (Fix D/E)
|
|
357
|
+
{
|
|
358
|
+
selector: 'node[?compound][!is_period_row]',
|
|
327
359
|
style: {
|
|
328
|
-
'shape': '
|
|
329
|
-
'background-color': '
|
|
330
|
-
'
|
|
331
|
-
'border-
|
|
332
|
-
'border-
|
|
333
|
-
'
|
|
334
|
-
'
|
|
360
|
+
'shape': 'roundrectangle',
|
|
361
|
+
'background-color': '#FAFAFA',
|
|
362
|
+
'background-opacity': 0.5,
|
|
363
|
+
'border-color': '#BDBDBD',
|
|
364
|
+
'border-width': 1,
|
|
365
|
+
'border-style': 'dashed',
|
|
366
|
+
'label': 'data(label)',
|
|
367
|
+
'text-valign': 'top',
|
|
368
|
+
'font-size': 11,
|
|
369
|
+
'padding': 10,
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
// Palette-driven edge styling — flat data keys (Fix B/E)
|
|
373
|
+
{
|
|
374
|
+
selector: 'edge[linecolor]',
|
|
375
|
+
style: {
|
|
376
|
+
'line-color': 'data(linecolor)',
|
|
377
|
+
'width': 'data(linewidth)',
|
|
378
|
+
'line-style': 'data(linestyle)',
|
|
379
|
+
'target-arrow-shape': 'data(arrowtarget)',
|
|
380
|
+
'source-arrow-shape': 'data(arrowsource)',
|
|
381
|
+
'target-arrow-color': 'data(linecolor)',
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
// Dashed cuts override (Fix E)
|
|
385
|
+
{
|
|
386
|
+
selector: 'edge[is_dashed = "true"]',
|
|
387
|
+
style: {
|
|
388
|
+
'line-style': 'dashed',
|
|
335
389
|
}
|
|
336
390
|
},
|
|
391
|
+
// Symmetric edges — no arrows, double thickness (Fix E)
|
|
337
392
|
{
|
|
338
|
-
selector: 'edge[
|
|
393
|
+
selector: 'edge[canonical = "has_same_time"], edge[canonical = "is_bonded_to"]',
|
|
339
394
|
style: {
|
|
340
|
-
'
|
|
341
|
-
'
|
|
342
|
-
'line-style': '
|
|
343
|
-
'
|
|
344
|
-
'source-arrow-shape': 'data(style.sourceArrowShape)',
|
|
345
|
-
'target-arrow-color': 'data(style.lineColor)',
|
|
395
|
+
'target-arrow-shape': 'none',
|
|
396
|
+
'source-arrow-shape': 'none',
|
|
397
|
+
'line-style': 'solid',
|
|
398
|
+
'width': 3,
|
|
346
399
|
}
|
|
347
400
|
}
|
|
348
401
|
],
|
|
@@ -581,36 +581,57 @@ function renderSwimlaneState(state) {
|
|
|
581
581
|
// Clear existing elements
|
|
582
582
|
cy.elements().remove();
|
|
583
583
|
|
|
584
|
-
|
|
585
|
-
|
|
584
|
+
// Fix G: split nodes into period row compounds, sub-cluster compounds, and US leaves.
|
|
585
|
+
// Period rows (is_period_row=true) come from new pipeline; legacy swimlane nodes
|
|
586
|
+
// (is_swimlane=true) are supported for backward compat.
|
|
587
|
+
const periodRowNodes = state.nodes.filter(el => el.data.is_period_row);
|
|
588
|
+
const clusterNodes = state.nodes.filter(el => el.data.compound && !el.data.is_period_row && !el.data.is_swimlane);
|
|
589
|
+
const legacySwimNodes= state.nodes.filter(el => el.data.is_swimlane);
|
|
590
|
+
const usNodes = state.nodes.filter(el => !el.data.compound && !el.data.is_swimlane);
|
|
591
|
+
|
|
592
|
+
// 1. Period row compound parents first (Fix C/G)
|
|
593
|
+
if (periodRowNodes.length > 0) {
|
|
594
|
+
cy.add(periodRowNodes.map(el => ({
|
|
595
|
+
group: 'nodes',
|
|
596
|
+
data: el.data, // full data object — includes is_period_row, label, etc.
|
|
597
|
+
})));
|
|
598
|
+
}
|
|
586
599
|
|
|
587
|
-
//
|
|
588
|
-
if (
|
|
589
|
-
cy.add(
|
|
600
|
+
// 2. Legacy swimlane nodes (backward compat)
|
|
601
|
+
if (legacySwimNodes.length > 0) {
|
|
602
|
+
cy.add(legacySwimNodes.map(el => ({
|
|
590
603
|
group: 'nodes',
|
|
591
604
|
data: el.data,
|
|
592
605
|
classes: 'swimlane',
|
|
593
606
|
})));
|
|
594
607
|
}
|
|
595
608
|
|
|
596
|
-
//
|
|
609
|
+
// 3. Sub-cluster compounds nested inside period rows (Fix D/G)
|
|
610
|
+
if (clusterNodes.length > 0) {
|
|
611
|
+
cy.add(clusterNodes.map(el => ({
|
|
612
|
+
group: 'nodes',
|
|
613
|
+
data: el.data,
|
|
614
|
+
})));
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
// 4. US leaf nodes — full data object carries flat palette fields (Fix B/G)
|
|
597
618
|
if (usNodes.length > 0) {
|
|
598
619
|
cy.add(usNodes.map(el => ({
|
|
599
620
|
group: 'nodes',
|
|
600
|
-
data:
|
|
621
|
+
data: el.data,
|
|
601
622
|
position: el.position || undefined,
|
|
602
623
|
})));
|
|
603
624
|
}
|
|
604
625
|
|
|
605
|
-
//
|
|
626
|
+
// 5. Edges — full data object carries flat palette fields (Fix B/G)
|
|
606
627
|
if (state.edges && state.edges.length > 0) {
|
|
607
628
|
cy.add(state.edges.map(el => ({
|
|
608
629
|
group: 'edges',
|
|
609
|
-
data:
|
|
630
|
+
data: el.data,
|
|
610
631
|
})));
|
|
611
632
|
}
|
|
612
633
|
|
|
613
|
-
// Apply swimlane styling
|
|
634
|
+
// Apply legacy swimlane styling for backward compat
|
|
614
635
|
cy.nodes('.swimlane').forEach(n => {
|
|
615
636
|
const color = n.data('color') || '#EEEEEE';
|
|
616
637
|
n.style({
|
|
@@ -627,17 +648,20 @@ function renderSwimlaneState(state) {
|
|
|
627
648
|
});
|
|
628
649
|
});
|
|
629
650
|
|
|
630
|
-
// Run dagre layout
|
|
631
|
-
//
|
|
632
|
-
//
|
|
633
|
-
// the edges collapse into invisible zero-length segments.
|
|
651
|
+
// Run dagre layout TB (recent → ancient, top-to-bottom) — Fix F.
|
|
652
|
+
// rankDir: 'TB' gives the classic Harris convention: most recent strata
|
|
653
|
+
// at the top, oldest at the bottom, with arrows pointing downward.
|
|
634
654
|
try {
|
|
635
655
|
cy.layout({
|
|
636
656
|
name: 'dagre',
|
|
637
|
-
rankDir: '
|
|
657
|
+
rankDir: 'TB',
|
|
658
|
+
ranker: 'longest-path',
|
|
638
659
|
nodeSep: 50,
|
|
660
|
+
edgeSep: 20,
|
|
639
661
|
rankSep: 80,
|
|
640
|
-
|
|
662
|
+
animate: false,
|
|
663
|
+
fit: true,
|
|
664
|
+
padding: 30,
|
|
641
665
|
}).run();
|
|
642
666
|
} catch (e) {
|
|
643
667
|
console.warn('dagre layout failed, falling back to grid:', e);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.9.
|
|
3
|
+
Version: 2.9.2
|
|
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.9.
|
|
7
|
+
version = "2.9.2"
|
|
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"}
|
|
@@ -41,38 +41,51 @@ def client(tmp_path, monkeypatch):
|
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
def test_api_load_returns_palette_styled_nodes(client):
|
|
44
|
+
"""US nodes carry flat palette fields in data (Fix B); no nested style dict."""
|
|
44
45
|
r = client.get("/harris-creator/api/load/S")
|
|
45
46
|
assert r.status_code == 200, r.data[:300]
|
|
46
47
|
body = r.get_json()
|
|
47
48
|
assert "nodes" in body and "edges" in body
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
assert
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
assert "
|
|
49
|
+
# Period row compound + 2 US nodes = at least 3 total
|
|
50
|
+
us_nodes = [n for n in body["nodes"] if n["data"].get("us")]
|
|
51
|
+
assert len(us_nodes) >= 2
|
|
52
|
+
node = us_nodes[0]
|
|
53
|
+
# Flat palette keys in data (Fix B)
|
|
54
|
+
assert "shape" in node["data"], f"Expected flat 'shape' in data, got keys: {list(node['data'].keys())}"
|
|
55
|
+
assert "bgcolor" in node["data"]
|
|
56
|
+
assert node["data"]["bgcolor"].startswith("#")
|
|
57
|
+
# No nested style dict
|
|
58
|
+
assert "style" not in node, "flat-field contract: no nested 'style' key on node"
|
|
54
59
|
|
|
55
60
|
|
|
56
|
-
def
|
|
61
|
+
def test_api_load_emits_edges_with_flat_fields(client):
|
|
62
|
+
"""Edges carry flat palette fields in data (Fix B); direction normalized to forward."""
|
|
57
63
|
r = client.get("/harris-creator/api/load/S")
|
|
58
64
|
assert r.status_code == 200
|
|
59
65
|
body = r.get_json()
|
|
60
66
|
assert len(body["edges"]) >= 1
|
|
61
67
|
e = body["edges"][0]
|
|
62
|
-
#
|
|
63
|
-
assert e["data"]["label"]
|
|
64
|
-
assert e["data"]["canonical"]
|
|
65
|
-
|
|
66
|
-
assert
|
|
67
|
-
assert "
|
|
68
|
+
# After Fix A, only forward canonicals: 'Copre' / 'overlies'
|
|
69
|
+
assert e["data"]["label"] == "Copre", f"Expected 'Copre', got {e['data']['label']!r}"
|
|
70
|
+
assert e["data"]["canonical"] == "overlies", f"Expected 'overlies', got {e['data']['canonical']!r}"
|
|
71
|
+
# Flat palette keys in data (Fix B)
|
|
72
|
+
assert "linecolor" in e["data"], f"Expected flat 'linecolor' in data, got keys: {list(e['data'].keys())}"
|
|
73
|
+
assert "arrowtarget" in e["data"]
|
|
74
|
+
# No nested style dict
|
|
75
|
+
assert "style" not in e, "flat-field contract: no nested 'style' key on edge"
|
|
68
76
|
|
|
69
77
|
|
|
70
78
|
def test_api_load_with_group_by_area_yields_compound_parents(client):
|
|
79
|
+
"""Period row + sub-cluster compounds present when group_by=area (Fix C/D)."""
|
|
71
80
|
r = client.get("/harris-creator/api/load/S?group_by=area")
|
|
72
81
|
assert r.status_code == 200
|
|
73
82
|
body = r.get_json()
|
|
74
|
-
|
|
75
|
-
|
|
83
|
+
# At minimum: 1 period-row compound always present (Fix C)
|
|
84
|
+
period_rows = [n for n in body["nodes"] if n["data"].get("is_period_row")]
|
|
85
|
+
assert len(period_rows) >= 1
|
|
86
|
+
# With group_by=area and US in area 'A', also a sub-cluster compound
|
|
87
|
+
all_compounds = [n for n in body["nodes"] if n["data"].get("compound")]
|
|
88
|
+
assert len(all_compounds) >= 1
|
|
76
89
|
|
|
77
90
|
|
|
78
91
|
def test_api_load_unknown_site_returns_empty(client):
|
|
@@ -43,9 +43,11 @@ def test_parse_italian_extras_resolve():
|
|
|
43
43
|
current_site="S",
|
|
44
44
|
)
|
|
45
45
|
cans = [r.canonical for r in items]
|
|
46
|
-
|
|
46
|
+
# "Riempito da" is the inverse of "fills" → is_filled_by (not is_after)
|
|
47
|
+
assert "is_filled_by" in cans # riempito da — corrected from old wrong mapping
|
|
47
48
|
assert "is_bonded_to" in cans # si lega a
|
|
48
|
-
|
|
49
|
+
# "Gli si appoggia" is the inverse of "abuts" → is_abutted_by (not is_before)
|
|
50
|
+
assert "is_abutted_by" in cans # gli si appoggia — corrected from old wrong mapping
|
|
49
51
|
|
|
50
52
|
|
|
51
53
|
def test_parse_unknown_label_yields_none():
|