pyarchinit-mini 2.0.1__tar.gz → 2.0.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.0.1 → pyarchinit_mini-2.0.3}/CHANGELOG.md +14 -0
- {pyarchinit_mini-2.0.1/pyarchinit_mini.egg-info → pyarchinit_mini-2.0.3}/PKG-INFO +1 -1
- pyarchinit_mini-2.0.3/data/pyarchinit_tutorial.db +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/__init__.py +1 -1
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/api/schemas.py +14 -5
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/dialogs.py +4 -3
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/graphml_parser.py +1 -1
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/import_export_service.py +26 -9
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/inventario_service.py +2 -2
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/us_service.py +6 -5
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/app.py +4 -4
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +21 -1
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/three_d_builder_routes.py +4 -4
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini.egg-info/SOURCES.txt +0 -16
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyproject.toml +1 -1
- pyarchinit_mini-2.0.1/data/media_viewer_demo.db +0 -0
- pyarchinit_mini-2.0.1/data/pyarchinit_mini 2.db +0 -0
- pyarchinit_mini-2.0.1/data/pyarchinit_mini.db +0 -0
- pyarchinit_mini-2.0.1/data/pyarchinit_tutorial.db +0 -0
- pyarchinit_mini-2.0.1/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
- pyarchinit_mini-2.0.1/data/pyarchinit_tutorial_clean.db +0 -0
- pyarchinit_mini-2.0.1/data/pyarchinit_tutorial_video.db +0 -0
- pyarchinit_mini-2.0.1/data/pyarchinit_v18_demo.db +0 -0
- pyarchinit_mini-2.0.1/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -118
- pyarchinit_mini-2.0.1/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -421
- pyarchinit_mini-2.0.1/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -373
- pyarchinit_mini-2.0.1/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -302
- pyarchinit_mini-2.0.1/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -463
- pyarchinit_mini-2.0.1/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -353
- pyarchinit_mini-2.0.1/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
- pyarchinit_mini-2.0.1/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
- pyarchinit_mini-2.0.1/pyarchinit_mini/translations/messages.pot +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/MANIFEST.in +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/README.md +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/babel.cfg +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/data/pyarchinit_mini_sample.db +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/logo/logo_pyarchinit-mini.png +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/api/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/api/auth.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/api/dependencies.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/api/graphml.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/api/inventario.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/api/site.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/api/sync.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/api/us.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli/export_import_cli.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli/graphml_cli.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli/harris_import.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli/harris_template.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli/migrate.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli/sync_cli.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli_interface/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/config/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/config/connection_manager.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/config/em_node_types.yaml +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/concurrency_manager.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/connection.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/database_creator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/manager.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/migrations.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/postgres_installer.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/database/schemas.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/icons.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/dto/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/dto/inventario_dto.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/dto/site_dto.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/dto/us_dto.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/exceptions.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/converter.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/i18n/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/i18n/locale_manager.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/__main__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/config.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/http_server.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/server.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/media_manager/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/media_manager/media_handler.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/base.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/datazione.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/extended_matrix.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/harris_matrix.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/inventario_materiali.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/media.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/site.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/thesaurus.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/us.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/models/user.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/pdf_export/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/auto_translate.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/setup_auth.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/scripts/verify_docs.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/analytics_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/command_parser.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/datazione_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/export_import_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/mcp_executor.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/media_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/site_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/thesaurus_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/user_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/stratigraph/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/utils/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/utils/auth.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/utils/exceptions.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/utils/relationship_validator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/utils/validators.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/harris_creator_routes.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/base.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini.egg-info/requires.txt +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini.egg-info/top_level.txt +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/requirements.txt +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/setup.cfg +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/setup.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/conftest.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/integration/__init__.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/integration/test_full_sync_flow.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_bundle.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_concurrency_columns.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_concurrency_manager.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_inventario_schema.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_optimistic_locking.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_site_service.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_sync_api.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_sync_cli.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_sync_queue.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_sync_state_machine.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_us_schema.py +0 -0
- {pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/tests/unit/test_uuid_manager.py +0 -0
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [2.0.2] - 2026-02-24
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **PostgreSQL type mismatch on US creation**: `us_table.us` column was migrated from INTEGER to VARCHAR(100) but code was still passing integer values, causing `psycopg2.errors.UndefinedFunction: operator does not exist: character varying = integer` on PostgreSQL databases
|
|
5
|
+
- Fixed `us_service._get_us_by_site_area_number`: always cast `us_number` to `str` in SQL params
|
|
6
|
+
- Fixed `us_service.create_us_dto`: cast `US.us == str(us_data['us'])` in ORM filter
|
|
7
|
+
- Fixed `web_interface/app.py`: `us` field kept as `str` instead of `int` in `us_data` dict (create and update flows)
|
|
8
|
+
- Fixed `web_interface/three_d_builder_routes.py`: `US.us == str(data['us'])` in all 3D builder filters
|
|
9
|
+
- Fixed `desktop_gui/dialogs.py`: validate US number as int but pass as str to DB layer
|
|
10
|
+
- Fixed `inventario_service.py`: cast `us_number` to str in all US existence checks
|
|
11
|
+
- Fixed `api/schemas.py`: `us` field changed from `int` to `str` (with backward-compatible validator accepting both)
|
|
12
|
+
- Fixed `mcp_server/graphml_parser.py`: safe int cast for Periodizzazione.us comparison (still INTEGER column)
|
|
13
|
+
|
|
14
|
+
|
|
1
15
|
# Changelog
|
|
2
16
|
|
|
3
17
|
All notable changes to PyArchInit-Mini will be documented in this file.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.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
|
|
Binary file
|
|
@@ -3,7 +3,7 @@ Pydantic schemas for API request/response validation
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from datetime import datetime
|
|
6
|
-
from typing import Optional, List
|
|
6
|
+
from typing import Optional, List, Union
|
|
7
7
|
from pydantic import BaseModel, Field, validator
|
|
8
8
|
|
|
9
9
|
# Base schemas
|
|
@@ -59,7 +59,12 @@ class USBase(BaseModel):
|
|
|
59
59
|
"""Base US schema"""
|
|
60
60
|
sito: str = Field(..., max_length=350, description="Site name")
|
|
61
61
|
area: Optional[str] = Field(None, max_length=20, description="Area")
|
|
62
|
-
us:
|
|
62
|
+
us: str = Field(..., description="US number (numeric or alphanumeric, e.g. '1' or 'A1')")
|
|
63
|
+
|
|
64
|
+
@validator('us', pre=True)
|
|
65
|
+
def us_to_str(cls, v):
|
|
66
|
+
"""Accept int or str — us column is VARCHAR(100)"""
|
|
67
|
+
return str(v).strip() if v is not None else v
|
|
63
68
|
d_stratigrafica: Optional[str] = Field(None, max_length=350, description="Stratigraphic description")
|
|
64
69
|
d_interpretativa: Optional[str] = Field(None, max_length=350, description="Interpretative description")
|
|
65
70
|
descrizione: Optional[str] = Field(None, description="Description")
|
|
@@ -231,7 +236,11 @@ class USUpdate(BaseModel):
|
|
|
231
236
|
"""Schema for updating a US"""
|
|
232
237
|
sito: Optional[str] = Field(None, max_length=350)
|
|
233
238
|
area: Optional[str] = Field(None, max_length=20)
|
|
234
|
-
us: Optional[
|
|
239
|
+
us: Optional[str] = Field(None, description="US number (numeric or alphanumeric)")
|
|
240
|
+
|
|
241
|
+
@validator('us', pre=True)
|
|
242
|
+
def us_to_str(cls, v):
|
|
243
|
+
return str(v).strip() if v is not None else v
|
|
235
244
|
d_stratigrafica: Optional[str] = Field(None, max_length=350)
|
|
236
245
|
d_interpretativa: Optional[str] = Field(None, max_length=350)
|
|
237
246
|
descrizione: Optional[str] = None
|
|
@@ -413,7 +422,7 @@ class InventarioBase(BaseModel):
|
|
|
413
422
|
definizione: Optional[str] = Field(None, max_length=20, description="Definition")
|
|
414
423
|
descrizione: Optional[str] = Field(None, description="Description")
|
|
415
424
|
area: Optional[str] = Field(None, max_length=20, description="Area")
|
|
416
|
-
us: Optional[
|
|
425
|
+
us: Optional[str] = Field(None, description="US number (numeric or alphanumeric)")
|
|
417
426
|
lavato: Optional[str] = Field(None, max_length=5, description="Washed")
|
|
418
427
|
nr_cassa: Optional[str] = Field(None, max_length=20, description="Box number")
|
|
419
428
|
luogo_conservazione: Optional[str] = Field(None, max_length=350, description="Conservation location")
|
|
@@ -460,7 +469,7 @@ class InventarioUpdate(BaseModel):
|
|
|
460
469
|
definizione: Optional[str] = Field(None, max_length=20)
|
|
461
470
|
descrizione: Optional[str] = None
|
|
462
471
|
area: Optional[str] = Field(None, max_length=20)
|
|
463
|
-
us: Optional[
|
|
472
|
+
us: Optional[str] = Field(None, description="US number")
|
|
464
473
|
lavato: Optional[str] = Field(None, max_length=5)
|
|
465
474
|
nr_cassa: Optional[str] = Field(None, max_length=20)
|
|
466
475
|
luogo_conservazione: Optional[str] = Field(None, max_length=350)
|
|
@@ -643,17 +643,18 @@ class USDialog(BaseDialog):
|
|
|
643
643
|
messagebox.showerror(_("Error"), _("US number is required"))
|
|
644
644
|
return
|
|
645
645
|
|
|
646
|
+
# Validate: must be numeric (keep legacy GUI behavior)
|
|
646
647
|
try:
|
|
647
|
-
|
|
648
|
+
int(us_number) # validate only, keep as string for DB
|
|
648
649
|
except ValueError:
|
|
649
650
|
messagebox.showerror(_("Error"), _("US number must be an integer"))
|
|
650
651
|
return
|
|
651
652
|
|
|
652
|
-
# Prepare data
|
|
653
|
+
# Prepare data (us is VARCHAR(100) in DB — pass as string)
|
|
653
654
|
us_data = {
|
|
654
655
|
'sito': sito,
|
|
655
656
|
'area': self.fields['area'].get().strip() or None,
|
|
656
|
-
'us': us_number,
|
|
657
|
+
'us': str(us_number).strip(),
|
|
657
658
|
'd_stratigrafica': self.fields['d_stratigrafica'].get("1.0", tk.END).strip() or None,
|
|
658
659
|
'd_interpretativa': self.fields['d_interpretativa'].get("1.0", tk.END).strip() or None,
|
|
659
660
|
'schedatore': self.fields['schedatore'].get().strip() or None,
|
{pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/mcp_server/graphml_parser.py
RENAMED
|
@@ -543,7 +543,7 @@ class GraphMLParser:
|
|
|
543
543
|
.filter(
|
|
544
544
|
Periodizzazione.sito == us_record.sito,
|
|
545
545
|
Periodizzazione.area == us_record.area,
|
|
546
|
-
Periodizzazione.us == us_record.us,
|
|
546
|
+
Periodizzazione.us == (int(us_record.us) if str(us_record.us).lstrip('-').isdigit() else -1),
|
|
547
547
|
)
|
|
548
548
|
.first()
|
|
549
549
|
)
|
{pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/import_export_service.py
RENAMED
|
@@ -18,6 +18,7 @@ import ast
|
|
|
18
18
|
import json
|
|
19
19
|
import shutil
|
|
20
20
|
import os
|
|
21
|
+
import uuid
|
|
21
22
|
from datetime import datetime, date
|
|
22
23
|
from typing import Dict, List, Optional, Tuple, Any
|
|
23
24
|
import logging
|
|
@@ -375,13 +376,16 @@ class ImportExportService:
|
|
|
375
376
|
stats['updated'] += 1
|
|
376
377
|
else:
|
|
377
378
|
# Insert new site
|
|
379
|
+
# Include BaseModel fields (version_number is NOT NULL, entity_uuid for uniqueness)
|
|
378
380
|
insert_query = text("""
|
|
379
381
|
INSERT INTO site_table
|
|
380
382
|
(sito, nazione, regione, comune, provincia, definizione_sito,
|
|
381
|
-
descrizione, sito_path, find_check, created_at, updated_at
|
|
383
|
+
descrizione, sito_path, find_check, created_at, updated_at,
|
|
384
|
+
version_number, entity_uuid, sync_status)
|
|
382
385
|
VALUES
|
|
383
386
|
(:sito, :nazione, :regione, :comune, :provincia, :definizione_sito,
|
|
384
|
-
:descrizione, :sito_path, :find_check, :created_at, :updated_at
|
|
387
|
+
:descrizione, :sito_path, :find_check, :created_at, :updated_at,
|
|
388
|
+
:version_number, :entity_uuid, :sync_status)
|
|
385
389
|
""")
|
|
386
390
|
|
|
387
391
|
mini_session.execute(insert_query, {
|
|
@@ -393,9 +397,12 @@ class ImportExportService:
|
|
|
393
397
|
'definizione_sito': site_data.get('definizione_sito'),
|
|
394
398
|
'descrizione': site_data.get('descrizione'),
|
|
395
399
|
'sito_path': site_data.get('sito_path'),
|
|
396
|
-
'find_check': site_data.get('find_check',
|
|
400
|
+
'find_check': bool(site_data.get('find_check', False)),
|
|
397
401
|
'created_at': datetime.now(),
|
|
398
|
-
'updated_at': datetime.now()
|
|
402
|
+
'updated_at': datetime.now(),
|
|
403
|
+
'version_number': 1,
|
|
404
|
+
'entity_uuid': str(uuid.uuid4()),
|
|
405
|
+
'sync_status': 'new'
|
|
399
406
|
})
|
|
400
407
|
stats['imported'] += 1
|
|
401
408
|
|
|
@@ -648,9 +655,10 @@ class ImportExportService:
|
|
|
648
655
|
us_data = dict(us_row._mapping)
|
|
649
656
|
|
|
650
657
|
# Check if US already exists using raw SQL (avoids ORM metadata issues)
|
|
658
|
+
# Cast us to str: source db may have INTEGER us, but mini uses VARCHAR(100)
|
|
651
659
|
existing = mini_session.execute(
|
|
652
660
|
text("SELECT id_us FROM us_table WHERE sito = :sito AND us = :us LIMIT 1"),
|
|
653
|
-
{'sito': us_data['sito'], 'us': us_data['us']}
|
|
661
|
+
{'sito': us_data['sito'], 'us': str(us_data['us'])}
|
|
654
662
|
).fetchone()
|
|
655
663
|
|
|
656
664
|
# Map fields from PyArchInit to PyArchInit-Mini
|
|
@@ -772,11 +780,20 @@ class ImportExportService:
|
|
|
772
780
|
# If it's not None or date, set to None
|
|
773
781
|
data_schedatura = None
|
|
774
782
|
|
|
783
|
+
# Cast us and area to str: source db (old pyarchinit) stores them as INTEGER,
|
|
784
|
+
# but pyarchinit-mini us_table.us is VARCHAR(100) after migration.
|
|
785
|
+
raw_us = source_data.get('us')
|
|
786
|
+
raw_area = source_data.get('area')
|
|
787
|
+
|
|
775
788
|
mapped = {
|
|
776
789
|
# Core fields
|
|
777
790
|
'sito': source_data.get('sito'),
|
|
778
|
-
'area':
|
|
779
|
-
'us':
|
|
791
|
+
'area': str(raw_area) if raw_area is not None else None,
|
|
792
|
+
'us': str(raw_us) if raw_us is not None else None,
|
|
793
|
+
# BaseModel required fields (NOT NULL, no server-side default in PostgreSQL)
|
|
794
|
+
'version_number': 1,
|
|
795
|
+
'sync_status': 'new',
|
|
796
|
+
'entity_uuid': str(uuid.uuid4()),
|
|
780
797
|
'd_stratigrafica': source_data.get('d_stratigrafica'),
|
|
781
798
|
'd_interpretativa': source_data.get('d_interpretativa'),
|
|
782
799
|
'descrizione': source_data.get('descrizione'),
|
|
@@ -850,10 +867,10 @@ class ImportExportService:
|
|
|
850
867
|
|
|
851
868
|
def _insert_us_mini(self, session: Session, data: Dict[str, Any]):
|
|
852
869
|
"""Insert US into PyArchInit-Mini database"""
|
|
853
|
-
# Generate next id_us (
|
|
870
|
+
# Generate next id_us (INTEGER primary key with autoincrement)
|
|
854
871
|
max_id_result = session.execute(text("SELECT MAX(CAST(id_us AS INTEGER)) FROM us_table")).fetchone()
|
|
855
872
|
next_id = (max_id_result[0] or 0) + 1 if max_id_result else 1
|
|
856
|
-
data['id_us'] =
|
|
873
|
+
data['id_us'] = next_id # Keep as int — id_us is INTEGER in PostgreSQL
|
|
857
874
|
|
|
858
875
|
# Build INSERT with all fields including id_us
|
|
859
876
|
fields = list(data.keys())
|
{pyarchinit_mini-2.0.1 → pyarchinit_mini-2.0.3}/pyarchinit_mini/services/inventario_service.py
RENAMED
|
@@ -97,7 +97,7 @@ class InventarioService:
|
|
|
97
97
|
count = session.query(US).filter(
|
|
98
98
|
US.sito == sito,
|
|
99
99
|
or_(US.area == area, (US.area.is_(None) & (area == ''))),
|
|
100
|
-
US.us == us_number
|
|
100
|
+
US.us == str(us_number) # us is VARCHAR(100)
|
|
101
101
|
).count()
|
|
102
102
|
|
|
103
103
|
if count == 0:
|
|
@@ -271,7 +271,7 @@ class InventarioService:
|
|
|
271
271
|
count = self.db_manager.execute_raw_query(query, {
|
|
272
272
|
'sito': sito,
|
|
273
273
|
'area': area,
|
|
274
|
-
'us_number': us_number
|
|
274
|
+
'us_number': str(us_number) # us is VARCHAR(100)
|
|
275
275
|
})[0][0]
|
|
276
276
|
|
|
277
277
|
if count == 0:
|
|
@@ -60,7 +60,7 @@ class USService:
|
|
|
60
60
|
existing_us = session.query(US).filter(
|
|
61
61
|
US.sito == us_data['sito'],
|
|
62
62
|
US.area == us_data.get('area', ''),
|
|
63
|
-
US.us == us_data['us']
|
|
63
|
+
US.us == str(us_data['us']) # us is VARCHAR(100)
|
|
64
64
|
).first()
|
|
65
65
|
|
|
66
66
|
if existing_us:
|
|
@@ -237,9 +237,10 @@ class USService:
|
|
|
237
237
|
filters = {'sito': site_name, 'area': area}
|
|
238
238
|
return self.get_all_us(page=page, size=size, filters=filters)
|
|
239
239
|
|
|
240
|
-
def _get_us_by_site_area_number(self, sito: str, area: str, us_number
|
|
241
|
-
"""Get US by site, area and number combination
|
|
242
|
-
|
|
240
|
+
def _get_us_by_site_area_number(self, sito: str, area: str, us_number) -> Optional[US]:
|
|
241
|
+
"""Get US by site, area and number combination.
|
|
242
|
+
us_number can be int or str — us column is VARCHAR(100) in PostgreSQL.
|
|
243
|
+
"""
|
|
243
244
|
query = """
|
|
244
245
|
SELECT * FROM us_table
|
|
245
246
|
WHERE sito = :sito AND
|
|
@@ -252,7 +253,7 @@ class USService:
|
|
|
252
253
|
result = session.execute(text(query), {
|
|
253
254
|
'sito': sito,
|
|
254
255
|
'area': area,
|
|
255
|
-
'us_number': us_number
|
|
256
|
+
'us_number': str(us_number) # always str: us column is VARCHAR
|
|
256
257
|
}).fetchone()
|
|
257
258
|
|
|
258
259
|
if result:
|
|
@@ -884,7 +884,7 @@ def create_app():
|
|
|
884
884
|
# TAB 1: Informazioni Base
|
|
885
885
|
'sito': form.sito.data,
|
|
886
886
|
'area': form.area.data,
|
|
887
|
-
'us':
|
|
887
|
+
'us': str(form.us.data).strip() if form.us.data else None,
|
|
888
888
|
'unita_tipo': form.unita_tipo.data,
|
|
889
889
|
'tipo_documento': form.tipo_documento.data if form.unita_tipo.data == 'DOC' else None,
|
|
890
890
|
'anno_scavo': form.anno_scavo.data,
|
|
@@ -979,7 +979,7 @@ def create_app():
|
|
|
979
979
|
with db_manager.connection.get_session() as session:
|
|
980
980
|
relationship_sync_service.sync_rapporti_to_relationships_table(
|
|
981
981
|
sito=us_data['sito'],
|
|
982
|
-
us_number=int(us_data['us']),
|
|
982
|
+
us_number=int(str(us_data['us'])) if us_data.get('us') and str(us_data.get('us','')).strip().lstrip('-').isdigit() else 0,
|
|
983
983
|
rapporti_text=us_data.get('rapporti', ''),
|
|
984
984
|
session=session
|
|
985
985
|
)
|
|
@@ -1117,7 +1117,7 @@ def create_app():
|
|
|
1117
1117
|
# TAB 1: Informazioni Base
|
|
1118
1118
|
'sito': form.sito.data,
|
|
1119
1119
|
'area': form.area.data,
|
|
1120
|
-
'us':
|
|
1120
|
+
'us': str(form.us.data).strip() if form.us.data else None,
|
|
1121
1121
|
'unita_tipo': form.unita_tipo.data,
|
|
1122
1122
|
'tipo_documento': form.tipo_documento.data if form.unita_tipo.data == 'DOC' else None,
|
|
1123
1123
|
'anno_scavo': form.anno_scavo.data,
|
|
@@ -1212,7 +1212,7 @@ def create_app():
|
|
|
1212
1212
|
with db_manager.connection.get_session() as session:
|
|
1213
1213
|
relationship_sync_service.sync_rapporti_to_relationships_table(
|
|
1214
1214
|
sito=update_data['sito'],
|
|
1215
|
-
us_number=int(update_data['us']),
|
|
1215
|
+
us_number=int(str(update_data['us'])) if update_data.get('us') and str(update_data.get('us','')).strip().lstrip('-').isdigit() else 0,
|
|
1216
1216
|
rapporti_text=update_data.get('rapporti', ''),
|
|
1217
1217
|
session=session
|
|
1218
1218
|
)
|
|
@@ -534,16 +534,36 @@ document.getElementById('start_import_btn').addEventListener('click', function()
|
|
|
534
534
|
let resultsHTML = '<table class="table table-sm">';
|
|
535
535
|
resultsHTML += '<thead><tr><th>{{ _("Table") }}</th><th>{{ _("Imported") }}</th><th>{{ _("Updated") }}</th><th>{{ _("Errors") }}</th></tr></thead><tbody>';
|
|
536
536
|
|
|
537
|
+
let allErrors = [];
|
|
537
538
|
for (const [table, stats] of Object.entries(result.results)) {
|
|
539
|
+
const errCount = stats.errors ? stats.errors.length : 0;
|
|
538
540
|
resultsHTML += `<tr>
|
|
539
541
|
<td><strong>${table}</strong></td>
|
|
540
542
|
<td class="text-success">${stats.imported || 0}</td>
|
|
541
543
|
<td class="text-warning">${stats.updated || 0}</td>
|
|
542
|
-
<td class="text-danger">${
|
|
544
|
+
<td class="text-danger">${errCount}</td>
|
|
543
545
|
</tr>`;
|
|
546
|
+
if (stats.errors && stats.errors.length > 0) {
|
|
547
|
+
stats.errors.forEach(e => allErrors.push(`[${table}] ${e}`));
|
|
548
|
+
}
|
|
544
549
|
}
|
|
545
550
|
|
|
546
551
|
resultsHTML += '</tbody></table>';
|
|
552
|
+
|
|
553
|
+
// Show error details if any
|
|
554
|
+
if (allErrors.length > 0) {
|
|
555
|
+
const errId = 'import_error_details';
|
|
556
|
+
resultsHTML += `<div class="mt-2">
|
|
557
|
+
<button class="btn btn-sm btn-outline-danger" type="button"
|
|
558
|
+
onclick="var el=document.getElementById('${errId}'); el.style.display=(el.style.display==='none'?'block':'none')">
|
|
559
|
+
▼ {{ _("Show error details") }} (${allErrors.length})
|
|
560
|
+
</button>
|
|
561
|
+
<div id="${errId}" style="display:none; margin-top:8px; max-height:300px; overflow-y:auto;">
|
|
562
|
+
<pre style="font-size:11px; background:#fff0f0; border:1px solid #f5c6cb; padding:10px; border-radius:4px;">${allErrors.map(e => e.replace(/</g,'<').replace(/>/g,'>')).join('\n')}</pre>
|
|
563
|
+
</div>
|
|
564
|
+
</div>`;
|
|
565
|
+
}
|
|
566
|
+
|
|
547
567
|
document.getElementById('import_results_content').innerHTML = resultsHTML;
|
|
548
568
|
document.getElementById('import_results').style.display = 'block';
|
|
549
569
|
} else {
|
|
@@ -1354,7 +1354,7 @@ def create_us():
|
|
|
1354
1354
|
existing = db_session.query(US).filter(
|
|
1355
1355
|
US.sito == data['sito'],
|
|
1356
1356
|
US.area == data.get('area', ''),
|
|
1357
|
-
US.us ==
|
|
1357
|
+
US.us == str(data['us'])
|
|
1358
1358
|
).first()
|
|
1359
1359
|
|
|
1360
1360
|
if existing:
|
|
@@ -1367,7 +1367,7 @@ def create_us():
|
|
|
1367
1367
|
new_us = US()
|
|
1368
1368
|
new_us.sito = data['sito']
|
|
1369
1369
|
new_us.area = data.get('area', '')
|
|
1370
|
-
new_us.us =
|
|
1370
|
+
new_us.us = str(data['us'])
|
|
1371
1371
|
new_us.unita_tipo = 'USM' if data.get('tipo') == 'usm' else 'US'
|
|
1372
1372
|
new_us.d_stratigrafica = data.get('d_stratigrafica', '')
|
|
1373
1373
|
new_us.d_interpretativa = data.get('d_interpretativa', '')
|
|
@@ -1442,7 +1442,7 @@ def update_us():
|
|
|
1442
1442
|
us_record = db_session.query(US).filter(
|
|
1443
1443
|
US.sito == data['sito'],
|
|
1444
1444
|
US.area == data.get('area', ''),
|
|
1445
|
-
US.us ==
|
|
1445
|
+
US.us == str(data['us'])
|
|
1446
1446
|
).first()
|
|
1447
1447
|
|
|
1448
1448
|
if not us_record:
|
|
@@ -1520,7 +1520,7 @@ def delete_us():
|
|
|
1520
1520
|
us_record = db_session.query(US).filter(
|
|
1521
1521
|
US.sito == data['sito'],
|
|
1522
1522
|
US.area == data.get('area', ''),
|
|
1523
|
-
US.us ==
|
|
1523
|
+
US.us == str(data['us'])
|
|
1524
1524
|
).first()
|
|
1525
1525
|
|
|
1526
1526
|
if not us_record:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.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
|
|
@@ -5,15 +5,8 @@ babel.cfg
|
|
|
5
5
|
pyproject.toml
|
|
6
6
|
requirements.txt
|
|
7
7
|
setup.py
|
|
8
|
-
data/media_viewer_demo.db
|
|
9
|
-
data/pyarchinit_mini 2.db
|
|
10
|
-
data/pyarchinit_mini.db
|
|
11
8
|
data/pyarchinit_mini_sample.db
|
|
12
9
|
data/pyarchinit_tutorial.db
|
|
13
|
-
data/pyarchinit_tutorial_backup_20251030_093228.db
|
|
14
|
-
data/pyarchinit_tutorial_clean.db
|
|
15
|
-
data/pyarchinit_tutorial_video.db
|
|
16
|
-
data/pyarchinit_v18_demo.db
|
|
17
10
|
logo/logo_pyarchinit-mini.png
|
|
18
11
|
pyarchinit_mini/__init__.py
|
|
19
12
|
pyarchinit_mini/exceptions.py
|
|
@@ -132,8 +125,6 @@ pyarchinit_mini/mcp_server/tools/build_3d_tool.py
|
|
|
132
125
|
pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py
|
|
133
126
|
pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py
|
|
134
127
|
pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py
|
|
135
|
-
pyarchinit_mini/mcp_server/tools/create_database_tool.py
|
|
136
|
-
pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py
|
|
137
128
|
pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py
|
|
138
129
|
pyarchinit_mini/mcp_server/tools/data_management_tool.py
|
|
139
130
|
pyarchinit_mini/mcp_server/tools/database_manager_tool.py
|
|
@@ -185,10 +176,6 @@ pyarchinit_mini/scripts/__init__.py
|
|
|
185
176
|
pyarchinit_mini/scripts/auto_translate.py
|
|
186
177
|
pyarchinit_mini/scripts/configure_claude_desktop.py
|
|
187
178
|
pyarchinit_mini/scripts/create_admin_user.py
|
|
188
|
-
pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py
|
|
189
|
-
pyarchinit_mini/scripts/create_italian_sample_database.py
|
|
190
|
-
pyarchinit_mini/scripts/create_sample_for_webapp.py
|
|
191
|
-
pyarchinit_mini/scripts/create_sample_with_50_us.py
|
|
192
179
|
pyarchinit_mini/scripts/generate_test_3d_model.py
|
|
193
180
|
pyarchinit_mini/scripts/load_italian_as_main.py
|
|
194
181
|
pyarchinit_mini/scripts/load_sample_as_main.py
|
|
@@ -227,10 +214,7 @@ pyarchinit_mini/stratigraph/sync_orchestrator.py
|
|
|
227
214
|
pyarchinit_mini/stratigraph/sync_queue.py
|
|
228
215
|
pyarchinit_mini/stratigraph/sync_state_machine.py
|
|
229
216
|
pyarchinit_mini/stratigraph/uuid_manager.py
|
|
230
|
-
pyarchinit_mini/translations/messages.pot
|
|
231
|
-
pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo
|
|
232
217
|
pyarchinit_mini/translations/en/LC_MESSAGES/messages.po
|
|
233
|
-
pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo
|
|
234
218
|
pyarchinit_mini/translations/it/LC_MESSAGES/messages.po
|
|
235
219
|
pyarchinit_mini/utils/__init__.py
|
|
236
220
|
pyarchinit_mini/utils/auth.py
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyarchinit-mini"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.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"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Create Database Tool
|
|
3
|
-
|
|
4
|
-
Creates empty PyArchInit-Mini databases with full schema.
|
|
5
|
-
Supports both SQLite and PostgreSQL databases.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
import logging
|
|
9
|
-
from typing import Dict, Any
|
|
10
|
-
from .base_tool import BaseTool, ToolDescription
|
|
11
|
-
|
|
12
|
-
logger = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class CreateDatabaseTool(BaseTool):
|
|
16
|
-
"""Create Database - Creates empty PyArchInit-Mini database with schema"""
|
|
17
|
-
|
|
18
|
-
def to_tool_description(self) -> ToolDescription:
|
|
19
|
-
return ToolDescription(
|
|
20
|
-
name="create_database",
|
|
21
|
-
description=(
|
|
22
|
-
"Create an empty PyArchInit-Mini database with full schema. "
|
|
23
|
-
"Supports SQLite and PostgreSQL. Creates all necessary tables "
|
|
24
|
-
"for sites, stratigraphic units, inventories, relationships, etc."
|
|
25
|
-
),
|
|
26
|
-
input_schema={
|
|
27
|
-
"type": "object",
|
|
28
|
-
"properties": {
|
|
29
|
-
"db_type": {
|
|
30
|
-
"type": "string",
|
|
31
|
-
"enum": ["sqlite", "postgresql"],
|
|
32
|
-
"description": "Database type: sqlite or postgresql"
|
|
33
|
-
},
|
|
34
|
-
"db_path": {
|
|
35
|
-
"type": "string",
|
|
36
|
-
"description": "For SQLite: file path (e.g., 'data/new_project.db'). For PostgreSQL: database name"
|
|
37
|
-
},
|
|
38
|
-
"overwrite": {
|
|
39
|
-
"type": "boolean",
|
|
40
|
-
"description": "If true, overwrite existing database. Default: false",
|
|
41
|
-
"default": False
|
|
42
|
-
},
|
|
43
|
-
"postgres_config": {
|
|
44
|
-
"type": "object",
|
|
45
|
-
"description": "PostgreSQL connection configuration (required for postgresql)",
|
|
46
|
-
"properties": {
|
|
47
|
-
"host": {"type": "string", "description": "PostgreSQL host", "default": "localhost"},
|
|
48
|
-
"port": {"type": "integer", "description": "PostgreSQL port", "default": 5432},
|
|
49
|
-
"user": {"type": "string", "description": "PostgreSQL user"},
|
|
50
|
-
"password": {"type": "string", "description": "PostgreSQL password"},
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
"required": ["db_type", "db_path"],
|
|
55
|
-
},
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
async def execute(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
|
|
59
|
-
"""Execute database creation"""
|
|
60
|
-
try:
|
|
61
|
-
db_type = arguments.get("db_type")
|
|
62
|
-
db_path = arguments.get("db_path")
|
|
63
|
-
overwrite = arguments.get("overwrite", False)
|
|
64
|
-
postgres_config = arguments.get("postgres_config", {})
|
|
65
|
-
|
|
66
|
-
if not db_type or not db_path:
|
|
67
|
-
return self._format_error("Both db_type and db_path are required")
|
|
68
|
-
|
|
69
|
-
logger.info(f"Creating {db_type} database: {db_path}")
|
|
70
|
-
|
|
71
|
-
if db_type == "sqlite":
|
|
72
|
-
result = self._create_sqlite(db_path, overwrite)
|
|
73
|
-
elif db_type == "postgresql":
|
|
74
|
-
result = self._create_postgresql(db_path, postgres_config, overwrite)
|
|
75
|
-
else:
|
|
76
|
-
return self._format_error(f"Invalid db_type: {db_type}")
|
|
77
|
-
|
|
78
|
-
if result.get('success'):
|
|
79
|
-
return self._format_success(result, f"Successfully created {db_type} database with {result.get('tables_created', 0)} tables")
|
|
80
|
-
else:
|
|
81
|
-
return self._format_error(result.get('message', 'Database creation failed'))
|
|
82
|
-
|
|
83
|
-
except Exception as e:
|
|
84
|
-
logger.error(f"Database creation error: {str(e)}", exc_info=True)
|
|
85
|
-
return self._format_error(f"Failed to create database: {str(e)}")
|
|
86
|
-
|
|
87
|
-
def _create_sqlite(self, db_path: str, overwrite: bool) -> Dict[str, Any]:
|
|
88
|
-
"""Create SQLite database"""
|
|
89
|
-
from pyarchinit_mini.database.database_creator import create_sqlite_database
|
|
90
|
-
try:
|
|
91
|
-
return create_sqlite_database(db_path, overwrite=overwrite)
|
|
92
|
-
except FileExistsError as e:
|
|
93
|
-
return {'success': False, 'message': f'Database already exists: {db_path}. Set overwrite=true to replace it.'}
|
|
94
|
-
except Exception as e:
|
|
95
|
-
return {'success': False, 'message': str(e)}
|
|
96
|
-
|
|
97
|
-
def _create_postgresql(self, db_name: str, config: Dict[str, Any], overwrite: bool) -> Dict[str, Any]:
|
|
98
|
-
"""Create PostgreSQL database"""
|
|
99
|
-
from pyarchinit_mini.database.database_creator import create_postgresql_database
|
|
100
|
-
try:
|
|
101
|
-
host = config.get('host', 'localhost')
|
|
102
|
-
port = config.get('port', 5432)
|
|
103
|
-
user = config.get('user')
|
|
104
|
-
password = config.get('password')
|
|
105
|
-
|
|
106
|
-
if not user:
|
|
107
|
-
return {'success': False, 'message': 'PostgreSQL user is required in postgres_config'}
|
|
108
|
-
|
|
109
|
-
return create_postgresql_database(
|
|
110
|
-
db_name=db_name,
|
|
111
|
-
host=host,
|
|
112
|
-
port=port,
|
|
113
|
-
user=user,
|
|
114
|
-
password=password,
|
|
115
|
-
overwrite=overwrite
|
|
116
|
-
)
|
|
117
|
-
except Exception as e:
|
|
118
|
-
return {'success': False, 'message': str(e)}
|