pyarchinit-mini 2.8.0__tar.gz → 2.9.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/CHANGELOG.md +40 -0
- {pyarchinit_mini-2.8.0/pyarchinit_mini.egg-info → pyarchinit_mini-2.9.1}/PKG-INFO +1 -1
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/__init__.py +1 -1
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/graph_to_db.py +1 -16
- pyarchinit_mini-2.9.1/pyarchinit_mini/graphproj/graphml_writer.py +143 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/rapporti_codec.py +53 -2
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/s3d_projector.py +61 -5
- pyarchinit_mini-2.9.1/pyarchinit_mini/graphproj/s3d_to_cytoscape.py +134 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/vocab/translations/vocab_it.json +5 -1
- pyarchinit_mini-2.9.1/pyarchinit_mini/web_interface/data/paradata/pompei-regio-vii/stratigraphy.graphml +265 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/harris_creator_routes.py +33 -6
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +82 -9
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +68 -77
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini.egg-info/SOURCES.txt +2 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyproject.toml +1 -1
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_api_export_graphml.py +26 -3
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_api_load_site.py +28 -13
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_rapporti_codec.py +4 -2
- pyarchinit_mini-2.9.1/tests/unit/test_rapporti_codec_display.py +33 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_s3d_projector.py +90 -0
- pyarchinit_mini-2.9.1/tests/unit/test_s3d_to_cytoscape.py +138 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_vocab_i18n.py +8 -3
- pyarchinit_mini-2.8.0/pyarchinit_mini/graphproj/graphml_writer.py +0 -89
- pyarchinit_mini-2.8.0/pyarchinit_mini/graphproj/s3d_to_cytoscape.py +0 -103
- pyarchinit_mini-2.8.0/tests/unit/test_s3d_to_cytoscape.py +0 -75
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/MANIFEST.in +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/README.md +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/babel.cfg +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/data/media_viewer_demo.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/data/pyarchinit_mini 2.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/data/pyarchinit_mini.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/data/pyarchinit_mini_sample.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/data/pyarchinit_tutorial.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/data/pyarchinit_tutorial_clean.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/data/pyarchinit_tutorial_video.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/data/pyarchinit_v18_demo.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/logo/logo_pyarchinit-mini.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/ai_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/ai_matrix/apply.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/ai_matrix/plan.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/ai_matrix/vision_extractor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/api/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/api/auth.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/api/dependencies.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/api/graphml.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/api/inventario.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/api/schemas.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/api/site.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/api/sync.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/api/us.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/export_import_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/graphml_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/harris_import.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/harris_template.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/migrate.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli/sync_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli_interface/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/config/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/config/connection_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/config/em_node_types.yaml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/concurrency_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/connection.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/database_creator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migrations/_2026_05_period_table_schema.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migrations/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/migrations/backup.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/postgres_installer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/schemas.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/database/utils.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/icons.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/dto/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/dto/inventario_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/dto/site_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/dto/us_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/em_palette/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/em_palette/loader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/em_palette/styles.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/converter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_io/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_io/reader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_io/writer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_io/yed_importer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_io/yed_keys.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/filesystem.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/graphml_reader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/heriverse_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/ingestor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/graphproj/projector.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_swimlane/harris_layout.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_swimlane/row_provider.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/harris_swimlane/swimlane_state.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/i18n/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/i18n/lang_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/i18n/locale_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/__main__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/config.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/http_server.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/server.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/media_manager/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/media_manager/media_handler.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/ai_chat.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/app_setting.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/base.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/datazione.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/extended_matrix.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/harris_matrix.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/inventario_materiali.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/media.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/pottery.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/site.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/thesaurus.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/tma.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/us.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/models/user.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/pdf_export/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/auto_translate.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/setup_auth.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/scripts/verify_docs.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/ai_chat_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/analytics_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/app_setting_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/backup_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/command_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/datazione_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/export_import_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/import_export_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/inventario_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/mcp_executor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/media_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/pottery_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/pottery_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/search_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/site_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/thesaurus_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/tma_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/us_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/services/user_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/stratigraph/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/translations/messages.pot +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/utils/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/utils/auth.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/utils/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/utils/relationship_validator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/utils/validators.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/vocab/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/vocab/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/vocab/i18n.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/vocab/loader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/vocab/provider.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/vocab/types.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/app.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/data/paradata/domus-pompeiana/stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/data/paradata/metro-c-amba-aradam/stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/matrix_import_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/matrix_tools_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/base.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/matrix_import/preview.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/matrix_import/rejected.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/matrix_import/upload.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/matrix_tools/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/yed_import/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/yed_import/preview.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/templates/yed_import/result.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini/web_interface/yed_import_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini.egg-info/requires.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/pyarchinit_mini.egg-info/top_level.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/requirements.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/setup.cfg +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/setup.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/conftest.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/e2e/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/e2e/test_web_vocab_full_flow.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/fixtures/_generate_baseline_graphml.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/fixtures/_generate_harris_swimlane_synthetic.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/fixtures/_generate_synthetic_db.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/fixtures/_generate_yed_test_files.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/fixtures/build_legacy_with_pottery.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_adarte_regression.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_admin_ai_settings_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_admin_backup_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_api_export_heriverse.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_api_import_graphml.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_api_import_json.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_auto_regen_on_save.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_feature_flag_pipelines.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_full_sync_flow.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_graph_import_flow.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_graph_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_harris_swimlane_routes_create_row.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_harris_swimlane_routes_session_missing.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_lang_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_matrix_import_apply_route.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_matrix_import_rejected_route.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_matrix_import_site_widget.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_matrix_import_upload_route.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_migrate_vocab_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_paradata_routes_authors.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_paradata_routes_other_types.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_paradata_ui.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_pottery_completion.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_pottery_filters_id_number_anno.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_pottery_list_media_thumbs.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_pottery_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_roundtrip.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_roundtrip_extmatrix.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_spec2_coverage_gaps.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_swimlane_group_by.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_vocab_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_yed_export_route.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_yed_import_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/integration/test_yed_writer_parity.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_ai_matrix_apply.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_ai_matrix_extractor_parse.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_ai_matrix_extractor_providers.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_ai_matrix_plan_serialization.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_app_setting_model.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_app_setting_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_auto_regen.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_backup_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_bundle.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_concurrency_columns.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_concurrency_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_database_utils.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_deprecated_writers_shim.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_em_palette_vocab_backed.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_graph_to_db.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_graphml_io_reader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_graphml_io_writer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_graphproj_edge_registry.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_graphproj_exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_graphproj_filesystem.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_graphproj_projector.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_harris_layout.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_harris_swimlane_period_sync.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_harris_swimlane_row_provider.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_harris_swimlane_state_load.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_harris_swimlane_state_save.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_heriverse_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_ingest_plan.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_inventario_schema.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_migrations_backup.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_migrations_idempotent.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_optimistic_locking.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_palette_loader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_palette_styles.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_paradata_store_authors.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_paradata_store_basic.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_paradata_store_other_types.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_pottery_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_pottery_model.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_pottery_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_site_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_sync_api.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_sync_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_sync_queue.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_sync_state_machine.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_us_schema.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_uuid_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_vocab_exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_vocab_loader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_vocab_provider.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_vocab_types.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_yed_importer_parse.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_yed_importer_plan.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_yed_writer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.1}/tests/unit/test_yed_writer_extended_matrix.py +0 -0
|
@@ -1,3 +1,43 @@
|
|
|
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
|
+
|
|
23
|
+
## 2.9.0 — 2026-05-19
|
|
24
|
+
|
|
25
|
+
### Fixed — Swimlane UI/UX cleanup (post-2.8.0 feedback)
|
|
26
|
+
- **Toolbar consolidated**: removed duplicate `swimlane-toolbar` block. Single `Esporta` dropdown now contains yEd GraphML (.graphml), Heriverse/ATON JSON (.json), Graphviz DOT, PNG. `Importa` button accepts both .graphml and .json. The existing `group-by-selector` now uses the new vocabulary: Nessun raggruppamento / Area / Settore / Quadrato / Attività / Strutture (was: Period+Phase / Struttura / Attivita / Settore / Area / Ambient / Saggio / Quad-Par / No grouping).
|
|
27
|
+
- **Edge labels italianized**: swimlane web + GraphML export now show `Copre`/`Coperto da`/`Taglia`/`Tagliato da`/`Riempie`/`Riempito da`/`Si appoggia a`/`Gli si appoggia`/`Uguale a`/`Si lega a`/`Anteriore a` (locale `it`) or `Covers`/`Covered by`/etc (locale `en`) instead of canonical `overlies`/`is_after`/`cuts`/etc. Canonical kept in `data.canonical` for JS class hooks.
|
|
28
|
+
- **Inverse-edge dedup**: when both `A overlies B` and `B is_after A` exist (data redundancy), draw only the forward direction — no more overlapping labels at the same midpoint.
|
|
29
|
+
- **Transitive reduction**: if A→B→C exists, A→C is no longer drawn (per-canonical, only for DAGs). Applied via `networkx.transitive_reduction`. Adarte fixture: 516 → 343 edges (clean Harris Matrix layout).
|
|
30
|
+
- **Palette-driven frontend rendering**: cytoscape selectors `node[style]` and `edge[style]` now read `data.style.{shape,backgroundColor,borderColor,borderWidth,lineColor,…}` from the `/api/load` payload and apply them. US nodes finally appear with their palette colors/shapes (USM red border, USV octagonal, …) instead of default gray.
|
|
31
|
+
- **GraphML export rewritten**: now produces the proper Harris Matrix Creator format via `pyarchinit_mini.graphml_io.yed_writer.write_extended_matrix_graphml` — TableNode wrapper with `<y:Rows>` per period/fase (colored backgrounds, rotated labels like "Periodo 1 - Fase 1"), nodes positioned inside their period row, palette styles, italianized edge labels. Previously the writer just appended nodes to the palette template without TableNode rows.
|
|
32
|
+
|
|
33
|
+
### Internals
|
|
34
|
+
- New `rapporti_codec.CANONICAL_TO_ITALIAN`/`CANONICAL_TO_ENGLISH`/`display_label(canonical, locale)` (moved from `graph_to_db.py`).
|
|
35
|
+
- `s3d_projector._load_edges` post-process: inverse dedup + per-canonical `nx.transitive_reduction` (skipped for SYMMETRIC and cyclic graphs).
|
|
36
|
+
- `s3d_to_cytoscape` edges now carry `data.label` (italian display) AND `data.canonical` (English canonical for JS hooks).
|
|
37
|
+
- `graphml_writer.write_graphml` now bridges to the existing `yed_writer.write_extended_matrix_graphml` via a temp file.
|
|
38
|
+
- `harris_creator_editor.js`: 2 new cytoscape selectors (`node[style]`, `edge[style]`) read palette properties from element data.
|
|
39
|
+
- `editor.html`: removed `swimlane-toolbar` div + duplicate `group-by-select` + standalone `export-graphml-btn`/`export-dot-btn`/`export-png-btn` + `exportYedGraphml()` button; replaced with one unified `Esporta` dropdown + `Importa` button.
|
|
40
|
+
|
|
1
41
|
## 2.8.0 — 2026-05-19
|
|
2
42
|
|
|
3
43
|
### Added — EM Palette + Multi-Format Swimlane Round-Trip
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.9.1
|
|
4
4
|
Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
|
|
5
5
|
Home-page: https://github.com/enzococca/pyarchinit-mini
|
|
6
6
|
Author: PyArchInit Team
|
|
@@ -15,6 +15,7 @@ from pyarchinit_mini.graphproj.rapporti_codec import (
|
|
|
15
15
|
INVERSE_PAIRS,
|
|
16
16
|
SYMMETRIC,
|
|
17
17
|
Rapporto,
|
|
18
|
+
CANONICAL_TO_ITALIAN,
|
|
18
19
|
)
|
|
19
20
|
from pyarchinit_mini.graphproj.s3d_projector import ProjectedGraph, Node
|
|
20
21
|
|
|
@@ -22,22 +23,6 @@ from pyarchinit_mini.graphproj.s3d_projector import ProjectedGraph, Node
|
|
|
22
23
|
logger = logging.getLogger(__name__)
|
|
23
24
|
|
|
24
25
|
|
|
25
|
-
# Canonical → italian display label (used when serializing).
|
|
26
|
-
CANONICAL_TO_ITALIAN: Dict[str, str] = {
|
|
27
|
-
"overlies": "Copre",
|
|
28
|
-
"is_after": "Coperto da",
|
|
29
|
-
"cuts": "Taglia",
|
|
30
|
-
"is_cut_by": "Tagliato da",
|
|
31
|
-
"fills": "Riempie",
|
|
32
|
-
"is_filled_by": "Riempito da",
|
|
33
|
-
"abuts": "Si appoggia a",
|
|
34
|
-
"is_abutted_by": "Gli si appoggia",
|
|
35
|
-
"has_same_time": "Uguale a",
|
|
36
|
-
"is_bonded_to": "Si lega a",
|
|
37
|
-
"is_before": "Anteriore a",
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
26
|
@dataclass
|
|
42
27
|
class WriteResult:
|
|
43
28
|
imported_us: int = 0
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"""yEd-flavoured GraphML writer producing the EM Harris Matrix Creator format.
|
|
2
|
+
|
|
3
|
+
Strategy (Approach A): thin bridge from ProjectedGraph to the canonical
|
|
4
|
+
graphml_io.yed_writer.write_extended_matrix_graphml which already produces the
|
|
5
|
+
proper TableNode / swimlane format consumed by yEd Desktop.
|
|
6
|
+
|
|
7
|
+
Output:
|
|
8
|
+
- Standalone GraphML (no palette template merging)
|
|
9
|
+
- ONE group node with <y:TableNode YED_TABLE_NODE> containing one <y:Row>
|
|
10
|
+
per period row from the ProjectedGraph
|
|
11
|
+
- US nodes positioned inside their row's y-range
|
|
12
|
+
- Edges with italianized labels (Copre, Taglia, …) via rapporti_codec
|
|
13
|
+
"""
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import tempfile
|
|
17
|
+
import os
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Optional
|
|
20
|
+
|
|
21
|
+
from pyarchinit_mini.graphproj.s3d_projector import ProjectedGraph
|
|
22
|
+
from pyarchinit_mini.graphproj.rapporti_codec import display_label, CANONICAL_TO_ITALIAN
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def write_graphml(graph: ProjectedGraph, *, palette_path: Optional[Path] = None) -> bytes:
|
|
26
|
+
"""Render the projected graph as yEd-compatible GraphML bytes.
|
|
27
|
+
|
|
28
|
+
palette_path is accepted for backward-compatible call-sites but is ignored —
|
|
29
|
+
the new output is a standalone TableNode document, not a palette extension.
|
|
30
|
+
"""
|
|
31
|
+
from pyarchinit_mini.harris_swimlane.swimlane_state import CytoscapeElement
|
|
32
|
+
from pyarchinit_mini.harris_swimlane.row_provider import Row as LegacyRow, PERIOD_COLORS
|
|
33
|
+
|
|
34
|
+
# ------------------------------------------------------------------
|
|
35
|
+
# 1. Convert ProjectedGraph.rows → legacy Row objects
|
|
36
|
+
# ------------------------------------------------------------------
|
|
37
|
+
rows: list[LegacyRow] = []
|
|
38
|
+
for i, r in enumerate(graph.rows):
|
|
39
|
+
rows.append(LegacyRow(
|
|
40
|
+
row_id=r.row_id,
|
|
41
|
+
period_name=r.periodo or r.label,
|
|
42
|
+
phase_name=r.fase,
|
|
43
|
+
start_date=None,
|
|
44
|
+
end_date=None,
|
|
45
|
+
color=PERIOD_COLORS[i % len(PERIOD_COLORS)],
|
|
46
|
+
source="period_table" if not r.is_fallback else "fallback",
|
|
47
|
+
))
|
|
48
|
+
|
|
49
|
+
# ------------------------------------------------------------------
|
|
50
|
+
# 2. Convert ProjectedGraph.nodes → CytoscapeElement list
|
|
51
|
+
# ------------------------------------------------------------------
|
|
52
|
+
# Build a lookup: row_id → index so we can calculate y positions
|
|
53
|
+
row_index = {r.row_id: i for i, r in enumerate(graph.rows)}
|
|
54
|
+
row_height = 200
|
|
55
|
+
node_h, node_w = 30.0, 80.0
|
|
56
|
+
# Track column (x) per row so nodes in the same row are spread horizontally
|
|
57
|
+
col_counter: dict[str, int] = {}
|
|
58
|
+
|
|
59
|
+
nodes: list[CytoscapeElement] = []
|
|
60
|
+
for n in graph.nodes:
|
|
61
|
+
ri = row_index.get(n.row_id, 0)
|
|
62
|
+
col = col_counter.get(n.row_id, 0)
|
|
63
|
+
col_counter[n.row_id] = col + 1
|
|
64
|
+
x = col * (node_w + 20) + 30
|
|
65
|
+
y = ri * row_height + (row_height / 2 - node_h / 2)
|
|
66
|
+
|
|
67
|
+
nodes.append(CytoscapeElement(
|
|
68
|
+
data={
|
|
69
|
+
"id": n.node_id,
|
|
70
|
+
"us": n.us,
|
|
71
|
+
"us_number": n.us,
|
|
72
|
+
"area": n.area or "",
|
|
73
|
+
"unit_type": n.unit_type or "US",
|
|
74
|
+
"description": n.description or "",
|
|
75
|
+
"row": n.row_id,
|
|
76
|
+
"label": str(n.us),
|
|
77
|
+
},
|
|
78
|
+
position={"x": x, "y": y},
|
|
79
|
+
))
|
|
80
|
+
|
|
81
|
+
# ------------------------------------------------------------------
|
|
82
|
+
# 3. Convert ProjectedGraph.edges → CytoscapeElement list with italian labels
|
|
83
|
+
# ------------------------------------------------------------------
|
|
84
|
+
edges: list[CytoscapeElement] = []
|
|
85
|
+
for e in graph.edges:
|
|
86
|
+
italian = display_label(e.canonical, locale="it")
|
|
87
|
+
edges.append(CytoscapeElement(
|
|
88
|
+
data={
|
|
89
|
+
"id": f"{e.source_id}__{e.canonical}__{e.target_id}",
|
|
90
|
+
"source": e.source_id,
|
|
91
|
+
"target": e.target_id,
|
|
92
|
+
"label": italian,
|
|
93
|
+
"canonical": e.canonical,
|
|
94
|
+
"relationship": CANONICAL_TO_ITALIAN.get(e.canonical, e.canonical),
|
|
95
|
+
},
|
|
96
|
+
))
|
|
97
|
+
|
|
98
|
+
# ------------------------------------------------------------------
|
|
99
|
+
# 4. Build a minimal state-like object the legacy writer accepts
|
|
100
|
+
# ------------------------------------------------------------------
|
|
101
|
+
class _State:
|
|
102
|
+
def __init__(self):
|
|
103
|
+
self.site = graph.site
|
|
104
|
+
self.group_by = graph.group_by
|
|
105
|
+
self.rows = rows
|
|
106
|
+
self.nodes = nodes
|
|
107
|
+
self.edges = edges
|
|
108
|
+
self.pending_changes = {}
|
|
109
|
+
|
|
110
|
+
state = _State()
|
|
111
|
+
|
|
112
|
+
# ------------------------------------------------------------------
|
|
113
|
+
# 5. Call the canonical writer and return bytes
|
|
114
|
+
# ------------------------------------------------------------------
|
|
115
|
+
from pyarchinit_mini.graphml_io.yed_writer import write_extended_matrix_graphml
|
|
116
|
+
|
|
117
|
+
epochs: list[dict] = []
|
|
118
|
+
# Populate epochs from rows that have dating information
|
|
119
|
+
for r in graph.rows:
|
|
120
|
+
if r.datazione:
|
|
121
|
+
epochs.append({
|
|
122
|
+
"row_id": r.row_id,
|
|
123
|
+
"periodo": r.periodo,
|
|
124
|
+
"fase": r.fase,
|
|
125
|
+
"datazione": r.datazione,
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
with tempfile.NamedTemporaryFile(suffix=".graphml", delete=False) as tmp:
|
|
129
|
+
tmp_path = tmp.name
|
|
130
|
+
try:
|
|
131
|
+
write_extended_matrix_graphml(
|
|
132
|
+
state,
|
|
133
|
+
site_meta={"sito": graph.site},
|
|
134
|
+
epochs=epochs,
|
|
135
|
+
out=Path(tmp_path),
|
|
136
|
+
)
|
|
137
|
+
with open(tmp_path, "rb") as f:
|
|
138
|
+
return f.read()
|
|
139
|
+
finally:
|
|
140
|
+
try:
|
|
141
|
+
os.unlink(tmp_path)
|
|
142
|
+
except OSError:
|
|
143
|
+
pass
|
|
@@ -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,16 +45,58 @@ 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
|
|
|
62
|
+
# Canonical → italian display label (for swimlane web + GraphML edge labels).
|
|
63
|
+
CANONICAL_TO_ITALIAN: Dict[str, str] = {
|
|
64
|
+
"overlies": "Copre",
|
|
65
|
+
"is_after": "Coperto da",
|
|
66
|
+
"cuts": "Taglia",
|
|
67
|
+
"is_cut_by": "Tagliato da",
|
|
68
|
+
"fills": "Riempie",
|
|
69
|
+
"is_filled_by": "Riempito da",
|
|
70
|
+
"abuts": "Si appoggia a",
|
|
71
|
+
"is_abutted_by": "Gli si appoggia",
|
|
72
|
+
"has_same_time": "Uguale a",
|
|
73
|
+
"is_bonded_to": "Si lega a",
|
|
74
|
+
"is_before": "Anteriore a",
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# Canonical → english display label.
|
|
78
|
+
CANONICAL_TO_ENGLISH: Dict[str, str] = {
|
|
79
|
+
"overlies": "Covers",
|
|
80
|
+
"is_after": "Covered by",
|
|
81
|
+
"cuts": "Cuts",
|
|
82
|
+
"is_cut_by": "Cut by",
|
|
83
|
+
"fills": "Fills",
|
|
84
|
+
"is_filled_by": "Filled by",
|
|
85
|
+
"abuts": "Leans on",
|
|
86
|
+
"is_abutted_by": "Leant on by",
|
|
87
|
+
"has_same_time": "Same as",
|
|
88
|
+
"is_bonded_to": "Bonded to",
|
|
89
|
+
"is_before": "Before",
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def display_label(canonical: str, locale: str = "it") -> str:
|
|
94
|
+
"""Return the localized display label for a canonical relation name."""
|
|
95
|
+
if locale.lower().startswith("en"):
|
|
96
|
+
return CANONICAL_TO_ENGLISH.get(canonical, canonical)
|
|
97
|
+
return CANONICAL_TO_ITALIAN.get(canonical, canonical)
|
|
98
|
+
|
|
99
|
+
|
|
49
100
|
# English fallbacks (Al-Khutm-style data).
|
|
50
101
|
_EN_TO_CANONICAL: Dict[str, str] = {
|
|
51
102
|
"covers": "overlies",
|
|
@@ -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
|
|
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,14 +217,70 @@ 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))
|
|
240
|
+
|
|
241
|
+
# === Step A: Inverse dedup — drop the redundant inverse direction ===
|
|
242
|
+
# E.g., if (overlies, A→B) exists, drop (is_after, B→A).
|
|
243
|
+
forward_keys: set = set()
|
|
244
|
+
for e in graph.edges:
|
|
245
|
+
if e.canonical in SYMMETRIC:
|
|
246
|
+
continue
|
|
247
|
+
forward_keys.add((e.canonical, e.source_id, e.target_id))
|
|
248
|
+
kept: List[Edge] = []
|
|
249
|
+
for e in graph.edges:
|
|
250
|
+
if e.canonical in SYMMETRIC:
|
|
251
|
+
kept.append(e)
|
|
252
|
+
continue
|
|
253
|
+
inv = INVERSE_PAIRS.get(e.canonical)
|
|
254
|
+
# If the forward counterpart of this inverse is already in the set, drop it
|
|
255
|
+
if inv is not None and (inv, e.target_id, e.source_id) in forward_keys:
|
|
256
|
+
if e.canonical > inv:
|
|
257
|
+
continue # drop; the lexicographically-first orientation wins
|
|
258
|
+
kept.append(e)
|
|
259
|
+
graph.edges = kept
|
|
260
|
+
|
|
261
|
+
# === Step B: Transitive reduction per canonical type ===
|
|
262
|
+
# If A→B and B→C exist under the same canonical, drop A→C.
|
|
263
|
+
try:
|
|
264
|
+
import networkx as nx
|
|
265
|
+
reduced: List[Edge] = []
|
|
266
|
+
by_canon: Dict[str, List[Edge]] = {}
|
|
267
|
+
for e in graph.edges:
|
|
268
|
+
by_canon.setdefault(e.canonical, []).append(e)
|
|
269
|
+
for canon, edges in by_canon.items():
|
|
270
|
+
if canon in SYMMETRIC:
|
|
271
|
+
reduced.extend(edges)
|
|
272
|
+
continue
|
|
273
|
+
dg = nx.DiGraph()
|
|
274
|
+
for ed in edges:
|
|
275
|
+
dg.add_edge(ed.source_id, ed.target_id)
|
|
276
|
+
try:
|
|
277
|
+
tr = nx.transitive_reduction(dg)
|
|
278
|
+
keep_set = set(tr.edges())
|
|
279
|
+
for ed in edges:
|
|
280
|
+
if (ed.source_id, ed.target_id) in keep_set:
|
|
281
|
+
reduced.append(ed)
|
|
282
|
+
except nx.NetworkXError:
|
|
283
|
+
reduced.extend(edges)
|
|
284
|
+
graph.edges = reduced
|
|
285
|
+
except ImportError:
|
|
286
|
+
pass # networkx not available; skip reduction
|
|
@@ -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.8.0 → pyarchinit_mini-2.9.1}/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
|
}
|