pyarchinit-mini 2.4.2__tar.gz → 2.4.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/CHANGELOG.md +69 -0
  2. {pyarchinit_mini-2.4.2/pyarchinit_mini.egg-info → pyarchinit_mini-2.4.4}/PKG-INFO +1 -1
  3. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/__init__.py +1 -1
  4. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/__init__.py +39 -0
  5. pyarchinit_mini-2.4.4/pyarchinit_mini/harris_swimlane/period_sync_service.py +111 -0
  6. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/row_provider.py +23 -13
  7. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/swimlane_state.py +57 -1
  8. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/harris_matrix.py +4 -1
  9. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/inventario_materiali.py +3 -0
  10. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/us.py +4 -1
  11. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/harris_creator_routes.py +2 -3
  12. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +19 -0
  13. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
  14. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyproject.toml +1 -1
  15. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/fixtures/_generate_harris_swimlane_synthetic.py +18 -17
  16. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_swimlane_routes_create_row.py +6 -3
  17. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_swimlane_routes_session_missing.py +26 -6
  18. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_period_sync.py +28 -12
  19. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_row_provider.py +30 -33
  20. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_state_load.py +6 -8
  21. pyarchinit_mini-2.4.2/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -90
  22. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/MANIFEST.in +0 -0
  23. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/README.md +0 -0
  24. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/babel.cfg +0 -0
  25. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/media_viewer_demo.db +0 -0
  26. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_mini 2.db +0 -0
  27. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_mini.db +0 -0
  28. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_mini_sample.db +0 -0
  29. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_tutorial.db +0 -0
  30. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
  31. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_tutorial_clean.db +0 -0
  32. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_tutorial_video.db +0 -0
  33. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/data/pyarchinit_v18_demo.db +0 -0
  34. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/logo/logo_pyarchinit-mini.png +0 -0
  35. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/__init__.py +0 -0
  36. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/auth.py +0 -0
  37. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/dependencies.py +0 -0
  38. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/graphml.py +0 -0
  39. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/inventario.py +0 -0
  40. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/schemas.py +0 -0
  41. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/site.py +0 -0
  42. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/sync.py +0 -0
  43. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/api/us.py +0 -0
  44. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/__init__.py +0 -0
  45. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/export_import_cli.py +0 -0
  46. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
  47. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/graphml_cli.py +0 -0
  48. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/harris_import.py +0 -0
  49. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/harris_template.py +0 -0
  50. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/migrate.py +0 -0
  51. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
  52. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
  53. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli/sync_cli.py +0 -0
  54. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli_interface/__init__.py +0 -0
  55. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
  56. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/config/__init__.py +0 -0
  57. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/config/connection_manager.py +0 -0
  58. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
  59. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/config/em_node_types.yaml +0 -0
  60. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/__init__.py +0 -0
  61. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/concurrency_manager.py +0 -0
  62. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/connection.py +0 -0
  63. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/database_creator.py +0 -0
  64. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/manager.py +0 -0
  65. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
  66. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
  67. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
  68. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
  69. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
  70. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
  71. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
  72. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
  73. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
  74. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/migrations/backup.py +0 -0
  75. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/postgres_installer.py +0 -0
  76. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/schemas.py +0 -0
  77. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/database/utils.py +0 -0
  78. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
  79. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
  80. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
  81. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
  82. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
  83. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
  84. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
  85. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
  86. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
  87. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
  88. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/icons.py +0 -0
  89. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
  90. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
  91. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
  92. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
  93. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
  94. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
  95. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
  96. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
  97. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
  98. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/dto/__init__.py +0 -0
  99. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/dto/inventario_dto.py +0 -0
  100. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/dto/site_dto.py +0 -0
  101. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/dto/us_dto.py +0 -0
  102. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/exceptions.py +0 -0
  103. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
  104. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/converter.py +0 -0
  105. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
  106. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
  107. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
  108. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
  109. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
  110. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
  111. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
  112. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
  113. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
  114. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_io/__init__.py +0 -0
  115. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_io/reader.py +0 -0
  116. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_io/writer.py +0 -0
  117. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
  118. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/__init__.py +0 -0
  119. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
  120. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
  121. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/exceptions.py +0 -0
  122. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/filesystem.py +0 -0
  123. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
  124. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/ingestor.py +0 -0
  125. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
  126. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/graphproj/projector.py +0 -0
  127. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
  128. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
  129. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
  130. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
  131. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
  132. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
  133. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
  134. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
  135. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/i18n/__init__.py +0 -0
  136. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
  137. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/i18n/locale_manager.py +0 -0
  138. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/__init__.py +0 -0
  139. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/__main__.py +0 -0
  140. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
  141. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/config.py +0 -0
  142. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
  143. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
  144. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/http_server.py +0 -0
  145. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
  146. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
  147. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
  148. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
  149. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
  150. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
  151. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
  152. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
  153. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
  154. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
  155. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
  156. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
  157. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
  158. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
  159. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/server.py +0 -0
  160. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
  161. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
  162. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
  163. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
  164. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
  165. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
  166. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
  167. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
  168. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
  169. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
  170. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
  171. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
  172. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
  173. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
  174. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
  175. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
  176. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
  177. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
  178. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
  179. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
  180. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
  181. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
  182. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
  183. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
  184. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
  185. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
  186. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
  187. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
  188. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
  189. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
  190. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
  191. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
  192. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
  193. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
  194. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/media_manager/__init__.py +0 -0
  195. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/media_manager/media_handler.py +0 -0
  196. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/__init__.py +0 -0
  197. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/ai_chat.py +0 -0
  198. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/app_setting.py +0 -0
  199. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/base.py +0 -0
  200. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/datazione.py +0 -0
  201. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/extended_matrix.py +0 -0
  202. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/media.py +0 -0
  203. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/pottery.py +0 -0
  204. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/site.py +0 -0
  205. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/thesaurus.py +0 -0
  206. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/tma.py +0 -0
  207. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/models/user.py +0 -0
  208. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/__init__.py +0 -0
  209. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
  210. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
  211. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
  212. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
  213. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
  214. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
  215. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
  216. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
  217. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/__init__.py +0 -0
  218. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/auto_translate.py +0 -0
  219. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
  220. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
  221. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
  222. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
  223. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
  224. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
  225. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
  226. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
  227. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
  228. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
  229. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
  230. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
  231. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/setup_auth.py +0 -0
  232. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
  233. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
  234. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
  235. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
  236. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
  237. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/scripts/verify_docs.py +0 -0
  238. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/__init__.py +0 -0
  239. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
  240. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/ai_chat_service.py +0 -0
  241. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/analytics_service.py +0 -0
  242. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/app_setting_service.py +0 -0
  243. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/backup_service.py +0 -0
  244. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/command_parser.py +0 -0
  245. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/datazione_service.py +0 -0
  246. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/export_import_service.py +0 -0
  247. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
  248. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/import_export_service.py +0 -0
  249. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/inventario_service.py +0 -0
  250. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/mcp_executor.py +0 -0
  251. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/media_service.py +0 -0
  252. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
  253. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/pottery_dto.py +0 -0
  254. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
  255. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/pottery_service.py +0 -0
  256. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
  257. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/search_service.py +0 -0
  258. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/site_service.py +0 -0
  259. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/thesaurus_service.py +0 -0
  260. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/tma_service.py +0 -0
  261. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/us_service.py +0 -0
  262. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/services/user_service.py +0 -0
  263. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/__init__.py +0 -0
  264. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
  265. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
  266. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
  267. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
  268. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
  269. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
  270. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
  271. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
  272. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
  273. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
  274. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
  275. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
  276. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/translations/messages.pot +0 -0
  277. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/__init__.py +0 -0
  278. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/auth.py +0 -0
  279. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/exceptions.py +0 -0
  280. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/relationship_validator.py +0 -0
  281. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
  282. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
  283. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/utils/validators.py +0 -0
  284. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/__init__.py +0 -0
  285. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/exceptions.py +0 -0
  286. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/i18n.py +0 -0
  287. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/loader.py +0 -0
  288. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/provider.py +0 -0
  289. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
  290. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/translations/vocab_it.json +0 -0
  291. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/vocab/types.py +0 -0
  292. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/app.py +0 -0
  293. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
  294. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
  295. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
  296. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
  297. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
  298. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
  299. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
  300. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
  301. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
  302. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
  303. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
  304. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
  305. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
  306. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
  307. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
  308. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
  309. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +0 -0
  310. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
  311. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
  312. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
  313. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
  314. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
  315. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
  316. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
  317. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
  318. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
  319. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
  320. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
  321. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
  322. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
  323. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
  324. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
  325. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
  326. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
  327. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
  328. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
  329. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
  330. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/base.html +0 -0
  331. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
  332. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
  333. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
  334. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
  335. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
  336. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
  337. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
  338. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
  339. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
  340. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
  341. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
  342. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
  343. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
  344. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
  345. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
  346. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
  347. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
  348. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
  349. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
  350. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
  351. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
  352. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
  353. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
  354. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
  355. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
  356. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
  357. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
  358. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
  359. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
  360. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
  361. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
  362. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
  363. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
  364. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
  365. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
  366. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
  367. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
  368. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
  369. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
  370. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
  371. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
  372. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
  373. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
  374. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
  375. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
  376. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
  377. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
  378. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
  379. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
  380. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
  381. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  382. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
  383. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
  384. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
  385. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
  386. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  387. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/SOURCES.txt +0 -0
  388. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
  389. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
  390. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
  391. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/requires.txt +0 -0
  392. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/pyarchinit_mini.egg-info/top_level.txt +0 -0
  393. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/requirements.txt +0 -0
  394. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/setup.cfg +0 -0
  395. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/setup.py +0 -0
  396. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/__init__.py +0 -0
  397. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/conftest.py +0 -0
  398. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/e2e/__init__.py +0 -0
  399. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/e2e/test_web_vocab_full_flow.py +0 -0
  400. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/fixtures/_generate_baseline_graphml.py +0 -0
  401. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/fixtures/_generate_synthetic_db.py +0 -0
  402. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/fixtures/build_legacy_with_pottery.py +0 -0
  403. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/__init__.py +0 -0
  404. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_admin_ai_settings_routes.py +0 -0
  405. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_admin_backup_routes.py +0 -0
  406. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_auto_regen_on_save.py +0 -0
  407. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_full_sync_flow.py +0 -0
  408. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_graph_import_flow.py +0 -0
  409. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_graph_routes.py +0 -0
  410. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
  411. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
  412. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
  413. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
  414. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_migrate_vocab_cli.py +0 -0
  415. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_paradata_routes_authors.py +0 -0
  416. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_paradata_routes_other_types.py +0 -0
  417. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_paradata_ui.py +0 -0
  418. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_pottery_completion.py +0 -0
  419. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
  420. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
  421. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_pottery_routes.py +0 -0
  422. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_spec2_coverage_gaps.py +0 -0
  423. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_vocab_routes.py +0 -0
  424. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_yed_export_route.py +0 -0
  425. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/integration/test_yed_writer_parity.py +0 -0
  426. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/__init__.py +0 -0
  427. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_app_setting_model.py +0 -0
  428. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_app_setting_service.py +0 -0
  429. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_auto_regen.py +0 -0
  430. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_backup_service.py +0 -0
  431. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_bundle.py +0 -0
  432. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_concurrency_columns.py +0 -0
  433. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_concurrency_manager.py +0 -0
  434. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_connectivity_monitor.py +0 -0
  435. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_database_utils.py +0 -0
  436. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_deprecated_writers_shim.py +0 -0
  437. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_em_palette_vocab_backed.py +0 -0
  438. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphml_io_reader.py +0 -0
  439. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphml_io_writer.py +0 -0
  440. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_edge_registry.py +0 -0
  441. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_exceptions.py +0 -0
  442. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_filesystem.py +0 -0
  443. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
  444. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
  445. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_graphproj_projector.py +0 -0
  446. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
  447. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
  448. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_harris_swimlane_state_save.py +0 -0
  449. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_ingest_plan.py +0 -0
  450. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_inventario_schema.py +0 -0
  451. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_migrations_backup.py +0 -0
  452. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_migrations_idempotent.py +0 -0
  453. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_optimistic_locking.py +0 -0
  454. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_paradata_store_authors.py +0 -0
  455. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_paradata_store_basic.py +0 -0
  456. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_paradata_store_other_types.py +0 -0
  457. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_pottery_dto.py +0 -0
  458. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_pottery_model.py +0 -0
  459. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_pottery_service.py +0 -0
  460. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
  461. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_site_service.py +0 -0
  462. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_api.py +0 -0
  463. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_cli.py +0 -0
  464. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_orchestrator.py +0 -0
  465. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_queue.py +0 -0
  466. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_sync_state_machine.py +0 -0
  467. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
  468. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_us_schema.py +0 -0
  469. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_uuid_manager.py +0 -0
  470. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
  471. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_exceptions.py +0 -0
  472. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_i18n.py +0 -0
  473. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_loader.py +0 -0
  474. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_provider.py +0 -0
  475. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_vocab_types.py +0 -0
  476. {pyarchinit_mini-2.4.2 → pyarchinit_mini-2.4.4}/tests/unit/test_yed_writer.py +0 -0
@@ -1,3 +1,72 @@
1
+ ## [2.4.4] - 2026-05-18
2
+
3
+ ### Fixed (IT)
4
+ - Nodi US dell'editor swimlane ora hanno `data.color` (risolto via
5
+ `VocabProvider.get_visual_style().fill_color`). Stop ai warning Cytoscape
6
+ "no mapping for property background-color with data field color".
7
+ - Edge stratigrafici deduplicati: `_build_edges` ora ignora le coppie
8
+ doppie `(source, target, edge_name)` e tratta gli inversi `overlies` /
9
+ `is_after` come la stessa relazione (un solo arco invece di due).
10
+ - Editor lancia un layout `dagre` dopo `cy.add()` + `cy.fit()`, così gli US
11
+ si distribuiscono dentro le row e gli archi diventano visibili.
12
+
13
+ ### Added (IT)
14
+ - Modelli SQLAlchemy `US`, `InventarioMateriali`, `Periodizzazione` ora
15
+ definiscono la colonna `node_uuid = Column(String(36))`. Un DB nuovo
16
+ creato via `Base.metadata.create_all()` nasce con la colonna corretta.
17
+ - `DatabaseMigrations.migrate_all_tables()` chiama automaticamente le 3
18
+ migration di Spec 1 (`_2026_05_node_uuid_schema`, `_node_uuid_backfill`,
19
+ `_vocab_alignment`) idempotentemente. Conseguenza: i DB esistenti
20
+ (SQLite o PostgreSQL) vengono aggiornati al primo avvio del web —
21
+ nessun bisogno di lanciare manualmente `pyarchinit-mini-migrate-vocab`.
22
+
23
+ ### Fixed (EN)
24
+ - US nodes in the swimlane editor now carry `data.color`, resolved through
25
+ `VocabProvider.get_visual_style().fill_color`. Eliminates Cytoscape
26
+ warnings about missing color mapping.
27
+ - Stratigraphic edges deduplicated: `_build_edges` ignores duplicate
28
+ `(source, target, edge_name)` triples and treats `overlies` / `is_after`
29
+ inverse pairs as the same edge (one arrow, not two).
30
+ - Editor runs a `dagre` layout after `cy.add()` plus a `cy.fit()` so US
31
+ children spread inside their swimlane row and edges become visible.
32
+
33
+ ### Added (EN)
34
+ - SQLAlchemy models `US`, `InventarioMateriali`, `Periodizzazione` now
35
+ declare `node_uuid = Column(String(36))`. New DBs created via
36
+ `Base.metadata.create_all()` have the column from the start.
37
+ - `DatabaseMigrations.migrate_all_tables()` now invokes the 3 Spec 1
38
+ migrations (`node_uuid_schema`, `node_uuid_backfill`, `vocab_alignment`)
39
+ idempotently. Existing SQLite or PostgreSQL DBs get auto-upgraded on
40
+ the first web startup — no need to run `pyarchinit-mini-migrate-vocab`
41
+ by hand.
42
+
43
+ ## [2.4.3] - 2026-05-18
44
+
45
+ ### Fixed (IT)
46
+ - `RowProvider` e `PeriodSyncService` ora usano lo schema reale di pyarchinit
47
+ per `period_table` (`periodo` / `fase` / `datazione` / `sito`) invece dello
48
+ schema ipotetico Spec 3-bis (`period_name` / `phase_name` / `start_date` /
49
+ `end_date`). Risolve l'HTTP 500 "la colonna 'period_name' non esiste"
50
+ visto in produzione su PostgreSQL `pyarchinit_v2`.
51
+ - `period_table` viene ora filtrato per `sito` (con fallback a righe
52
+ cross-site se `sito` IS NULL/''). `start_date` / `end_date` numerici non
53
+ esistono in produzione: nella Row dataclass restano `None` e il sort è
54
+ alfabetico per `(periodo, fase)`. Le date numeriche passate da `+ New
55
+ Row` vengono serializzate nella colonna `datazione` come `start..end`.
56
+ - Fixture sintetica `sqlite_volterra_30us_with_periods.db` e i test
57
+ associati (row_provider, period_sync, state_load, integration routes)
58
+ rigenerati con lo schema reale.
59
+
60
+ ### Fixed (EN)
61
+ - `RowProvider` and `PeriodSyncService` now use pyarchinit's real
62
+ `period_table` schema (`periodo` / `fase` / `datazione` / `sito`).
63
+ Fixes the HTTP 500 "column 'period_name' does not exist" against the
64
+ production PostgreSQL DB.
65
+ - Numeric `start_date` / `end_date` are no longer expected as columns; the
66
+ Row dataclass leaves them `None`, rows are sorted alphabetically by
67
+ `(periodo, fase)`, and date inputs from the editor are serialized into
68
+ the existing `datazione` text column as `start..end`.
69
+
1
70
  ## [2.4.2] - 2026-05-18
2
71
 
3
72
  ### Fixed (IT)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.2
3
+ Version: 2.4.4
4
4
  Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
5
5
  Home-page: https://github.com/enzococca/pyarchinit-mini
6
6
  Author: PyArchInit Team
@@ -23,7 +23,7 @@ Features:
23
23
  - Scalable and modular architecture
24
24
  """
25
25
 
26
- __version__ = "2.4.2"
26
+ __version__ = "2.4.4"
27
27
  __author__ = "PyArchInit Team"
28
28
  __email__ = "enzo.ccc@gmail.com"
29
29
 
@@ -803,6 +803,14 @@ class DatabaseMigrations:
803
803
  except Exception as e:
804
804
  logger.warning(f"TMA thesaurus trigger failed: {e}")
805
805
 
806
+ # Spec 1 (node_uuid + vocab alignment) — auto-applied so fresh
807
+ # installs and upgraded existing DBs both get the swimlane editor
808
+ # working without a manual `pyarchinit-mini-migrate-vocab` step.
809
+ try:
810
+ total_migrations += self._migrate_spec1_node_uuid_and_vocab()
811
+ except Exception as e:
812
+ logger.warning(f"Spec 1 node_uuid/vocab migration failed: {e}")
813
+
806
814
  logger.info(f"All migrations completed. Total migrations applied: {total_migrations}")
807
815
  return total_migrations
808
816
 
@@ -810,6 +818,37 @@ class DatabaseMigrations:
810
818
  logger.error(f"Error during database migrations: {e}")
811
819
  raise
812
820
 
821
+ def _migrate_spec1_node_uuid_and_vocab(self) -> int:
822
+ """Apply Spec 1 migrations idempotently: node_uuid schema, backfill,
823
+ vocab alignment (USVA/USVB→USVs, USVC→USVn). Each underlying script
824
+ is a no-op when nothing needs changing, so this is safe to call on
825
+ every startup."""
826
+ import importlib
827
+
828
+ pkg = "pyarchinit_mini.database.migrations"
829
+ scripts = [
830
+ f"{pkg}._2026_05_node_uuid_schema",
831
+ f"{pkg}._2026_05_node_uuid_backfill",
832
+ f"{pkg}._2026_05_vocab_alignment",
833
+ ]
834
+ url = str(self.connection.engine.url)
835
+ applied = 0
836
+ for mod_path in scripts:
837
+ try:
838
+ mod = importlib.import_module(mod_path)
839
+ report = mod.run(url, dry_run=False)
840
+ status = getattr(report, "status", "ok")
841
+ if status == "ok":
842
+ rows = getattr(report, "rows_updated", None)
843
+ tables = getattr(report, "tables_changed", None)
844
+ mappings = getattr(report, "mappings", None)
845
+ if rows or tables or mappings:
846
+ applied += 1
847
+ logger.info(f"{mod_path}: {tables or rows or mappings}")
848
+ except Exception as e:
849
+ logger.warning(f"{mod_path} failed: {e}")
850
+ return applied
851
+
813
852
  def get_table_info(self, table_name: str) -> Dict[str, Any]:
814
853
  """Get information about a table structure"""
815
854
  try:
@@ -0,0 +1,111 @@
1
+ """PeriodSyncService — interactive row creation upserts period_table.
2
+
3
+ When user creates a new swimlane row in the editor, this service ensures
4
+ a corresponding ``period_table`` entry exists. Uses the real pyarchinit
5
+ schema: ``periodo`` / ``fase`` / ``datazione`` (NO numeric start/end columns).
6
+
7
+ Caller-supplied ``start_date`` / ``end_date`` (ints) are stringified into
8
+ ``datazione`` as ``"start..end"`` when both provided, single year otherwise.
9
+ On promote (``maybe_promote_fallback``), idempotency is on ``(periodo, fase)``.
10
+ """
11
+ from __future__ import annotations
12
+
13
+ from typing import Optional
14
+
15
+ from sqlalchemy import text
16
+ from sqlalchemy.orm import Session
17
+
18
+ from .compound_layout import derive_row_id
19
+ from .exceptions import PeriodSyncError
20
+ from .row_provider import Row, PERIOD_COLORS
21
+
22
+
23
+ def _format_datazione(start: Optional[int], end: Optional[int]) -> Optional[str]:
24
+ if start is None and end is None:
25
+ return None
26
+ if start is not None and end is not None:
27
+ return f"{start}..{end}"
28
+ return str(start if start is not None else end)
29
+
30
+
31
+ class PeriodSyncService:
32
+ def __init__(self, session: Session, site: Optional[str] = None) -> None:
33
+ self.session = session
34
+ self.site = site
35
+
36
+ def upsert_row(self, period_name: str, phase_name: Optional[str] = None,
37
+ start_date: Optional[int] = None,
38
+ end_date: Optional[int] = None) -> Row:
39
+ if not period_name or not period_name.strip():
40
+ raise PeriodSyncError("period_name is required",
41
+ period_name=period_name, phase_name=phase_name)
42
+ if start_date is not None and end_date is not None and start_date > end_date:
43
+ raise PeriodSyncError(
44
+ "start_date must be <= end_date",
45
+ period_name=period_name, phase_name=phase_name,
46
+ )
47
+
48
+ existing = self.session.execute(text(
49
+ "SELECT id_period FROM period_table "
50
+ "WHERE periodo = :p AND "
51
+ "(fase = :ph OR (fase IS NULL AND :ph IS NULL))"
52
+ ), {"p": period_name, "ph": phase_name}).fetchone()
53
+
54
+ if existing is None:
55
+ self.session.execute(text(
56
+ "INSERT INTO period_table (sito, periodo, fase, datazione) "
57
+ "VALUES (:s, :p, :ph, :dz)"
58
+ ), {
59
+ "s": self.site,
60
+ "p": period_name,
61
+ "ph": phase_name,
62
+ "dz": _format_datazione(start_date, end_date),
63
+ })
64
+ self.session.commit()
65
+
66
+ row_id = derive_row_id(period_name, phase_name)
67
+ return Row(
68
+ row_id=row_id,
69
+ period_name=period_name,
70
+ phase_name=phase_name,
71
+ start_date=start_date,
72
+ end_date=end_date,
73
+ color=PERIOD_COLORS[0],
74
+ source="period_table",
75
+ )
76
+
77
+ def maybe_promote_fallback(self, site: str) -> int:
78
+ """Bulk-promote distinct (periodo_iniziale, fase_iniziale) values into
79
+ ``period_table``. Idempotent on ``(periodo, fase)``. Returns count promoted."""
80
+ # Bind site at promotion time so INSERTs land on the right row.
81
+ prev_site = self.site
82
+ self.site = site
83
+ try:
84
+ existing = {
85
+ (r[0], r[1])
86
+ for r in self.session.execute(text(
87
+ "SELECT periodo, fase FROM period_table "
88
+ "WHERE sito = :s OR sito IS NULL OR sito = ''"
89
+ ), {"s": site}).fetchall()
90
+ }
91
+ candidates = self.session.execute(text(
92
+ "SELECT DISTINCT periodo_iniziale, fase_iniziale "
93
+ "FROM periodizzazione_table WHERE sito = :s "
94
+ "UNION "
95
+ "SELECT DISTINCT periodo_iniziale, fase_iniziale "
96
+ "FROM us_table WHERE sito = :s"
97
+ ), {"s": site}).fetchall()
98
+ count = 0
99
+ for period, phase in candidates:
100
+ if not period:
101
+ continue
102
+ if (period, phase) in existing:
103
+ continue
104
+ try:
105
+ self.upsert_row(period_name=period, phase_name=phase)
106
+ count += 1
107
+ except PeriodSyncError:
108
+ continue
109
+ return count
110
+ finally:
111
+ self.site = prev_site
@@ -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(text(
60
- "SELECT period_name, phase_name, start_date, end_date "
61
- "FROM period_table"
62
- )).fetchall()
63
- # Sort: by start_date DESC, NULL last; tiebreaker by period_name, phase_name
64
- def sort_key(r):
65
- start = r[2]
66
- return (0 if start is not None else 1,
67
- -start if start is not None else 0,
68
- r[0] or "", r[1] or "")
69
- sorted_result = sorted(result, key=sort_key)
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=r[2],
80
- end_date=r[3],
89
+ start_date=None,
90
+ end_date=None,
81
91
  color=PERIOD_COLORS[i % len(PERIOD_COLORS)],
82
92
  source="period_table",
83
93
  ))
@@ -52,6 +52,27 @@ class SwimlaneState:
52
52
  provider = RowProvider(session, site)
53
53
  rows = provider.list_rows()
54
54
 
55
+ # Resolve unit_type → fill_color via VocabProvider once per request so
56
+ # the editor's `'background-color': data(color)` style renders properly.
57
+ try:
58
+ from pyarchinit_mini.vocab.provider import VocabProvider
59
+ _vocab = VocabProvider.instance()
60
+ _color_cache: dict[str, str] = {}
61
+
62
+ def _color_for(ut: str) -> str:
63
+ if ut in _color_cache:
64
+ return _color_cache[ut]
65
+ try:
66
+ style = _vocab.get_visual_style(ut)
67
+ c = getattr(style, "fill_color", None) or "#CCCCCC"
68
+ except Exception:
69
+ c = "#CCCCCC"
70
+ _color_cache[ut] = c
71
+ return c
72
+ except Exception:
73
+ def _color_for(ut: str) -> str:
74
+ return "#CCCCCC"
75
+
55
76
  # Load US records for site
56
77
  us_rows = session.execute(text(
57
78
  "SELECT id_us, sito, area, us, unita_tipo, rapporti, node_uuid, "
@@ -89,6 +110,7 @@ class SwimlaneState:
89
110
  "label": f"{unita_tipo}{us_num}",
90
111
  "parent": parent_row_id,
91
112
  "unit_type": unita_tipo,
113
+ "color": _color_for(unita_tipo),
92
114
  "period": periodo,
93
115
  "phase": fase,
94
116
  "us": us_num,
@@ -124,15 +146,33 @@ class SwimlaneState:
124
146
 
125
147
  @staticmethod
126
148
  def _build_edges(us_rows, us_num_to_node_id: dict) -> list[CytoscapeElement]:
127
- """Parse rapporti for each US via EdgeRegistry (Spec 1)."""
149
+ """Parse rapporti for each US via EdgeRegistry, deduplicating canonical
150
+ triples ``(source, target, edge_name)``.
151
+
152
+ pyarchinit stores stratigraphic relationships from both sides
153
+ (``A copre B`` on row A AND ``B coperto da A`` on row B). Both tokens
154
+ resolve to the same canonical edge ``A overlies B`` — without
155
+ deduplication the editor renders the same arrow twice.
156
+
157
+ Symmetric edge types (``has_same_time``) are deduped on the
158
+ unordered pair so the bidirectional view doesn't show 2 lines.
159
+ """
128
160
  try:
129
161
  from pyarchinit_mini.graphproj.edge_registry import EdgeRegistry
130
162
  registry = EdgeRegistry()
131
163
  except Exception:
132
164
  return []
133
165
 
166
+ # Edges where direction is meaningless (twins).
167
+ SYMMETRIC = {"has_same_time"}
168
+ # Edges that are inverses of each other (A overlies B ≡ B is_after A
169
+ # in stratigraphic Harris semantics). When pyarchinit stores both
170
+ # sides on different US rows, the editor must show one arrow, not two.
171
+ INVERSE_PAIRS = {"overlies": "is_after", "is_after": "overlies"}
172
+
134
173
  edges: list[CytoscapeElement] = []
135
174
  edge_counter = 0
175
+ seen: set[tuple] = set()
136
176
 
137
177
  for r in us_rows:
138
178
  us_num = r[3]
@@ -157,6 +197,22 @@ class SwimlaneState:
157
197
  target_node_id = us_num_to_node_id.get(target_int)
158
198
  if target_node_id is None:
159
199
  continue
200
+
201
+ if edge_name in SYMMETRIC:
202
+ key = (edge_name, tuple(sorted((source_node_id, target_node_id))))
203
+ else:
204
+ key = (edge_name, source_node_id, target_node_id)
205
+ if key in seen:
206
+ continue
207
+ # Check the inverse pair (overlies vs is_after) under the same
208
+ # source/target pair — they represent the same edge.
209
+ inverse_name = INVERSE_PAIRS.get(edge_name)
210
+ if inverse_name is not None:
211
+ inverse_key = (inverse_name, target_node_id, source_node_id)
212
+ if inverse_key in seen:
213
+ continue
214
+ seen.add(key)
215
+
160
216
  edge_counter += 1
161
217
  edges.append(CytoscapeElement(data={
162
218
  "id": f"e{edge_counter}",
@@ -92,7 +92,10 @@ class Periodizzazione(BaseModel):
92
92
  # Confidence and notes
93
93
  affidabilita = Column(String(50)) # 'alta', 'media', 'bassa'
94
94
  note = Column(Text)
95
-
95
+
96
+ # Spec 1: stable node identity for s3dgraphy/EM graph round-trip
97
+ node_uuid = Column(String(36))
98
+
96
99
  # Relationships
97
100
  site_ref = relationship("Site", foreign_keys=[sito])
98
101
  initial_period = relationship("Period", foreign_keys=[period_id_initial])
@@ -97,6 +97,9 @@ class InventarioMateriali(BaseModel):
97
97
  photo_id = Column(Text)
98
98
  drawing_id = Column(Text)
99
99
 
100
+ # Spec 1: stable node identity for s3dgraphy/EM graph round-trip
101
+ node_uuid = Column(String(36))
102
+
100
103
  # Relationships
101
104
  site_ref = relationship("Site", foreign_keys=[sito],
102
105
  primaryjoin="InventarioMateriali.sito == Site.sito")
@@ -196,8 +196,11 @@ class US(BaseModel):
196
196
  rapporti2 = Column(Text)
197
197
  doc_usv = Column(Text)
198
198
 
199
+ # Spec 1: stable node identity for s3dgraphy/EM graph round-trip
200
+ node_uuid = Column(String(36))
201
+
199
202
  # Relationships
200
- site_ref = relationship("Site", foreign_keys=[sito],
203
+ site_ref = relationship("Site", foreign_keys=[sito],
201
204
  primaryjoin="US.sito == Site.sito")
202
205
 
203
206
  def __repr__(self):
@@ -758,8 +758,7 @@ def api_save_state(site: str):
758
758
 
759
759
  @harris_creator_bp.post("/api/swimlanes/<site>")
760
760
  def api_create_row(site: str):
761
- """Create a new swimlane row (upsert period_table). site param is for
762
- URL consistency; period_table is currently cross-site."""
761
+ """Create a new swimlane row (upsert period_table for this site)."""
763
762
  payload = request.get_json(silent=True) or {}
764
763
  period_name = payload.get("period_name", "")
765
764
  phase_name = payload.get("phase_name") or None
@@ -767,7 +766,7 @@ def api_create_row(site: str):
767
766
  end_date = payload.get("end_date")
768
767
  try:
769
768
  session = _get_session()
770
- svc = PeriodSyncService(session)
769
+ svc = PeriodSyncService(session, site=site)
771
770
  row = svc.upsert_row(
772
771
  period_name=period_name, phase_name=phase_name,
773
772
  start_date=start_date, end_date=end_date,
@@ -519,6 +519,25 @@ function renderSwimlaneState(state) {
519
519
  });
520
520
  });
521
521
 
522
+ // Run dagre layout inside each swimlane row so US nodes spread out
523
+ // horizontally and stratigraphic edges become visible. Without a layout
524
+ // pass, all US children of a row get stacked at the row's centroid and
525
+ // the edges collapse into invisible zero-length segments.
526
+ try {
527
+ cy.layout({
528
+ name: 'dagre',
529
+ rankDir: 'LR',
530
+ nodeSep: 50,
531
+ rankSep: 80,
532
+ fit: false,
533
+ }).run();
534
+ } catch (e) {
535
+ console.warn('dagre layout failed, falling back to grid:', e);
536
+ cy.layout({name: 'grid'}).run();
537
+ }
538
+ // Fit viewport so the user actually sees the rows + nodes + edges.
539
+ cy.fit(undefined, 30);
540
+
522
541
  // Save state references for later use
523
542
  window._currentSite = state.site;
524
543
  window._pendingChanges = state.pending_changes || {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.2
3
+ Version: 2.4.4
4
4
  Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
5
5
  Home-page: https://github.com/enzococca/pyarchinit-mini
6
6
  Author: PyArchInit Team
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyarchinit-mini"
7
- version = "2.4.2"
7
+ version = "2.4.4"
8
8
  description = "Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer"
9
9
  readme = "README.md"
10
10
  license = {text = "GPL-2.0"}
@@ -18,10 +18,11 @@ c = conn.cursor()
18
18
  c.executescript("""
19
19
  CREATE TABLE period_table (
20
20
  id_period INTEGER PRIMARY KEY AUTOINCREMENT,
21
- period_name TEXT NOT NULL,
22
- phase_name TEXT,
23
- start_date INTEGER, end_date INTEGER,
24
- description TEXT, chronology TEXT
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 (period, phase) rows
43
+ # 5 (periodo, fase) rows on the production schema
43
44
  periods = [
44
- ("Roman", "a", -27, 100),
45
- ("Roman", "b", 100, 300),
46
- ("Late Antiquity", "a", 300, 600),
47
- ("Medieval", "a", 600, 1200),
48
- ("Medieval", "b", 1200, 1500),
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, sd, ed in periods:
51
+ for p, ph, dz in periods:
51
52
  c.execute(
52
- "INSERT INTO period_table (period_name, phase_name, start_date, end_date) VALUES (?,?,?,?)",
53
- (p, ph, sd, ed),
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, _, _ = periods[i % 5]
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": "row_roman_b", "period_name": "Roman", "phase_name": "b"},
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
- period_name TEXT NOT NULL, phase_name TEXT,
16
- start_date INTEGER, end_date INTEGER,
17
- description TEXT, chronology TEXT
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
- db_url = f"sqlite:///{db_path}"
20
- # Pre-create the schema so lazy session has tables to query.
21
- Base.metadata.create_all(create_engine(db_url))
22
- monkeypatch.setenv("DATABASE_URL", db_url)
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)