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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/CHANGELOG.md +54 -0
  2. {pyarchinit_mini-2.4.0/pyarchinit_mini.egg-info → pyarchinit_mini-2.4.2}/PKG-INFO +1 -1
  3. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/__init__.py +1 -1
  4. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/harris_creator_routes.py +31 -11
  5. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/paradata_ui_routes.py +22 -1
  6. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/base.html +2 -0
  7. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +70 -12
  8. pyarchinit_mini-2.4.2/pyarchinit_mini/web_interface/templates/paradata/index.html +53 -0
  9. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
  10. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini.egg-info/SOURCES.txt +1 -0
  11. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyproject.toml +1 -1
  12. pyarchinit_mini-2.4.2/tests/integration/test_harris_swimlane_routes_session_missing.py +37 -0
  13. pyarchinit_mini-2.4.0/tests/integration/test_harris_swimlane_routes_session_missing.py +0 -23
  14. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/MANIFEST.in +0 -0
  15. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/README.md +0 -0
  16. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/babel.cfg +0 -0
  17. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/data/media_viewer_demo.db +0 -0
  18. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/data/pyarchinit_mini 2.db +0 -0
  19. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/data/pyarchinit_mini.db +0 -0
  20. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/data/pyarchinit_mini_sample.db +0 -0
  21. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/data/pyarchinit_tutorial.db +0 -0
  22. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
  23. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/data/pyarchinit_tutorial_clean.db +0 -0
  24. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/data/pyarchinit_tutorial_video.db +0 -0
  25. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/data/pyarchinit_v18_demo.db +0 -0
  26. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/logo/logo_pyarchinit-mini.png +0 -0
  27. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/api/__init__.py +0 -0
  28. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/api/auth.py +0 -0
  29. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/api/dependencies.py +0 -0
  30. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/api/graphml.py +0 -0
  31. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/api/inventario.py +0 -0
  32. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/api/schemas.py +0 -0
  33. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/api/site.py +0 -0
  34. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/api/sync.py +0 -0
  35. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/api/us.py +0 -0
  36. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/__init__.py +0 -0
  37. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/export_import_cli.py +0 -0
  38. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
  39. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/graphml_cli.py +0 -0
  40. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/harris_import.py +0 -0
  41. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/harris_template.py +0 -0
  42. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/migrate.py +0 -0
  43. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
  44. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
  45. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli/sync_cli.py +0 -0
  46. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli_interface/__init__.py +0 -0
  47. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
  48. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/config/__init__.py +0 -0
  49. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/config/connection_manager.py +0 -0
  50. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
  51. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/config/em_node_types.yaml +0 -0
  52. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/__init__.py +0 -0
  53. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/concurrency_manager.py +0 -0
  54. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/connection.py +0 -0
  55. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/database_creator.py +0 -0
  56. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/manager.py +0 -0
  57. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
  58. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
  59. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
  60. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
  61. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
  62. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
  63. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
  64. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
  65. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
  66. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migrations/__init__.py +0 -0
  67. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/migrations/backup.py +0 -0
  68. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/postgres_installer.py +0 -0
  69. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/schemas.py +0 -0
  70. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/database/utils.py +0 -0
  71. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
  72. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
  73. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
  74. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
  75. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
  76. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
  77. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
  78. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
  79. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
  80. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
  81. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/icons.py +0 -0
  82. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
  83. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
  84. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
  85. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
  86. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
  87. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
  88. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
  89. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
  90. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
  91. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/dto/__init__.py +0 -0
  92. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/dto/inventario_dto.py +0 -0
  93. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/dto/site_dto.py +0 -0
  94. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/dto/us_dto.py +0 -0
  95. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/exceptions.py +0 -0
  96. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
  97. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/converter.py +0 -0
  98. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
  99. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
  100. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
  101. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
  102. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
  103. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
  104. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
  105. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
  106. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
  107. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_io/__init__.py +0 -0
  108. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_io/reader.py +0 -0
  109. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_io/writer.py +0 -0
  110. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
  111. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphproj/__init__.py +0 -0
  112. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
  113. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
  114. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphproj/exceptions.py +0 -0
  115. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphproj/filesystem.py +0 -0
  116. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
  117. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphproj/ingestor.py +0 -0
  118. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
  119. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/graphproj/projector.py +0 -0
  120. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
  121. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
  122. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
  123. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
  124. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
  125. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
  126. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
  127. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
  128. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -0
  129. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_swimlane/row_provider.py +0 -0
  130. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/harris_swimlane/swimlane_state.py +0 -0
  131. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/i18n/__init__.py +0 -0
  132. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
  133. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/i18n/locale_manager.py +0 -0
  134. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/__init__.py +0 -0
  135. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/__main__.py +0 -0
  136. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
  137. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/config.py +0 -0
  138. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
  139. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
  140. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/http_server.py +0 -0
  141. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
  142. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
  143. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
  144. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
  145. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
  146. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
  147. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
  148. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
  149. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
  150. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
  151. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
  152. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
  153. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
  154. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
  155. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/server.py +0 -0
  156. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
  157. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
  158. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
  159. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
  160. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
  161. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
  162. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
  163. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
  164. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
  165. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
  166. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
  167. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
  168. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
  169. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
  170. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
  171. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
  172. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
  173. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
  174. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
  175. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
  176. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
  177. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
  178. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
  179. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
  180. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
  181. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
  182. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
  183. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
  184. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
  185. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
  186. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
  187. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
  188. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
  189. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
  190. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/media_manager/__init__.py +0 -0
  191. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/media_manager/media_handler.py +0 -0
  192. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/__init__.py +0 -0
  193. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/ai_chat.py +0 -0
  194. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/app_setting.py +0 -0
  195. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/base.py +0 -0
  196. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/datazione.py +0 -0
  197. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/extended_matrix.py +0 -0
  198. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/harris_matrix.py +0 -0
  199. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/inventario_materiali.py +0 -0
  200. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/media.py +0 -0
  201. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/pottery.py +0 -0
  202. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/site.py +0 -0
  203. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/thesaurus.py +0 -0
  204. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/tma.py +0 -0
  205. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/us.py +0 -0
  206. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/models/user.py +0 -0
  207. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/pdf_export/__init__.py +0 -0
  208. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
  209. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
  210. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
  211. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
  212. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
  213. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
  214. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
  215. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
  216. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/__init__.py +0 -0
  217. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/auto_translate.py +0 -0
  218. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
  219. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
  220. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
  221. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
  222. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
  223. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
  224. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
  225. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
  226. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
  227. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
  228. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
  229. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
  230. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/setup_auth.py +0 -0
  231. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
  232. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
  233. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
  234. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
  235. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
  236. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/scripts/verify_docs.py +0 -0
  237. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/__init__.py +0 -0
  238. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
  239. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/ai_chat_service.py +0 -0
  240. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/analytics_service.py +0 -0
  241. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/app_setting_service.py +0 -0
  242. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/backup_service.py +0 -0
  243. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/command_parser.py +0 -0
  244. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/datazione_service.py +0 -0
  245. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/export_import_service.py +0 -0
  246. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
  247. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/import_export_service.py +0 -0
  248. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/inventario_service.py +0 -0
  249. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/mcp_executor.py +0 -0
  250. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/media_service.py +0 -0
  251. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
  252. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/pottery_dto.py +0 -0
  253. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
  254. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/pottery_service.py +0 -0
  255. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
  256. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/search_service.py +0 -0
  257. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/site_service.py +0 -0
  258. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/thesaurus_service.py +0 -0
  259. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/tma_service.py +0 -0
  260. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/us_service.py +0 -0
  261. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/services/user_service.py +0 -0
  262. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/stratigraph/__init__.py +0 -0
  263. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
  264. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
  265. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
  266. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
  267. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
  268. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
  269. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
  270. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
  271. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
  272. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
  273. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
  274. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
  275. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/translations/messages.pot +0 -0
  276. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/utils/__init__.py +0 -0
  277. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/utils/auth.py +0 -0
  278. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/utils/exceptions.py +0 -0
  279. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/utils/relationship_validator.py +0 -0
  280. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
  281. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
  282. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/utils/validators.py +0 -0
  283. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/vocab/__init__.py +0 -0
  284. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/vocab/exceptions.py +0 -0
  285. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/vocab/i18n.py +0 -0
  286. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/vocab/loader.py +0 -0
  287. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/vocab/provider.py +0 -0
  288. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
  289. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/vocab/translations/vocab_it.json +0 -0
  290. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/vocab/types.py +0 -0
  291. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/app.py +0 -0
  292. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
  293. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
  294. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
  295. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
  296. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
  297. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
  298. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
  299. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
  300. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
  301. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
  302. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
  303. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
  304. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
  305. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
  306. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
  307. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +0 -0
  308. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
  309. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
  310. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
  311. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
  312. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
  313. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
  314. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
  315. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
  316. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
  317. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
  318. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
  319. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
  320. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
  321. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
  322. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
  323. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
  324. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
  325. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
  326. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
  327. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
  328. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
  329. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
  330. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
  331. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
  332. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
  333. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
  334. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
  335. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
  336. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
  337. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
  338. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
  339. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
  340. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
  341. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
  342. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
  343. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
  344. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
  345. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
  346. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
  347. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
  348. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
  349. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
  350. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
  351. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
  352. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
  353. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
  354. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
  355. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
  356. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
  357. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
  358. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
  359. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
  360. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
  361. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
  362. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
  363. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
  364. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
  365. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
  366. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
  367. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
  368. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
  369. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
  370. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
  371. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
  372. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
  373. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
  374. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
  375. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
  376. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
  377. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  378. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
  379. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
  380. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
  381. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
  382. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  383. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
  384. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
  385. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
  386. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini.egg-info/requires.txt +0 -0
  387. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/pyarchinit_mini.egg-info/top_level.txt +0 -0
  388. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/requirements.txt +0 -0
  389. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/setup.cfg +0 -0
  390. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/setup.py +0 -0
  391. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/__init__.py +0 -0
  392. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/conftest.py +0 -0
  393. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/e2e/__init__.py +0 -0
  394. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/e2e/test_web_vocab_full_flow.py +0 -0
  395. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/fixtures/_generate_baseline_graphml.py +0 -0
  396. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/fixtures/_generate_harris_swimlane_synthetic.py +0 -0
  397. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/fixtures/_generate_synthetic_db.py +0 -0
  398. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/fixtures/build_legacy_with_pottery.py +0 -0
  399. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/__init__.py +0 -0
  400. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_admin_ai_settings_routes.py +0 -0
  401. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_admin_backup_routes.py +0 -0
  402. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_auto_regen_on_save.py +0 -0
  403. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_full_sync_flow.py +0 -0
  404. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_graph_import_flow.py +0 -0
  405. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_graph_routes.py +0 -0
  406. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
  407. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
  408. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_harris_swimlane_routes_create_row.py +0 -0
  409. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
  410. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
  411. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_migrate_vocab_cli.py +0 -0
  412. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_paradata_routes_authors.py +0 -0
  413. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_paradata_routes_other_types.py +0 -0
  414. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_paradata_ui.py +0 -0
  415. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_pottery_completion.py +0 -0
  416. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
  417. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
  418. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_pottery_routes.py +0 -0
  419. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_spec2_coverage_gaps.py +0 -0
  420. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_vocab_routes.py +0 -0
  421. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_yed_export_route.py +0 -0
  422. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/integration/test_yed_writer_parity.py +0 -0
  423. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/__init__.py +0 -0
  424. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_app_setting_model.py +0 -0
  425. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_app_setting_service.py +0 -0
  426. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_auto_regen.py +0 -0
  427. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_backup_service.py +0 -0
  428. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_bundle.py +0 -0
  429. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_concurrency_columns.py +0 -0
  430. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_concurrency_manager.py +0 -0
  431. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_connectivity_monitor.py +0 -0
  432. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_database_utils.py +0 -0
  433. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_deprecated_writers_shim.py +0 -0
  434. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_em_palette_vocab_backed.py +0 -0
  435. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_graphml_io_reader.py +0 -0
  436. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_graphml_io_writer.py +0 -0
  437. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_graphproj_edge_registry.py +0 -0
  438. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_graphproj_exceptions.py +0 -0
  439. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_graphproj_filesystem.py +0 -0
  440. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
  441. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
  442. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_graphproj_projector.py +0 -0
  443. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
  444. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
  445. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_harris_swimlane_period_sync.py +0 -0
  446. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_harris_swimlane_row_provider.py +0 -0
  447. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_harris_swimlane_state_load.py +0 -0
  448. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_harris_swimlane_state_save.py +0 -0
  449. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_ingest_plan.py +0 -0
  450. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_inventario_schema.py +0 -0
  451. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_migrations_backup.py +0 -0
  452. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_migrations_idempotent.py +0 -0
  453. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_optimistic_locking.py +0 -0
  454. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_paradata_store_authors.py +0 -0
  455. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_paradata_store_basic.py +0 -0
  456. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_paradata_store_other_types.py +0 -0
  457. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_pottery_dto.py +0 -0
  458. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_pottery_model.py +0 -0
  459. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_pottery_service.py +0 -0
  460. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
  461. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_site_service.py +0 -0
  462. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_sync_api.py +0 -0
  463. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_sync_cli.py +0 -0
  464. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_sync_orchestrator.py +0 -0
  465. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_sync_queue.py +0 -0
  466. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_sync_state_machine.py +0 -0
  467. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
  468. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_us_schema.py +0 -0
  469. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_uuid_manager.py +0 -0
  470. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
  471. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_vocab_exceptions.py +0 -0
  472. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_vocab_i18n.py +0 -0
  473. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_vocab_loader.py +0 -0
  474. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_vocab_provider.py +0 -0
  475. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_vocab_types.py +0 -0
  476. {pyarchinit_mini-2.4.0 → pyarchinit_mini-2.4.2}/tests/unit/test_yed_writer.py +0 -0
@@ -1,3 +1,57 @@
1
+ ## [2.4.2] - 2026-05-18
2
+
3
+ ### Fixed (IT)
4
+ - `_get_session()` (Spec 3-bis endpoints) ora acquisisce la sessione DB in modo
5
+ lazy via `get_db_session()` se nessun before_request hook ha pre-impostato
6
+ `g.db_session`. Risolve l'errore HTTP 500 "g.db_session not set" che
7
+ bloccava load / save / + Row / Export yEd su Adarte in 2.4.0-2.4.1.
8
+ - Aggiunto `teardown_request` sul blueprint che rilascia la sessione lazy
9
+ alla fine della request.
10
+
11
+ ### Fixed (EN)
12
+ - `_get_session()` now lazily opens a DB session via `get_db_session()` when no
13
+ before_request hook has bound one to `g.db_session`. Fixes the HTTP 500
14
+ "g.db_session not set" that broke load / save / + Row / Export on production
15
+ in 2.4.0-2.4.1.
16
+ - Added `teardown_request` hook releasing the lazy session at request end.
17
+
18
+ ## [2.4.1] - 2026-05-18
19
+
20
+ ### Fixed (IT)
21
+ - Editor Harris Matrix: `window._currentSite` ora inizializzato server-side
22
+ dall'hidden input `#site-name`, quindi i pulsanti Save / + New Row /
23
+ Export yEd GraphML funzionano anche se `/api/load/<site>` fallisce (caso
24
+ tipico: migration `node_uuid` non ancora applicata sul DB di produzione).
25
+ - Editor Harris Matrix: se `/api/load/<site>` ritorna errore, il corpo
26
+ della risposta viene mostrato in un alert con suggerimento di lanciare
27
+ `pyarchinit-mini-migrate-vocab --apply` (prima era silenzioso).
28
+ - Editor Harris Matrix: messaggio "No site loaded" sostituito con
29
+ istruzione esplicita di tornare all'indice del Creator.
30
+
31
+ ### Added (IT)
32
+ - Nuova pagina `/paradata/` (sezione Tools): picker sito + bottoni rapidi
33
+ ai 5 tipi di paradata (authors, licenses, embargoes, documents, epochs).
34
+ Link aggiunto sia al dropdown navbar che alla sidebar laterale.
35
+ - Modal di aiuto nell'editor Harris (icona "?") che spiega la differenza
36
+ tra GraphML (s3dgraphy clean, auto-regen, per Datacenter/3D), Export
37
+ yEd GraphML (TableNode swimlane, on-demand, per yEd Desktop), DOT
38
+ (Graphviz), PNG (snapshot raster).
39
+ - Tooltip migliorati su tutti i pulsanti di export.
40
+
41
+ ### Fixed (EN)
42
+ - Harris Matrix Editor: `window._currentSite` is now initialised server-side
43
+ from hidden input `#site-name`, so Save / + New Row / Export buttons work
44
+ even when `/api/load/<site>` fails (typical when the `node_uuid` migration
45
+ is still pending on production).
46
+ - Harris Matrix Editor: failed swimlane loads now surface the backend error
47
+ body in an alert with a hint to run `pyarchinit-mini-migrate-vocab`.
48
+
49
+ ### Added (EN)
50
+ - New `/paradata/` landing page (Tools section): site picker + quick links
51
+ to the 5 paradata kinds. Sidebar entries added.
52
+ - Help modal explaining the four export formats (GraphML, yEd GraphML,
53
+ DOT, PNG) accessible via a question-mark icon on the editor toolbar.
54
+
1
55
  ## [2.4.0] - 2026-05-18
2
56
 
3
57
  ### Added (IT)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
5
5
  Home-page: https://github.com/enzococca/pyarchinit-mini
6
6
  Author: PyArchInit Team
@@ -23,7 +23,7 @@ Features:
23
23
  - Scalable and modular architecture
24
24
  """
25
25
 
26
- __version__ = "2.4.0"
26
+ __version__ = "2.4.2"
27
27
  __author__ = "PyArchInit Team"
28
28
  __email__ = "enzo.ccc@gmail.com"
29
29
 
@@ -638,22 +638,42 @@ from pyarchinit_mini.harris_swimlane.exceptions import PeriodSyncError
638
638
 
639
639
 
640
640
  def _get_session():
641
- """Get the request-bound SQLAlchemy session.
642
-
643
- Requires the Flask app to set g.db_session in a before_request hook
644
- (the production app does this; tests do too). Raises if not set —
645
- fails loud rather than silently returning a context-manager generator
646
- that downstream callers will treat as a Session.
641
+ """Get a request-scoped SQLAlchemy session for Spec 3-bis endpoints.
642
+
643
+ Reuses ``g.db_session`` if a before_request hook has set it. Otherwise
644
+ lazily opens one through the same path as ``get_db_session()`` and
645
+ binds it to ``g`` (the teardown_request hook below releases it). This
646
+ keeps the API contract simple endpoints just call ``_get_session()``
647
+ and get a real ``Session`` back, whether or not the host app wires a
648
+ before_request hook (the production app in 2.4.x does not).
647
649
  """
648
650
  db = getattr(g, "db_session", None)
649
- if db is None:
650
- raise RuntimeError(
651
- "g.db_session not set. The Flask app must set it in a "
652
- "before_request hook before invoking Spec 3-bis endpoints."
653
- )
651
+ if db is not None:
652
+ return db
653
+ cm = get_db_session()
654
+ db = cm.__enter__()
655
+ g.db_session = db
656
+ g._db_session_cm = cm
654
657
  return db
655
658
 
656
659
 
660
+ @harris_creator_bp.teardown_request
661
+ def _release_lazy_db_session(exc): # noqa: ARG001 — exc is part of the signature
662
+ """Close any session that ``_get_session()`` opened lazily for this request."""
663
+ cm = getattr(g, "_db_session_cm", None)
664
+ if cm is None:
665
+ return
666
+ try:
667
+ cm.__exit__(type(exc) if exc else None, exc, getattr(exc, "__traceback__", None))
668
+ except Exception:
669
+ pass
670
+ finally:
671
+ try:
672
+ delattr(g, "_db_session_cm")
673
+ except AttributeError:
674
+ pass
675
+
676
+
657
677
  @harris_creator_bp.get("/api/swimlanes/<site>")
658
678
  def api_get_swimlanes(site: str):
659
679
  """List swimlane rows for the site."""
@@ -3,7 +3,9 @@
3
3
  Backed by ParadataStore (JSON sidecar). REST counterparts live in
4
4
  paradata_routes.py.
5
5
  """
6
- from flask import Blueprint, render_template, request, redirect, url_for, abort
6
+ import os
7
+
8
+ from flask import Blueprint, current_app, render_template, request, redirect, url_for, abort
7
9
 
8
10
  from pyarchinit_mini.graphproj.paradata_store import ParadataStore
9
11
  from pyarchinit_mini.graphproj.exceptions import ParadataConflict, ParadataNotFound
@@ -47,6 +49,25 @@ def _kind_or_404(kind):
47
49
  return KIND_DEF[kind]
48
50
 
49
51
 
52
+ @paradata_ui_bp.get("/", endpoint="index")
53
+ def index():
54
+ """Paradata landing: list available sites + the 5 kinds."""
55
+ from pyarchinit_mini.models.site import Site
56
+ if hasattr(current_app, "db_manager"):
57
+ session_ctx = current_app.db_manager.connection.get_session()
58
+ else:
59
+ from pyarchinit_mini.database.connection import DatabaseConnection
60
+ db_url = os.getenv("DATABASE_URL", "sqlite:///pyarchinit_mini.db")
61
+ session_ctx = DatabaseConnection.from_url(db_url).get_session()
62
+ with session_ctx as db:
63
+ sites = [s.sito for s in db.query(Site).order_by(Site.sito).all()]
64
+ return render_template(
65
+ "paradata/index.html",
66
+ sites=sites,
67
+ kinds=list(KIND_DEF.keys()),
68
+ )
69
+
70
+
50
71
  @paradata_ui_bp.get("/<site>/<kind>", endpoint="list")
51
72
  def list_(site, kind):
52
73
  cfg = _kind_or_404(kind)
@@ -84,6 +84,7 @@
84
84
  <li><hr class="dropdown-divider"></li>
85
85
  <li><h6 class="dropdown-header">{{ _('Tools') }}</h6></li>
86
86
  <li><a class="dropdown-item" href="{{ url_for('harris_creator.index') }}"><i class="fas fa-project-diagram"></i> {{ _('Harris Matrix Creator') }}</a></li>
87
+ <li><a class="dropdown-item" href="{{ url_for('paradata_ui.index') }}"><i class="fas fa-tags"></i> {{ _('Paradata') }}</a></li>
87
88
  <li><a class="dropdown-item" href="{{ url_for('three_d_builder.blender_viewer') }}"><i class="fas fa-cube"></i> {{ _('Blender 3D') }}</a></li>
88
89
  <li><a class="dropdown-item" href="{{ url_for('upload_media') }}"><i class="fas fa-images"></i> {{ _('Media') }}</a></li>
89
90
  <li><a class="dropdown-item" href="{{ url_for('excel_import.index') }}"><i class="fas fa-file-excel"></i> {{ _('Excel Import') }}</a></li>
@@ -177,6 +178,7 @@
177
178
  <li><a href="{{ url_for('upload_media') }}"><i class="fas fa-upload"></i> {{ _('Upload Media') }}</a></li>
178
179
  <li><a href="{{ url_for('media_list') }}"><i class="fas fa-photo-video"></i> {{ _('Media Files') }}</a></li>
179
180
  <li><a href="{{ url_for('harris_creator.index') }}"><i class="fas fa-project-diagram"></i> {{ _('Harris Matrix Creator') }}</a></li>
181
+ <li><a href="{{ url_for('paradata_ui.index') }}"><i class="fas fa-tags"></i> {{ _('Paradata') }}</a></li>
180
182
  <li><a href="{{ url_for('export_harris_graphml') }}"><i class="fas fa-sitemap"></i> {{ _('Harris Export') }}</a></li>
181
183
  </ul>
182
184
  </div>
@@ -158,19 +158,24 @@
158
158
  <button class="btn btn-success btn-sm" id="save-btn" title="Save to database">
159
159
  <i class="fas fa-save"></i> Save
160
160
  </button>
161
- <button class="btn btn-info btn-sm" id="export-graphml-btn" title="Export to GraphML">
161
+ <button class="btn btn-info btn-sm" id="export-graphml-btn"
162
+ title="EM-canonical GraphML (s3dgraphy schema, for Datacenter / 3D pipeline)">
162
163
  <i class="fas fa-download"></i> GraphML
163
164
  </button>
164
- <button class="btn btn-secondary btn-sm" id="export-dot-btn" title="Export to DOT">
165
+ <button class="btn btn-secondary btn-sm" id="export-dot-btn" title="Export to Graphviz DOT">
165
166
  <i class="fas fa-download"></i> DOT
166
167
  </button>
167
- <button class="btn btn-warning btn-sm" id="export-png-btn" title="Export as PNG">
168
+ <button class="btn btn-warning btn-sm" id="export-png-btn" title="Export current view as PNG image">
168
169
  <i class="fas fa-image"></i> PNG
169
170
  </button>
170
171
  <!-- Spec 3-bis: Harris Swimlane controls -->
171
- <button onclick="showNewRowModal()" class="btn btn-primary btn-sm" title="Add a new swimlane row">+ New Row</button>
172
- <button onclick="saveSwimlaneState()" class="btn btn-success btn-sm" title="Save swimlane changes">&#128190; Save Swimlane</button>
173
- <button onclick="exportYedGraphml()" class="btn btn-info btn-sm" title="Export yEd GraphML">&#11015; Export yEd GraphML</button>
172
+ <button onclick="showNewRowModal()" class="btn btn-primary btn-sm" title="Add a new swimlane row (period + phase)">+ New Row</button>
173
+ <button onclick="saveSwimlaneState()" class="btn btn-success btn-sm" title="Save swimlane changes back to the database">&#128190; Save Swimlane</button>
174
+ <button onclick="exportYedGraphml()" class="btn btn-info btn-sm"
175
+ title="yEd-flavored GraphML with TableNode swimlanes (open in yEd Desktop)">&#11015; Export yEd GraphML</button>
176
+ <button type="button" class="btn btn-outline-info btn-sm" data-bs-toggle="modal" data-bs-target="#exportFormatsHelp" title="What are these export formats?">
177
+ <i class="fas fa-question-circle"></i>
178
+ </button>
174
179
  <a href="{{ url_for('harris_creator.index') }}" class="btn btn-outline-secondary btn-sm">
175
180
  <i class="fas fa-arrow-left"></i> Back
176
181
  </a>
@@ -373,6 +378,47 @@
373
378
  <input type="hidden" id="site-name" value="{{ site_name }}">
374
379
  <input type="hidden" id="existing-nodes" value="{{ existing_nodes }}">
375
380
  <input type="hidden" id="existing-relationships" value="{{ existing_relationships }}">
381
+
382
+ <!-- Export formats help modal -->
383
+ <div class="modal fade" id="exportFormatsHelp" tabindex="-1" aria-hidden="true">
384
+ <div class="modal-dialog modal-lg">
385
+ <div class="modal-content">
386
+ <div class="modal-header">
387
+ <h5 class="modal-title"><i class="fas fa-question-circle"></i> Export formats &mdash; GraphML vs yEd GraphML</h5>
388
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
389
+ </div>
390
+ <div class="modal-body">
391
+ <p>The editor exposes <strong>two GraphML outputs</strong> that look similar but serve different audiences.</p>
392
+ <table class="table table-bordered table-sm">
393
+ <thead class="table-light">
394
+ <tr><th></th><th class="text-info">GraphML</th><th class="text-info">Export yEd GraphML</th></tr>
395
+ </thead>
396
+ <tbody>
397
+ <tr><th>Trigger</th><td>Auto-regenerated on every US save (Spec&nbsp;2)</td><td>On-demand when you click the button (Spec&nbsp;3-bis)</td></tr>
398
+ <tr><th>File</th><td><code>data/paradata/&lt;site&gt;/stratigraphy.graphml</code></td><td><code>data/exports/harris_yed/&lt;site&gt;-harris-yed.graphml</code></td></tr>
399
+ <tr><th>Schema</th><td>s3dgraphy clean &mdash; canonical EM nodes (StratigraphicNode) and edges (<code>overlies</code>, <code>abuts</code>, <code>is_after</code>, &hellip;)</td><td>yEd-flavored &mdash; <code>y:TableNode</code> + <code>y:Rows</code> for swimlanes, <code>y:ShapeNode</code> children with VocabProvider colors</td></tr>
400
+ <tr><th>Audience</th><td>EM Datacenter, 3D pipeline, Heriverse, programmatic consumers</td><td>Humans using <strong>yEd Desktop</strong> for review/printing</td></tr>
401
+ <tr><th>Round-trip</th><td>Yes (s3dgraphy reader)</td><td>No (one-way export for presentation)</td></tr>
402
+ </tbody>
403
+ </table>
404
+ <h6>DOT / PNG</h6>
405
+ <ul>
406
+ <li><strong>DOT</strong> &mdash; Graphviz source, useful for batch rendering or version-controlling diagrams as text.</li>
407
+ <li><strong>PNG</strong> &mdash; Rasterized snapshot of the current Cytoscape view.</li>
408
+ </ul>
409
+ <h6>Quick reference</h6>
410
+ <ul>
411
+ <li>Need to feed a 3D / EM pipeline &rarr; use <strong>GraphML</strong>.</li>
412
+ <li>Need to open in yEd Desktop and tweak by hand &rarr; use <strong>Export yEd GraphML</strong>.</li>
413
+ <li>Need a quick image for a report &rarr; use <strong>PNG</strong>.</li>
414
+ </ul>
415
+ </div>
416
+ <div class="modal-footer">
417
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
418
+ </div>
419
+ </div>
420
+ </div>
421
+ </div>
376
422
  {% endblock %}
377
423
 
378
424
  {% block extra_js %}
@@ -392,17 +438,29 @@
392
438
  <script>
393
439
  // === Spec 3-bis: Harris Swimlane integration ===
394
440
 
441
+ // Initialize _currentSite server-side from hidden input so Save/+ Row/Export
442
+ // work even if loadSwimlaneState() never succeeds (e.g. DB migration pending).
443
+ window._currentSite = (document.getElementById('site-name') || {}).value || null;
444
+
395
445
  async function loadSwimlaneState(site) {
396
446
  try {
397
447
  const r = await fetch(`/harris-creator/api/load/${encodeURIComponent(site)}`);
398
448
  if (!r.ok) {
399
- console.error("Failed to load swimlane state:", await r.text());
449
+ const body = await r.text();
450
+ console.error("Failed to load swimlane state:", body);
451
+ // Surface backend errors so the user understands why swimlanes
452
+ // are missing (typical cause: node_uuid column / migration not run).
453
+ const msg = body.length > 400 ? body.slice(0, 400) + '...' : body;
454
+ alert(`Swimlane load failed (HTTP ${r.status}):\n\n${msg}\n\n` +
455
+ `If you see "node_uuid does not exist", run the migration on the server:\n` +
456
+ ` pyarchinit-mini-migrate-vocab --apply --yes --database <DSN>`);
400
457
  return;
401
458
  }
402
459
  const state = await r.json();
403
460
  renderSwimlaneState(state);
404
461
  } catch (e) {
405
462
  console.error("loadSwimlaneState error:", e);
463
+ alert(`Swimlane load error: ${e.message}`);
406
464
  }
407
465
  }
408
466
 
@@ -470,10 +528,10 @@ function renderSwimlaneState(state) {
470
528
  console.log(`Loaded swimlane state for ${state.site}: ${state.rows.length} rows, ${usNodes.length} US, ${state.edges.length} edges`);
471
529
  }
472
530
 
473
- // Auto-load on page ready if ?site=... in URL
531
+ // Auto-load on page ready: use ?site=... if present, else server-rendered site_name.
474
532
  window.addEventListener('DOMContentLoaded', () => {
475
533
  const params = new URLSearchParams(window.location.search);
476
- const site = params.get('site');
534
+ const site = params.get('site') || window._currentSite;
477
535
  if (site) {
478
536
  // Wait briefly for Cytoscape to init then load
479
537
  const tryLoad = (retries) => {
@@ -545,7 +603,7 @@ function hideUnsavedIndicator() {
545
603
  async function saveSwimlaneState() {
546
604
  const site = window._currentSite;
547
605
  if (!site) {
548
- alert('No site loaded. Open editor with ?site=<name>');
606
+ alert('No site selected. Return to the Harris Matrix Creator index and choose or create a site.');
549
607
  return;
550
608
  }
551
609
  try {
@@ -576,7 +634,7 @@ async function saveSwimlaneState() {
576
634
  function showNewRowModal() {
577
635
  const site = window._currentSite;
578
636
  if (!site) {
579
- alert('No site loaded.');
637
+ alert('No site selected. Return to the Harris Matrix Creator index and choose or create a site.');
580
638
  return;
581
639
  }
582
640
  const period = prompt('Period name:');
@@ -610,7 +668,7 @@ function showNewRowModal() {
610
668
  function exportYedGraphml() {
611
669
  const site = window._currentSite;
612
670
  if (!site) {
613
- alert('No site loaded.');
671
+ alert('No site selected. Return to the Harris Matrix Creator index and choose or create a site.');
614
672
  return;
615
673
  }
616
674
  window.location.href = `/harris-creator/api/export/${encodeURIComponent(site)}/yed-graphml`;
@@ -0,0 +1,53 @@
1
+ {% extends "base.html" %}
2
+ {% block title %}{{ _('Paradata') }} - PyArchInit-Mini{% endblock %}
3
+ {% block content %}
4
+ <div class="container py-4">
5
+ <h1><i class="fas fa-tags"></i> {{ _('Paradata') }}</h1>
6
+ <p class="text-muted">
7
+ {{ _('Per-site paradata sidecar: authors, licenses, embargoes, documents, epochs. Stored as JSON next to the auto-regenerated stratigraphy graph.') }}
8
+ </p>
9
+
10
+ {% if not sites %}
11
+ <div class="alert alert-info">{{ _('No sites available. Create a site first.') }}</div>
12
+ {% else %}
13
+ <div class="card mb-4">
14
+ <div class="card-body">
15
+ <label for="site-picker" class="form-label">{{ _('Choose a site') }}</label>
16
+ <select id="site-picker" class="form-select">
17
+ <option value="">— {{ _('select') }} —</option>
18
+ {% for s in sites %}<option value="{{ s }}">{{ s }}</option>{% endfor %}
19
+ </select>
20
+ </div>
21
+ </div>
22
+
23
+ <div id="kind-buttons" class="d-none">
24
+ <h5>{{ _('Manage') }}:</h5>
25
+ <div class="d-flex flex-wrap gap-2">
26
+ {% for k in kinds %}
27
+ <a id="kind-link-{{ k }}" href="#" class="btn btn-outline-primary">
28
+ <i class="fas fa-folder"></i> {{ k|capitalize }}
29
+ </a>
30
+ {% endfor %}
31
+ </div>
32
+ </div>
33
+ {% endif %}
34
+ </div>
35
+
36
+ <script>
37
+ (function() {
38
+ const picker = document.getElementById('site-picker');
39
+ if (!picker) return;
40
+ const wrap = document.getElementById('kind-buttons');
41
+ const base = "{{ url_for('paradata_ui.list', site='__SITE__', kind='__KIND__') }}";
42
+ picker.addEventListener('change', () => {
43
+ const site = picker.value;
44
+ if (!site) { wrap.classList.add('d-none'); return; }
45
+ wrap.classList.remove('d-none');
46
+ {% for k in kinds %}
47
+ document.getElementById('kind-link-{{ k }}').href =
48
+ base.replace('__SITE__', encodeURIComponent(site)).replace('__KIND__', '{{ k }}');
49
+ {% endfor %}
50
+ });
51
+ })();
52
+ </script>
53
+ {% endblock %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
5
5
  Home-page: https://github.com/enzococca/pyarchinit-mini
6
6
  Author: PyArchInit Team
@@ -355,6 +355,7 @@ pyarchinit_mini/web_interface/templates/media/upload.html
355
355
  pyarchinit_mini/web_interface/templates/messaging/contacts.html
356
356
  pyarchinit_mini/web_interface/templates/operators/directory.html
357
357
  pyarchinit_mini/web_interface/templates/paradata/edit.html
358
+ pyarchinit_mini/web_interface/templates/paradata/index.html
358
359
  pyarchinit_mini/web_interface/templates/paradata/list.html
359
360
  pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html
360
361
  pyarchinit_mini/web_interface/templates/periodizzazione/form.html
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyarchinit-mini"
7
- version = "2.4.0"
7
+ version = "2.4.2"
8
8
  description = "Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer"
9
9
  readme = "README.md"
10
10
  license = {text = "GPL-2.0"}
@@ -0,0 +1,37 @@
1
+ """Verify _get_session() lazily acquires a session when g.db_session is not bound.
2
+
3
+ Prior to 2.4.2, _get_session() raised RuntimeError when no before_request hook
4
+ had set g.db_session — but no such hook exists in the production app, so every
5
+ swimlane request 500'd. 2.4.2 lazy-acquires a session through the same path as
6
+ get_db_session() and binds it to g for the duration of the request.
7
+ """
8
+ import pytest
9
+ from flask import Flask
10
+ from sqlalchemy import create_engine
11
+
12
+ from pyarchinit_mini.models.base import Base
13
+ from pyarchinit_mini.web_interface.harris_creator_routes import harris_creator_bp
14
+
15
+
16
+ @pytest.fixture
17
+ def client_no_session(tmp_path, monkeypatch):
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)
23
+ app = Flask(__name__)
24
+ app.config["TESTING"] = True
25
+ app.register_blueprint(harris_creator_bp)
26
+ # Deliberately NO before_request hook setting g.db_session — we rely on
27
+ # _get_session() lazy acquisition.
28
+ yield app.test_client()
29
+
30
+
31
+ def test_swimlanes_endpoint_lazy_acquires_session(client_no_session):
32
+ """Without a pre-bound g.db_session, the endpoint should still answer 200
33
+ by lazily opening a fresh session via get_db_session()."""
34
+ r = client_no_session.get("/harris-creator/api/swimlanes/EmptySite")
35
+ assert r.status_code == 200, r.get_data(as_text=True)
36
+ body = r.get_json()
37
+ assert isinstance(body, list)
@@ -1,23 +0,0 @@
1
- """Verify _get_session() fails loud when g.db_session is not bound."""
2
- import pytest
3
- from flask import Flask
4
-
5
- from pyarchinit_mini.web_interface.harris_creator_routes import harris_creator_bp
6
-
7
-
8
- @pytest.fixture
9
- def client_no_session():
10
- app = Flask(__name__)
11
- app.config["TESTING"] = True
12
- app.register_blueprint(harris_creator_bp)
13
- # Deliberately NO before_request hook setting g.db_session
14
- yield app.test_client()
15
-
16
-
17
- def test_swimlanes_endpoint_fails_loud_without_session(client_no_session):
18
- r = client_no_session.get("/harris-creator/api/swimlanes/Volterra")
19
- # Should return 500 with explicit error, NOT silent AttributeError
20
- assert r.status_code == 500
21
- body = r.get_json() or {}
22
- # Either "internal" generic error catch or our explicit message
23
- assert "error" in body