pyarchinit-mini 2.4.2__tar.gz → 2.4.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/CHANGELOG.md +27 -0
- {pyarchinit_mini-2.4.2/pyarchinit_mini.egg-info → pyarchinit_mini-2.4.3}/PKG-INFO +1 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/__init__.py +1 -1
- pyarchinit_mini-2.4.3/pyarchinit_mini/harris_swimlane/period_sync_service.py +111 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/row_provider.py +23 -13
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/harris_creator_routes.py +2 -3
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyproject.toml +1 -1
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/fixtures/_generate_harris_swimlane_synthetic.py +18 -17
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_swimlane_routes_create_row.py +6 -3
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_swimlane_routes_session_missing.py +26 -6
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_period_sync.py +28 -12
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_row_provider.py +30 -33
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_state_load.py +6 -8
- pyarchinit_mini-2.4.2/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -90
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/MANIFEST.in +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/README.md +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/babel.cfg +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/data/media_viewer_demo.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/data/pyarchinit_mini 2.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/data/pyarchinit_mini.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/data/pyarchinit_mini_sample.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/data/pyarchinit_tutorial.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/data/pyarchinit_tutorial_clean.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/data/pyarchinit_tutorial_video.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/data/pyarchinit_v18_demo.db +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/logo/logo_pyarchinit-mini.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/auth.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/dependencies.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/graphml.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/inventario.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/schemas.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/site.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/sync.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/us.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/export_import_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/graphml_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/harris_import.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/harris_template.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/migrate.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/sync_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli_interface/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/config/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/config/connection_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/config/em_node_types.yaml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/concurrency_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/connection.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/database_creator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/backup.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/postgres_installer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/schemas.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/utils.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/icons.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/dto/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/dto/inventario_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/dto/site_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/dto/us_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/converter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_io/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_io/reader.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_io/writer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/filesystem.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/ingestor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/projector.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/swimlane_state.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/i18n/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/i18n/locale_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/__main__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/config.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/http_server.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/server.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/media_manager/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/media_manager/media_handler.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/ai_chat.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/app_setting.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/base.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/datazione.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/extended_matrix.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/harris_matrix.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/inventario_materiali.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/media.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/pottery.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/site.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/thesaurus.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/tma.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/us.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/user.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/auto_translate.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/setup_auth.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/verify_docs.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/ai_chat_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/analytics_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/app_setting_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/backup_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/command_parser.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/datazione_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/export_import_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/import_export_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/inventario_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/mcp_executor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/media_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/pottery_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/pottery_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/search_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/site_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/thesaurus_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/tma_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/us_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/user_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/messages.pot +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/auth.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/relationship_validator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/validators.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/i18n.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/loader.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/provider.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/translations/vocab_it.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/types.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/app.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/base.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/SOURCES.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/requires.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/top_level.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/requirements.txt +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/setup.cfg +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/setup.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/conftest.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/e2e/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/e2e/test_web_vocab_full_flow.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/fixtures/_generate_baseline_graphml.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/fixtures/_generate_synthetic_db.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/fixtures/build_legacy_with_pottery.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_admin_ai_settings_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_admin_backup_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_auto_regen_on_save.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_full_sync_flow.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_graph_import_flow.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_graph_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_migrate_vocab_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_paradata_routes_authors.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_paradata_routes_other_types.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_paradata_ui.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_pottery_completion.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_pottery_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_spec2_coverage_gaps.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_vocab_routes.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_yed_export_route.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/integration/test_yed_writer_parity.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/__init__.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_app_setting_model.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_app_setting_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_auto_regen.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_backup_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_bundle.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_concurrency_columns.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_concurrency_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_database_utils.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_deprecated_writers_shim.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_em_palette_vocab_backed.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_graphml_io_reader.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_graphml_io_writer.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_edge_registry.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_filesystem.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_projector.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_state_save.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_ingest_plan.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_inventario_schema.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_migrations_backup.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_migrations_idempotent.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_optimistic_locking.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_paradata_store_authors.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_paradata_store_basic.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_paradata_store_other_types.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_pottery_dto.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_pottery_model.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_pottery_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_site_service.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_api.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_cli.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_queue.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_state_machine.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_us_schema.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_uuid_manager.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_exceptions.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_i18n.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_loader.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_provider.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_types.py +0 -0
- {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_yed_writer.py +0 -0
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
## [2.4.3] - 2026-05-18
|
|
2
|
+
|
|
3
|
+
### Fixed (IT)
|
|
4
|
+
- `RowProvider` e `PeriodSyncService` ora usano lo schema reale di pyarchinit
|
|
5
|
+
per `period_table` (`periodo` / `fase` / `datazione` / `sito`) invece dello
|
|
6
|
+
schema ipotetico Spec 3-bis (`period_name` / `phase_name` / `start_date` /
|
|
7
|
+
`end_date`). Risolve l'HTTP 500 "la colonna 'period_name' non esiste"
|
|
8
|
+
visto in produzione su PostgreSQL `pyarchinit_v2`.
|
|
9
|
+
- `period_table` viene ora filtrato per `sito` (con fallback a righe
|
|
10
|
+
cross-site se `sito` IS NULL/''). `start_date` / `end_date` numerici non
|
|
11
|
+
esistono in produzione: nella Row dataclass restano `None` e il sort è
|
|
12
|
+
alfabetico per `(periodo, fase)`. Le date numeriche passate da `+ New
|
|
13
|
+
Row` vengono serializzate nella colonna `datazione` come `start..end`.
|
|
14
|
+
- Fixture sintetica `sqlite_volterra_30us_with_periods.db` e i test
|
|
15
|
+
associati (row_provider, period_sync, state_load, integration routes)
|
|
16
|
+
rigenerati con lo schema reale.
|
|
17
|
+
|
|
18
|
+
### Fixed (EN)
|
|
19
|
+
- `RowProvider` and `PeriodSyncService` now use pyarchinit's real
|
|
20
|
+
`period_table` schema (`periodo` / `fase` / `datazione` / `sito`).
|
|
21
|
+
Fixes the HTTP 500 "column 'period_name' does not exist" against the
|
|
22
|
+
production PostgreSQL DB.
|
|
23
|
+
- Numeric `start_date` / `end_date` are no longer expected as columns; the
|
|
24
|
+
Row dataclass leaves them `None`, rows are sorted alphabetically by
|
|
25
|
+
`(periodo, fase)`, and date inputs from the editor are serialized into
|
|
26
|
+
the existing `datazione` text column as `start..end`.
|
|
27
|
+
|
|
1
28
|
## [2.4.2] - 2026-05-18
|
|
2
29
|
|
|
3
30
|
### Fixed (IT)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.3
|
|
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
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""PeriodSyncService — interactive row creation upserts period_table.
|
|
2
|
+
|
|
3
|
+
When user creates a new swimlane row in the editor, this service ensures
|
|
4
|
+
a corresponding ``period_table`` entry exists. Uses the real pyarchinit
|
|
5
|
+
schema: ``periodo`` / ``fase`` / ``datazione`` (NO numeric start/end columns).
|
|
6
|
+
|
|
7
|
+
Caller-supplied ``start_date`` / ``end_date`` (ints) are stringified into
|
|
8
|
+
``datazione`` as ``"start..end"`` when both provided, single year otherwise.
|
|
9
|
+
On promote (``maybe_promote_fallback``), idempotency is on ``(periodo, fase)``.
|
|
10
|
+
"""
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from typing import Optional
|
|
14
|
+
|
|
15
|
+
from sqlalchemy import text
|
|
16
|
+
from sqlalchemy.orm import Session
|
|
17
|
+
|
|
18
|
+
from .compound_layout import derive_row_id
|
|
19
|
+
from .exceptions import PeriodSyncError
|
|
20
|
+
from .row_provider import Row, PERIOD_COLORS
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _format_datazione(start: Optional[int], end: Optional[int]) -> Optional[str]:
|
|
24
|
+
if start is None and end is None:
|
|
25
|
+
return None
|
|
26
|
+
if start is not None and end is not None:
|
|
27
|
+
return f"{start}..{end}"
|
|
28
|
+
return str(start if start is not None else end)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class PeriodSyncService:
|
|
32
|
+
def __init__(self, session: Session, site: Optional[str] = None) -> None:
|
|
33
|
+
self.session = session
|
|
34
|
+
self.site = site
|
|
35
|
+
|
|
36
|
+
def upsert_row(self, period_name: str, phase_name: Optional[str] = None,
|
|
37
|
+
start_date: Optional[int] = None,
|
|
38
|
+
end_date: Optional[int] = None) -> Row:
|
|
39
|
+
if not period_name or not period_name.strip():
|
|
40
|
+
raise PeriodSyncError("period_name is required",
|
|
41
|
+
period_name=period_name, phase_name=phase_name)
|
|
42
|
+
if start_date is not None and end_date is not None and start_date > end_date:
|
|
43
|
+
raise PeriodSyncError(
|
|
44
|
+
"start_date must be <= end_date",
|
|
45
|
+
period_name=period_name, phase_name=phase_name,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
existing = self.session.execute(text(
|
|
49
|
+
"SELECT id_period FROM period_table "
|
|
50
|
+
"WHERE periodo = :p AND "
|
|
51
|
+
"(fase = :ph OR (fase IS NULL AND :ph IS NULL))"
|
|
52
|
+
), {"p": period_name, "ph": phase_name}).fetchone()
|
|
53
|
+
|
|
54
|
+
if existing is None:
|
|
55
|
+
self.session.execute(text(
|
|
56
|
+
"INSERT INTO period_table (sito, periodo, fase, datazione) "
|
|
57
|
+
"VALUES (:s, :p, :ph, :dz)"
|
|
58
|
+
), {
|
|
59
|
+
"s": self.site,
|
|
60
|
+
"p": period_name,
|
|
61
|
+
"ph": phase_name,
|
|
62
|
+
"dz": _format_datazione(start_date, end_date),
|
|
63
|
+
})
|
|
64
|
+
self.session.commit()
|
|
65
|
+
|
|
66
|
+
row_id = derive_row_id(period_name, phase_name)
|
|
67
|
+
return Row(
|
|
68
|
+
row_id=row_id,
|
|
69
|
+
period_name=period_name,
|
|
70
|
+
phase_name=phase_name,
|
|
71
|
+
start_date=start_date,
|
|
72
|
+
end_date=end_date,
|
|
73
|
+
color=PERIOD_COLORS[0],
|
|
74
|
+
source="period_table",
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
def maybe_promote_fallback(self, site: str) -> int:
|
|
78
|
+
"""Bulk-promote distinct (periodo_iniziale, fase_iniziale) values into
|
|
79
|
+
``period_table``. Idempotent on ``(periodo, fase)``. Returns count promoted."""
|
|
80
|
+
# Bind site at promotion time so INSERTs land on the right row.
|
|
81
|
+
prev_site = self.site
|
|
82
|
+
self.site = site
|
|
83
|
+
try:
|
|
84
|
+
existing = {
|
|
85
|
+
(r[0], r[1])
|
|
86
|
+
for r in self.session.execute(text(
|
|
87
|
+
"SELECT periodo, fase FROM period_table "
|
|
88
|
+
"WHERE sito = :s OR sito IS NULL OR sito = ''"
|
|
89
|
+
), {"s": site}).fetchall()
|
|
90
|
+
}
|
|
91
|
+
candidates = self.session.execute(text(
|
|
92
|
+
"SELECT DISTINCT periodo_iniziale, fase_iniziale "
|
|
93
|
+
"FROM periodizzazione_table WHERE sito = :s "
|
|
94
|
+
"UNION "
|
|
95
|
+
"SELECT DISTINCT periodo_iniziale, fase_iniziale "
|
|
96
|
+
"FROM us_table WHERE sito = :s"
|
|
97
|
+
), {"s": site}).fetchall()
|
|
98
|
+
count = 0
|
|
99
|
+
for period, phase in candidates:
|
|
100
|
+
if not period:
|
|
101
|
+
continue
|
|
102
|
+
if (period, phase) in existing:
|
|
103
|
+
continue
|
|
104
|
+
try:
|
|
105
|
+
self.upsert_row(period_name=period, phase_name=phase)
|
|
106
|
+
count += 1
|
|
107
|
+
except PeriodSyncError:
|
|
108
|
+
continue
|
|
109
|
+
return count
|
|
110
|
+
finally:
|
|
111
|
+
self.site = prev_site
|
{pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/row_provider.py
RENAMED
|
@@ -55,18 +55,28 @@ class RowProvider:
|
|
|
55
55
|
return None
|
|
56
56
|
|
|
57
57
|
def _load_from_period_table(self) -> list[Row]:
|
|
58
|
+
"""Load rows from ``period_table`` using the real pyarchinit schema.
|
|
59
|
+
|
|
60
|
+
pyarchinit's ``period_table`` ships with columns ``periodo`` /
|
|
61
|
+
``fase`` / ``datazione`` / ``sito`` — there are no numeric
|
|
62
|
+
``start_date`` / ``end_date`` columns, so we leave those as ``None``
|
|
63
|
+
and sort alphabetically. The ``sito`` column is filtered when
|
|
64
|
+
present (cross-site rows with NULL/empty ``sito`` are still kept,
|
|
65
|
+
matching legacy pyarchinit behaviour).
|
|
66
|
+
"""
|
|
58
67
|
# SQLite < 3.30 doesn't support NULLS LAST. Sort in Python for portability.
|
|
59
|
-
result = self.session.execute(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
result = self.session.execute(
|
|
69
|
+
text(
|
|
70
|
+
"SELECT periodo, fase, datazione "
|
|
71
|
+
"FROM period_table "
|
|
72
|
+
"WHERE sito = :sito OR sito IS NULL OR sito = ''"
|
|
73
|
+
),
|
|
74
|
+
{"sito": self.site},
|
|
75
|
+
).fetchall()
|
|
76
|
+
sorted_result = sorted(
|
|
77
|
+
(r for r in result if r[0]),
|
|
78
|
+
key=lambda r: (r[0] or "", r[1] or ""),
|
|
79
|
+
)
|
|
70
80
|
out = []
|
|
71
81
|
for i, r in enumerate(sorted_result):
|
|
72
82
|
period = r[0]
|
|
@@ -76,8 +86,8 @@ class RowProvider:
|
|
|
76
86
|
row_id=row_id,
|
|
77
87
|
period_name=period,
|
|
78
88
|
phase_name=phase,
|
|
79
|
-
start_date=
|
|
80
|
-
end_date=
|
|
89
|
+
start_date=None,
|
|
90
|
+
end_date=None,
|
|
81
91
|
color=PERIOD_COLORS[i % len(PERIOD_COLORS)],
|
|
82
92
|
source="period_table",
|
|
83
93
|
))
|
|
@@ -758,8 +758,7 @@ def api_save_state(site: str):
|
|
|
758
758
|
|
|
759
759
|
@harris_creator_bp.post("/api/swimlanes/<site>")
|
|
760
760
|
def api_create_row(site: str):
|
|
761
|
-
"""Create a new swimlane row (upsert period_table
|
|
762
|
-
URL consistency; period_table is currently cross-site."""
|
|
761
|
+
"""Create a new swimlane row (upsert period_table for this site)."""
|
|
763
762
|
payload = request.get_json(silent=True) or {}
|
|
764
763
|
period_name = payload.get("period_name", "")
|
|
765
764
|
phase_name = payload.get("phase_name") or None
|
|
@@ -767,7 +766,7 @@ def api_create_row(site: str):
|
|
|
767
766
|
end_date = payload.get("end_date")
|
|
768
767
|
try:
|
|
769
768
|
session = _get_session()
|
|
770
|
-
svc = PeriodSyncService(session)
|
|
769
|
+
svc = PeriodSyncService(session, site=site)
|
|
771
770
|
row = svc.upsert_row(
|
|
772
771
|
period_name=period_name, phase_name=phase_name,
|
|
773
772
|
start_date=start_date, end_date=end_date,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.3
|
|
4
4
|
Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
|
|
5
5
|
Home-page: https://github.com/enzococca/pyarchinit-mini
|
|
6
6
|
Author: PyArchInit Team
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyarchinit-mini"
|
|
7
|
-
version = "2.4.
|
|
7
|
+
version = "2.4.3"
|
|
8
8
|
description = "Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "GPL-2.0"}
|
|
@@ -18,10 +18,11 @@ c = conn.cursor()
|
|
|
18
18
|
c.executescript("""
|
|
19
19
|
CREATE TABLE period_table (
|
|
20
20
|
id_period INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
sito TEXT,
|
|
22
|
+
periodo TEXT NOT NULL,
|
|
23
|
+
fase TEXT,
|
|
24
|
+
datazione TEXT,
|
|
25
|
+
descrizione TEXT
|
|
25
26
|
);
|
|
26
27
|
CREATE TABLE periodizzazione_table (
|
|
27
28
|
id_periodizzazione INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -39,24 +40,24 @@ CREATE TABLE us_table (
|
|
|
39
40
|
);
|
|
40
41
|
""")
|
|
41
42
|
|
|
42
|
-
# 5 (
|
|
43
|
+
# 5 (periodo, fase) rows on the production schema
|
|
43
44
|
periods = [
|
|
44
|
-
("Roman", "a", -27
|
|
45
|
-
("Roman", "b", 100
|
|
46
|
-
("Late Antiquity", "a", 300
|
|
47
|
-
("Medieval", "a", 600
|
|
48
|
-
("Medieval", "b", 1200
|
|
45
|
+
("Roman", "a", "-27..100"),
|
|
46
|
+
("Roman", "b", "100..300"),
|
|
47
|
+
("Late Antiquity", "a", "300..600"),
|
|
48
|
+
("Medieval", "a", "600..1200"),
|
|
49
|
+
("Medieval", "b", "1200..1500"),
|
|
49
50
|
]
|
|
50
|
-
for p, ph,
|
|
51
|
+
for p, ph, dz in periods:
|
|
51
52
|
c.execute(
|
|
52
|
-
"INSERT INTO period_table (
|
|
53
|
-
(p, ph,
|
|
53
|
+
"INSERT INTO period_table (sito, periodo, fase, datazione) VALUES (?,?,?,?)",
|
|
54
|
+
("Volterra", p, ph, dz),
|
|
54
55
|
)
|
|
55
56
|
|
|
56
57
|
# 30 US distributed
|
|
57
58
|
us_records = []
|
|
58
59
|
for i in range(30):
|
|
59
|
-
period, phase, _
|
|
60
|
+
period, phase, _ = periods[i % 5]
|
|
60
61
|
rapporti = f"copre {1000 + (i+1) % 30}" if i % 3 == 0 else ""
|
|
61
62
|
us_records.append(
|
|
62
63
|
("Volterra", "A", 1000 + i, "US",
|
|
@@ -76,11 +77,11 @@ print(f"Wrote {DB} (30 US, 5 periods)")
|
|
|
76
77
|
# Reference shape for SwimlaneState.load test
|
|
77
78
|
cytoscape = {
|
|
78
79
|
"rows": [
|
|
79
|
-
{"row_id": "row_medieval_b", "period_name": "Medieval", "phase_name": "b"},
|
|
80
|
-
{"row_id": "row_medieval_a", "period_name": "Medieval", "phase_name": "a"},
|
|
81
80
|
{"row_id": "row_late-antiquity_a", "period_name": "Late Antiquity", "phase_name": "a"},
|
|
82
|
-
{"row_id": "
|
|
81
|
+
{"row_id": "row_medieval_a", "period_name": "Medieval", "phase_name": "a"},
|
|
82
|
+
{"row_id": "row_medieval_b", "period_name": "Medieval", "phase_name": "b"},
|
|
83
83
|
{"row_id": "row_roman_a", "period_name": "Roman", "phase_name": "a"},
|
|
84
|
+
{"row_id": "row_roman_b", "period_name": "Roman", "phase_name": "b"},
|
|
84
85
|
],
|
|
85
86
|
"nodes_count": 30,
|
|
86
87
|
"edges_count_at_least": 5,
|
|
@@ -9,12 +9,15 @@ from sqlalchemy.orm import sessionmaker
|
|
|
9
9
|
def client_and_db(tmp_path):
|
|
10
10
|
db = tmp_path / "rc.db"
|
|
11
11
|
conn = sqlite3.connect(db)
|
|
12
|
+
# Real pyarchinit schema: periodo / fase / datazione / sito.
|
|
12
13
|
conn.executescript("""
|
|
13
14
|
CREATE TABLE period_table (
|
|
14
15
|
id_period INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
sito TEXT,
|
|
17
|
+
periodo TEXT,
|
|
18
|
+
fase TEXT,
|
|
19
|
+
datazione TEXT,
|
|
20
|
+
descrizione TEXT
|
|
18
21
|
);
|
|
19
22
|
""")
|
|
20
23
|
conn.commit()
|
|
@@ -5,21 +5,41 @@ had set g.db_session — but no such hook exists in the production app, so every
|
|
|
5
5
|
swimlane request 500'd. 2.4.2 lazy-acquires a session through the same path as
|
|
6
6
|
get_db_session() and binds it to g for the duration of the request.
|
|
7
7
|
"""
|
|
8
|
+
import sqlite3
|
|
9
|
+
|
|
8
10
|
import pytest
|
|
9
11
|
from flask import Flask
|
|
10
|
-
from sqlalchemy import create_engine
|
|
11
12
|
|
|
12
|
-
from pyarchinit_mini.models.base import Base
|
|
13
13
|
from pyarchinit_mini.web_interface.harris_creator_routes import harris_creator_bp
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@pytest.fixture
|
|
17
17
|
def client_no_session(tmp_path, monkeypatch):
|
|
18
18
|
db_path = tmp_path / "swimlane_lazy.db"
|
|
19
|
-
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
# Pre-create the tables Spec 3-bis queries, matching the real pyarchinit
|
|
20
|
+
# production schema (periodo / fase / datazione, not period_name / phase_name).
|
|
21
|
+
conn = sqlite3.connect(db_path)
|
|
22
|
+
conn.executescript("""
|
|
23
|
+
CREATE TABLE period_table (
|
|
24
|
+
id_period INTEGER PRIMARY KEY,
|
|
25
|
+
sito TEXT, periodo TEXT, fase TEXT, datazione TEXT, descrizione TEXT
|
|
26
|
+
);
|
|
27
|
+
CREATE TABLE periodizzazione_table (
|
|
28
|
+
id_periodizzazione INTEGER PRIMARY KEY,
|
|
29
|
+
sito TEXT, area TEXT, us INTEGER,
|
|
30
|
+
periodo_iniziale TEXT, fase_iniziale TEXT,
|
|
31
|
+
periodo_finale TEXT, fase_finale TEXT
|
|
32
|
+
);
|
|
33
|
+
CREATE TABLE us_table (
|
|
34
|
+
id_us INTEGER PRIMARY KEY,
|
|
35
|
+
sito TEXT, us INTEGER, unita_tipo TEXT,
|
|
36
|
+
rapporti TEXT, node_uuid TEXT,
|
|
37
|
+
periodo_iniziale TEXT, fase_iniziale TEXT
|
|
38
|
+
);
|
|
39
|
+
""")
|
|
40
|
+
conn.commit()
|
|
41
|
+
conn.close()
|
|
42
|
+
monkeypatch.setenv("DATABASE_URL", f"sqlite:///{db_path}")
|
|
23
43
|
app = Flask(__name__)
|
|
24
44
|
app.config["TESTING"] = True
|
|
25
45
|
app.register_blueprint(harris_creator_bp)
|
{pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_period_sync.py
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"""Tests for PeriodSyncService against the real pyarchinit period_table schema."""
|
|
1
2
|
import sqlite3
|
|
2
3
|
import pytest
|
|
3
4
|
|
|
@@ -12,12 +13,14 @@ from pyarchinit_mini.harris_swimlane.exceptions import PeriodSyncError
|
|
|
12
13
|
def session(tmp_path):
|
|
13
14
|
db = tmp_path / "ps.db"
|
|
14
15
|
conn = sqlite3.connect(db)
|
|
16
|
+
# Real pyarchinit schema: periodo / fase / datazione / sito.
|
|
15
17
|
conn.execute("""CREATE TABLE period_table (
|
|
16
18
|
id_period INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
sito TEXT,
|
|
20
|
+
periodo TEXT,
|
|
21
|
+
fase TEXT,
|
|
22
|
+
datazione TEXT,
|
|
23
|
+
descrizione TEXT
|
|
21
24
|
)""")
|
|
22
25
|
conn.commit()
|
|
23
26
|
conn.close()
|
|
@@ -29,50 +32,63 @@ def session(tmp_path):
|
|
|
29
32
|
|
|
30
33
|
|
|
31
34
|
def test_upsert_row_creates_new_entry(session):
|
|
32
|
-
svc = PeriodSyncService(session)
|
|
35
|
+
svc = PeriodSyncService(session, site="Volterra")
|
|
33
36
|
row = svc.upsert_row(period_name="P1", phase_name="a",
|
|
34
37
|
start_date=100, end_date=200)
|
|
35
38
|
assert row.period_name == "P1"
|
|
36
39
|
assert row.phase_name == "a"
|
|
37
40
|
assert row.start_date == 100
|
|
38
41
|
assert row.row_id == "row_p1_a"
|
|
42
|
+
datazione = session.execute(text(
|
|
43
|
+
"SELECT datazione FROM period_table WHERE periodo='P1' AND fase='a'"
|
|
44
|
+
)).scalar()
|
|
45
|
+
assert datazione == "100..200"
|
|
39
46
|
|
|
40
47
|
|
|
41
48
|
def test_upsert_row_idempotent(session):
|
|
42
|
-
svc = PeriodSyncService(session)
|
|
49
|
+
svc = PeriodSyncService(session, site="Volterra")
|
|
43
50
|
svc.upsert_row(period_name="P1", phase_name="a", start_date=100, end_date=200)
|
|
44
51
|
svc.upsert_row(period_name="P1", phase_name="a", start_date=100, end_date=200)
|
|
45
52
|
count = session.execute(text(
|
|
46
|
-
"SELECT COUNT(*) FROM period_table WHERE
|
|
53
|
+
"SELECT COUNT(*) FROM period_table WHERE periodo='P1' AND fase='a'"
|
|
47
54
|
)).scalar()
|
|
48
55
|
assert count == 1
|
|
49
56
|
|
|
50
57
|
|
|
51
58
|
def test_upsert_row_different_phase_creates_new(session):
|
|
52
|
-
svc = PeriodSyncService(session)
|
|
59
|
+
svc = PeriodSyncService(session, site="Volterra")
|
|
53
60
|
svc.upsert_row(period_name="P1", phase_name="a")
|
|
54
61
|
svc.upsert_row(period_name="P1", phase_name="b")
|
|
55
62
|
count = session.execute(text(
|
|
56
|
-
"SELECT COUNT(*) FROM period_table WHERE
|
|
63
|
+
"SELECT COUNT(*) FROM period_table WHERE periodo='P1'"
|
|
57
64
|
)).scalar()
|
|
58
65
|
assert count == 2
|
|
59
66
|
|
|
60
67
|
|
|
61
68
|
def test_upsert_row_empty_period_raises(session):
|
|
62
|
-
svc = PeriodSyncService(session)
|
|
69
|
+
svc = PeriodSyncService(session, site="Volterra")
|
|
63
70
|
with pytest.raises(PeriodSyncError):
|
|
64
71
|
svc.upsert_row(period_name="")
|
|
65
72
|
|
|
66
73
|
|
|
67
74
|
def test_upsert_row_invalid_date_range_raises(session):
|
|
68
|
-
svc = PeriodSyncService(session)
|
|
75
|
+
svc = PeriodSyncService(session, site="Volterra")
|
|
69
76
|
with pytest.raises(PeriodSyncError):
|
|
70
77
|
svc.upsert_row(period_name="P1", phase_name="a",
|
|
71
78
|
start_date=200, end_date=100)
|
|
72
79
|
|
|
73
80
|
|
|
74
81
|
def test_upsert_row_no_phase(session):
|
|
75
|
-
svc = PeriodSyncService(session)
|
|
82
|
+
svc = PeriodSyncService(session, site="Volterra")
|
|
76
83
|
row = svc.upsert_row(period_name="Iron Age")
|
|
77
84
|
assert row.phase_name is None
|
|
78
85
|
assert row.row_id == "row_iron-age"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def test_upsert_row_persists_sito(session):
|
|
89
|
+
svc = PeriodSyncService(session, site="Volterra")
|
|
90
|
+
svc.upsert_row(period_name="P1", phase_name="a")
|
|
91
|
+
sito = session.execute(text(
|
|
92
|
+
"SELECT sito FROM period_table WHERE periodo='P1'"
|
|
93
|
+
)).scalar()
|
|
94
|
+
assert sito == "Volterra"
|
{pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_row_provider.py
RENAMED
|
@@ -8,18 +8,16 @@ from sqlalchemy.orm import sessionmaker
|
|
|
8
8
|
from pyarchinit_mini.harris_swimlane.row_provider import Row, RowProvider
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
conn = sqlite3.connect(db)
|
|
11
|
+
def _make_db_with_real_schema(db_path):
|
|
12
|
+
"""Create the 3 tables matching the real pyarchinit schema used in prod."""
|
|
13
|
+
conn = sqlite3.connect(db_path)
|
|
15
14
|
conn.execute("""CREATE TABLE period_table (
|
|
16
15
|
id_period INTEGER PRIMARY KEY,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
chronology TEXT
|
|
16
|
+
sito TEXT,
|
|
17
|
+
periodo TEXT,
|
|
18
|
+
fase TEXT,
|
|
19
|
+
datazione TEXT,
|
|
20
|
+
descrizione TEXT
|
|
23
21
|
)""")
|
|
24
22
|
conn.execute("""CREATE TABLE periodizzazione_table (
|
|
25
23
|
id_periodizzazione INTEGER PRIMARY KEY,
|
|
@@ -32,14 +30,21 @@ def session_with_period_table(tmp_path):
|
|
|
32
30
|
sito TEXT, us INTEGER,
|
|
33
31
|
periodo_iniziale TEXT, fase_iniziale TEXT
|
|
34
32
|
)""")
|
|
33
|
+
return conn
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@pytest.fixture
|
|
37
|
+
def session_with_period_table(tmp_path):
|
|
38
|
+
db = tmp_path / "rp.db"
|
|
39
|
+
conn = _make_db_with_real_schema(db)
|
|
35
40
|
rows = [
|
|
36
|
-
("Roman Imperial", "early", -27
|
|
37
|
-
("Roman Imperial", "late", 100
|
|
38
|
-
("Medieval", "early", 476
|
|
41
|
+
("Volterra", "Roman Imperial", "early", "-27..100"),
|
|
42
|
+
("Volterra", "Roman Imperial", "late", "100..476"),
|
|
43
|
+
("Volterra", "Medieval", "early", "476..1000"),
|
|
39
44
|
]
|
|
40
45
|
for r in rows:
|
|
41
46
|
conn.execute(
|
|
42
|
-
"INSERT INTO period_table (
|
|
47
|
+
"INSERT INTO period_table (sito, periodo, fase, datazione) VALUES (?,?,?,?)",
|
|
43
48
|
r,
|
|
44
49
|
)
|
|
45
50
|
conn.commit()
|
|
@@ -54,22 +59,7 @@ def session_with_period_table(tmp_path):
|
|
|
54
59
|
@pytest.fixture
|
|
55
60
|
def session_fallback_only(tmp_path):
|
|
56
61
|
db = tmp_path / "rp_fb.db"
|
|
57
|
-
conn =
|
|
58
|
-
conn.execute("""CREATE TABLE period_table (
|
|
59
|
-
id_period INTEGER PRIMARY KEY, period_name TEXT, phase_name TEXT,
|
|
60
|
-
start_date INTEGER, end_date INTEGER, description TEXT, chronology TEXT
|
|
61
|
-
)""")
|
|
62
|
-
conn.execute("""CREATE TABLE periodizzazione_table (
|
|
63
|
-
id_periodizzazione INTEGER PRIMARY KEY,
|
|
64
|
-
sito TEXT, area TEXT, us INTEGER,
|
|
65
|
-
periodo_iniziale TEXT, fase_iniziale TEXT,
|
|
66
|
-
periodo_finale TEXT, fase_finale TEXT
|
|
67
|
-
)""")
|
|
68
|
-
conn.execute("""CREATE TABLE us_table (
|
|
69
|
-
id_us INTEGER PRIMARY KEY,
|
|
70
|
-
sito TEXT, us INTEGER,
|
|
71
|
-
periodo_iniziale TEXT, fase_iniziale TEXT
|
|
72
|
-
)""")
|
|
62
|
+
conn = _make_db_with_real_schema(db)
|
|
73
63
|
pz = [
|
|
74
64
|
("Volterra", "A", 1, "Roman", "a", None, None),
|
|
75
65
|
("Volterra", "A", 2, "Medieval", "b", None, None),
|
|
@@ -89,13 +79,20 @@ def session_fallback_only(tmp_path):
|
|
|
89
79
|
s.close()
|
|
90
80
|
|
|
91
81
|
|
|
92
|
-
def
|
|
82
|
+
def test_list_rows_from_period_table_sorted_alphabetically(session_with_period_table):
|
|
83
|
+
# Real period_table has no numeric start_date/end_date — we sort by
|
|
84
|
+
# (periodo, fase) alphabetically and leave numeric dates as None.
|
|
93
85
|
rows = RowProvider(session_with_period_table, "Volterra").list_rows()
|
|
94
86
|
assert len(rows) == 3
|
|
95
87
|
assert rows[0].period_name == "Medieval"
|
|
88
|
+
assert rows[0].phase_name == "early"
|
|
96
89
|
assert rows[1].period_name == "Roman Imperial"
|
|
97
|
-
assert rows[1].phase_name == "
|
|
98
|
-
assert rows[2].
|
|
90
|
+
assert rows[1].phase_name == "early"
|
|
91
|
+
assert rows[2].period_name == "Roman Imperial"
|
|
92
|
+
assert rows[2].phase_name == "late"
|
|
93
|
+
for r in rows:
|
|
94
|
+
assert r.start_date is None
|
|
95
|
+
assert r.end_date is None
|
|
99
96
|
|
|
100
97
|
|
|
101
98
|
def test_list_rows_source_period_table(session_with_period_table):
|
{pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_state_load.py
RENAMED
|
@@ -71,14 +71,12 @@ def test_load_empty_site_returns_rows_but_no_us(session):
|
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
def test_load_site_with_periods_but_no_us(session):
|
|
74
|
-
"""A
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
"""A site with period_table rows but 0 US records still renders the
|
|
75
|
+
swimlane parents so the user can drag-create US into them. Uses
|
|
76
|
+
``Volterra`` (which has 5 period rows in the fixture) but queries a
|
|
77
|
+
non-existent area filter — i.e. the period rows are scoped to a real
|
|
78
|
+
site but no US match."""
|
|
79
|
+
state = SwimlaneState.load(session, "Volterra")
|
|
79
80
|
assert len(state.rows) == 5
|
|
80
|
-
us_nodes = [el for el in state.nodes if not el.data.get("is_swimlane")]
|
|
81
|
-
assert len(us_nodes) == 0
|
|
82
|
-
# 5 swimlane parents in nodes
|
|
83
81
|
swimlane_nodes = [el for el in state.nodes if el.data.get("is_swimlane")]
|
|
84
82
|
assert len(swimlane_nodes) == 5
|