pyarchinit-mini 2.4.1__tar.gz → 2.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/CHANGELOG.md +44 -0
  2. {pyarchinit_mini-2.4.1/pyarchinit_mini.egg-info → pyarchinit_mini-2.4.3}/PKG-INFO +1 -1
  3. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/__init__.py +1 -1
  4. pyarchinit_mini-2.4.3/pyarchinit_mini/harris_swimlane/period_sync_service.py +111 -0
  5. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/row_provider.py +23 -13
  6. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/harris_creator_routes.py +33 -14
  7. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
  8. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyproject.toml +1 -1
  9. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/fixtures/_generate_harris_swimlane_synthetic.py +18 -17
  10. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_swimlane_routes_create_row.py +6 -3
  11. pyarchinit_mini-2.4.3/tests/integration/test_harris_swimlane_routes_session_missing.py +57 -0
  12. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_period_sync.py +28 -12
  13. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_row_provider.py +30 -33
  14. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_state_load.py +6 -8
  15. pyarchinit_mini-2.4.1/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -90
  16. pyarchinit_mini-2.4.1/tests/integration/test_harris_swimlane_routes_session_missing.py +0 -23
  17. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/MANIFEST.in +0 -0
  18. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/README.md +0 -0
  19. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/babel.cfg +0 -0
  20. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/data/media_viewer_demo.db +0 -0
  21. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/data/pyarchinit_mini 2.db +0 -0
  22. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/data/pyarchinit_mini.db +0 -0
  23. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/data/pyarchinit_mini_sample.db +0 -0
  24. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/data/pyarchinit_tutorial.db +0 -0
  25. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
  26. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/data/pyarchinit_tutorial_clean.db +0 -0
  27. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/data/pyarchinit_tutorial_video.db +0 -0
  28. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/data/pyarchinit_v18_demo.db +0 -0
  29. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/logo/logo_pyarchinit-mini.png +0 -0
  30. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/__init__.py +0 -0
  31. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/auth.py +0 -0
  32. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/dependencies.py +0 -0
  33. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/graphml.py +0 -0
  34. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/inventario.py +0 -0
  35. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/schemas.py +0 -0
  36. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/site.py +0 -0
  37. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/sync.py +0 -0
  38. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/api/us.py +0 -0
  39. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/__init__.py +0 -0
  40. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/export_import_cli.py +0 -0
  41. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
  42. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/graphml_cli.py +0 -0
  43. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/harris_import.py +0 -0
  44. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/harris_template.py +0 -0
  45. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/migrate.py +0 -0
  46. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
  47. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
  48. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli/sync_cli.py +0 -0
  49. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli_interface/__init__.py +0 -0
  50. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
  51. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/config/__init__.py +0 -0
  52. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/config/connection_manager.py +0 -0
  53. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
  54. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/config/em_node_types.yaml +0 -0
  55. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/__init__.py +0 -0
  56. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/concurrency_manager.py +0 -0
  57. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/connection.py +0 -0
  58. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/database_creator.py +0 -0
  59. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/manager.py +0 -0
  60. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
  61. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
  62. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
  63. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
  64. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
  65. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
  66. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
  67. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
  68. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
  69. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/__init__.py +0 -0
  70. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/migrations/backup.py +0 -0
  71. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/postgres_installer.py +0 -0
  72. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/schemas.py +0 -0
  73. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/database/utils.py +0 -0
  74. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
  75. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
  76. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
  77. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
  78. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
  79. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
  80. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
  81. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
  82. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
  83. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
  84. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/icons.py +0 -0
  85. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
  86. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
  87. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
  88. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
  89. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
  90. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
  91. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
  92. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
  93. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
  94. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/dto/__init__.py +0 -0
  95. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/dto/inventario_dto.py +0 -0
  96. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/dto/site_dto.py +0 -0
  97. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/dto/us_dto.py +0 -0
  98. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/exceptions.py +0 -0
  99. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
  100. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/converter.py +0 -0
  101. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
  102. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
  103. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
  104. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
  105. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
  106. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
  107. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
  108. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
  109. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
  110. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_io/__init__.py +0 -0
  111. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_io/reader.py +0 -0
  112. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_io/writer.py +0 -0
  113. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
  114. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/__init__.py +0 -0
  115. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
  116. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
  117. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/exceptions.py +0 -0
  118. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/filesystem.py +0 -0
  119. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
  120. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/ingestor.py +0 -0
  121. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
  122. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/graphproj/projector.py +0 -0
  123. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
  124. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
  125. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
  126. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
  127. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
  128. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
  129. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
  130. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
  131. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/harris_swimlane/swimlane_state.py +0 -0
  132. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/i18n/__init__.py +0 -0
  133. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
  134. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/i18n/locale_manager.py +0 -0
  135. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/__init__.py +0 -0
  136. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/__main__.py +0 -0
  137. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
  138. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/config.py +0 -0
  139. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
  140. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
  141. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/http_server.py +0 -0
  142. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
  143. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
  144. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
  145. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
  146. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
  147. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
  148. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
  149. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
  150. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
  151. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
  152. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
  153. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
  154. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
  155. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
  156. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/server.py +0 -0
  157. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
  158. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
  159. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
  160. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
  161. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
  162. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
  163. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
  164. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
  165. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
  166. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
  167. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
  168. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
  169. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
  170. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
  171. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
  172. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
  173. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
  174. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
  175. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
  176. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
  177. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
  178. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
  179. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
  180. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
  181. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
  182. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
  183. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
  184. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
  185. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
  186. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
  187. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
  188. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
  189. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
  190. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
  191. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/media_manager/__init__.py +0 -0
  192. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/media_manager/media_handler.py +0 -0
  193. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/__init__.py +0 -0
  194. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/ai_chat.py +0 -0
  195. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/app_setting.py +0 -0
  196. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/base.py +0 -0
  197. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/datazione.py +0 -0
  198. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/extended_matrix.py +0 -0
  199. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/harris_matrix.py +0 -0
  200. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/inventario_materiali.py +0 -0
  201. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/media.py +0 -0
  202. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/pottery.py +0 -0
  203. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/site.py +0 -0
  204. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/thesaurus.py +0 -0
  205. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/tma.py +0 -0
  206. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/us.py +0 -0
  207. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/models/user.py +0 -0
  208. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/__init__.py +0 -0
  209. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
  210. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
  211. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
  212. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
  213. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
  214. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
  215. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
  216. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
  217. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/__init__.py +0 -0
  218. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/auto_translate.py +0 -0
  219. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
  220. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
  221. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
  222. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
  223. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
  224. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
  225. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
  226. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
  227. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
  228. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
  229. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
  230. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
  231. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/setup_auth.py +0 -0
  232. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
  233. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
  234. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
  235. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
  236. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
  237. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/scripts/verify_docs.py +0 -0
  238. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/__init__.py +0 -0
  239. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
  240. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/ai_chat_service.py +0 -0
  241. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/analytics_service.py +0 -0
  242. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/app_setting_service.py +0 -0
  243. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/backup_service.py +0 -0
  244. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/command_parser.py +0 -0
  245. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/datazione_service.py +0 -0
  246. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/export_import_service.py +0 -0
  247. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
  248. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/import_export_service.py +0 -0
  249. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/inventario_service.py +0 -0
  250. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/mcp_executor.py +0 -0
  251. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/media_service.py +0 -0
  252. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
  253. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/pottery_dto.py +0 -0
  254. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
  255. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/pottery_service.py +0 -0
  256. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
  257. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/search_service.py +0 -0
  258. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/site_service.py +0 -0
  259. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/thesaurus_service.py +0 -0
  260. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/tma_service.py +0 -0
  261. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/us_service.py +0 -0
  262. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/services/user_service.py +0 -0
  263. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/__init__.py +0 -0
  264. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
  265. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
  266. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
  267. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
  268. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
  269. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
  270. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
  271. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
  272. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
  273. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
  274. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
  275. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
  276. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/translations/messages.pot +0 -0
  277. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/__init__.py +0 -0
  278. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/auth.py +0 -0
  279. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/exceptions.py +0 -0
  280. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/relationship_validator.py +0 -0
  281. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
  282. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
  283. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/utils/validators.py +0 -0
  284. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/__init__.py +0 -0
  285. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/exceptions.py +0 -0
  286. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/i18n.py +0 -0
  287. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/loader.py +0 -0
  288. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/provider.py +0 -0
  289. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
  290. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/translations/vocab_it.json +0 -0
  291. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/vocab/types.py +0 -0
  292. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/app.py +0 -0
  293. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
  294. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
  295. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
  296. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
  297. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
  298. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
  299. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
  300. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
  301. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
  302. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
  303. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
  304. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
  305. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
  306. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
  307. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
  308. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
  309. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +0 -0
  310. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
  311. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
  312. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
  313. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
  314. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
  315. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
  316. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
  317. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
  318. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
  319. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
  320. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
  321. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
  322. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
  323. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
  324. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
  325. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
  326. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
  327. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
  328. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
  329. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
  330. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/base.html +0 -0
  331. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
  332. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
  333. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
  334. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
  335. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
  336. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
  337. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
  338. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
  339. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
  340. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
  341. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +0 -0
  342. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
  343. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
  344. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
  345. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
  346. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
  347. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
  348. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
  349. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
  350. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
  351. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
  352. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
  353. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
  354. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
  355. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
  356. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
  357. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
  358. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
  359. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
  360. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
  361. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
  362. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
  363. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
  364. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
  365. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
  366. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
  367. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
  368. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
  369. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
  370. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
  371. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
  372. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
  373. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
  374. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
  375. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
  376. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
  377. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
  378. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
  379. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
  380. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
  381. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
  382. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  383. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
  384. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
  385. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
  386. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
  387. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  388. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/SOURCES.txt +0 -0
  389. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
  390. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
  391. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
  392. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/requires.txt +0 -0
  393. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/pyarchinit_mini.egg-info/top_level.txt +0 -0
  394. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/requirements.txt +0 -0
  395. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/setup.cfg +0 -0
  396. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/setup.py +0 -0
  397. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/__init__.py +0 -0
  398. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/conftest.py +0 -0
  399. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/e2e/__init__.py +0 -0
  400. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/e2e/test_web_vocab_full_flow.py +0 -0
  401. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/fixtures/_generate_baseline_graphml.py +0 -0
  402. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/fixtures/_generate_synthetic_db.py +0 -0
  403. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/fixtures/build_legacy_with_pottery.py +0 -0
  404. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/__init__.py +0 -0
  405. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_admin_ai_settings_routes.py +0 -0
  406. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_admin_backup_routes.py +0 -0
  407. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_auto_regen_on_save.py +0 -0
  408. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_full_sync_flow.py +0 -0
  409. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_graph_import_flow.py +0 -0
  410. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_graph_routes.py +0 -0
  411. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
  412. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
  413. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
  414. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
  415. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_migrate_vocab_cli.py +0 -0
  416. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_paradata_routes_authors.py +0 -0
  417. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_paradata_routes_other_types.py +0 -0
  418. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_paradata_ui.py +0 -0
  419. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_pottery_completion.py +0 -0
  420. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
  421. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
  422. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_pottery_routes.py +0 -0
  423. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_spec2_coverage_gaps.py +0 -0
  424. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_vocab_routes.py +0 -0
  425. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_yed_export_route.py +0 -0
  426. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/integration/test_yed_writer_parity.py +0 -0
  427. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/__init__.py +0 -0
  428. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_app_setting_model.py +0 -0
  429. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_app_setting_service.py +0 -0
  430. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_auto_regen.py +0 -0
  431. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_backup_service.py +0 -0
  432. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_bundle.py +0 -0
  433. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_concurrency_columns.py +0 -0
  434. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_concurrency_manager.py +0 -0
  435. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_connectivity_monitor.py +0 -0
  436. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_database_utils.py +0 -0
  437. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_deprecated_writers_shim.py +0 -0
  438. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_em_palette_vocab_backed.py +0 -0
  439. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_graphml_io_reader.py +0 -0
  440. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_graphml_io_writer.py +0 -0
  441. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_edge_registry.py +0 -0
  442. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_exceptions.py +0 -0
  443. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_filesystem.py +0 -0
  444. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
  445. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
  446. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_graphproj_projector.py +0 -0
  447. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
  448. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
  449. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_harris_swimlane_state_save.py +0 -0
  450. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_ingest_plan.py +0 -0
  451. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_inventario_schema.py +0 -0
  452. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_migrations_backup.py +0 -0
  453. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_migrations_idempotent.py +0 -0
  454. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_optimistic_locking.py +0 -0
  455. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_paradata_store_authors.py +0 -0
  456. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_paradata_store_basic.py +0 -0
  457. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_paradata_store_other_types.py +0 -0
  458. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_pottery_dto.py +0 -0
  459. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_pottery_model.py +0 -0
  460. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_pottery_service.py +0 -0
  461. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
  462. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_site_service.py +0 -0
  463. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_api.py +0 -0
  464. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_cli.py +0 -0
  465. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_orchestrator.py +0 -0
  466. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_queue.py +0 -0
  467. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_sync_state_machine.py +0 -0
  468. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
  469. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_us_schema.py +0 -0
  470. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_uuid_manager.py +0 -0
  471. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
  472. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_exceptions.py +0 -0
  473. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_i18n.py +0 -0
  474. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_loader.py +0 -0
  475. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_provider.py +0 -0
  476. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_vocab_types.py +0 -0
  477. {pyarchinit_mini-2.4.1 → pyarchinit_mini-2.4.3}/tests/unit/test_yed_writer.py +0 -0
@@ -1,3 +1,47 @@
1
+ ## [2.4.3] - 2026-05-18
2
+
3
+ ### Fixed (IT)
4
+ - `RowProvider` e `PeriodSyncService` ora usano lo schema reale di pyarchinit
5
+ per `period_table` (`periodo` / `fase` / `datazione` / `sito`) invece dello
6
+ schema ipotetico Spec 3-bis (`period_name` / `phase_name` / `start_date` /
7
+ `end_date`). Risolve l'HTTP 500 "la colonna 'period_name' non esiste"
8
+ visto in produzione su PostgreSQL `pyarchinit_v2`.
9
+ - `period_table` viene ora filtrato per `sito` (con fallback a righe
10
+ cross-site se `sito` IS NULL/''). `start_date` / `end_date` numerici non
11
+ esistono in produzione: nella Row dataclass restano `None` e il sort è
12
+ alfabetico per `(periodo, fase)`. Le date numeriche passate da `+ New
13
+ Row` vengono serializzate nella colonna `datazione` come `start..end`.
14
+ - Fixture sintetica `sqlite_volterra_30us_with_periods.db` e i test
15
+ associati (row_provider, period_sync, state_load, integration routes)
16
+ rigenerati con lo schema reale.
17
+
18
+ ### Fixed (EN)
19
+ - `RowProvider` and `PeriodSyncService` now use pyarchinit's real
20
+ `period_table` schema (`periodo` / `fase` / `datazione` / `sito`).
21
+ Fixes the HTTP 500 "column 'period_name' does not exist" against the
22
+ production PostgreSQL DB.
23
+ - Numeric `start_date` / `end_date` are no longer expected as columns; the
24
+ Row dataclass leaves them `None`, rows are sorted alphabetically by
25
+ `(periodo, fase)`, and date inputs from the editor are serialized into
26
+ the existing `datazione` text column as `start..end`.
27
+
28
+ ## [2.4.2] - 2026-05-18
29
+
30
+ ### Fixed (IT)
31
+ - `_get_session()` (Spec 3-bis endpoints) ora acquisisce la sessione DB in modo
32
+ lazy via `get_db_session()` se nessun before_request hook ha pre-impostato
33
+ `g.db_session`. Risolve l'errore HTTP 500 "g.db_session not set" che
34
+ bloccava load / save / + Row / Export yEd su Adarte in 2.4.0-2.4.1.
35
+ - Aggiunto `teardown_request` sul blueprint che rilascia la sessione lazy
36
+ alla fine della request.
37
+
38
+ ### Fixed (EN)
39
+ - `_get_session()` now lazily opens a DB session via `get_db_session()` when no
40
+ before_request hook has bound one to `g.db_session`. Fixes the HTTP 500
41
+ "g.db_session not set" that broke load / save / + Row / Export on production
42
+ in 2.4.0-2.4.1.
43
+ - Added `teardown_request` hook releasing the lazy session at request end.
44
+
1
45
  ## [2.4.1] - 2026-05-18
2
46
 
3
47
  ### Fixed (IT)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.1
3
+ Version: 2.4.3
4
4
  Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
5
5
  Home-page: https://github.com/enzococca/pyarchinit-mini
6
6
  Author: PyArchInit Team
@@ -23,7 +23,7 @@ Features:
23
23
  - Scalable and modular architecture
24
24
  """
25
25
 
26
- __version__ = "2.4.1"
26
+ __version__ = "2.4.3"
27
27
  __author__ = "PyArchInit Team"
28
28
  __email__ = "enzo.ccc@gmail.com"
29
29
 
@@ -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
  ))
@@ -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."""
@@ -738,8 +758,7 @@ def api_save_state(site: str):
738
758
 
739
759
  @harris_creator_bp.post("/api/swimlanes/<site>")
740
760
  def api_create_row(site: str):
741
- """Create a new swimlane row (upsert period_table). site param is for
742
- URL consistency; period_table is currently cross-site."""
761
+ """Create a new swimlane row (upsert period_table for this site)."""
743
762
  payload = request.get_json(silent=True) or {}
744
763
  period_name = payload.get("period_name", "")
745
764
  phase_name = payload.get("phase_name") or None
@@ -747,7 +766,7 @@ def api_create_row(site: str):
747
766
  end_date = payload.get("end_date")
748
767
  try:
749
768
  session = _get_session()
750
- svc = PeriodSyncService(session)
769
+ svc = PeriodSyncService(session, site=site)
751
770
  row = svc.upsert_row(
752
771
  period_name=period_name, phase_name=phase_name,
753
772
  start_date=start_date, end_date=end_date,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.1
3
+ Version: 2.4.3
4
4
  Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
5
5
  Home-page: https://github.com/enzococca/pyarchinit-mini
6
6
  Author: PyArchInit Team
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyarchinit-mini"
7
- version = "2.4.1"
7
+ version = "2.4.3"
8
8
  description = "Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer"
9
9
  readme = "README.md"
10
10
  license = {text = "GPL-2.0"}
@@ -18,10 +18,11 @@ c = conn.cursor()
18
18
  c.executescript("""
19
19
  CREATE TABLE period_table (
20
20
  id_period INTEGER PRIMARY KEY AUTOINCREMENT,
21
- 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()
@@ -0,0 +1,57 @@
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 sqlite3
9
+
10
+ import pytest
11
+ from flask import Flask
12
+
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
+ # 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}")
43
+ app = Flask(__name__)
44
+ app.config["TESTING"] = True
45
+ app.register_blueprint(harris_creator_bp)
46
+ # Deliberately NO before_request hook setting g.db_session — we rely on
47
+ # _get_session() lazy acquisition.
48
+ yield app.test_client()
49
+
50
+
51
+ def test_swimlanes_endpoint_lazy_acquires_session(client_no_session):
52
+ """Without a pre-bound g.db_session, the endpoint should still answer 200
53
+ by lazily opening a fresh session via get_db_session()."""
54
+ r = client_no_session.get("/harris-creator/api/swimlanes/EmptySite")
55
+ assert r.status_code == 200, r.get_data(as_text=True)
56
+ body = r.get_json()
57
+ assert isinstance(body, list)
@@ -1,3 +1,4 @@
1
+ """Tests for PeriodSyncService against the real pyarchinit period_table schema."""
1
2
  import sqlite3
2
3
  import pytest
3
4
 
@@ -12,12 +13,14 @@ from pyarchinit_mini.harris_swimlane.exceptions import PeriodSyncError
12
13
  def session(tmp_path):
13
14
  db = tmp_path / "ps.db"
14
15
  conn = sqlite3.connect(db)
16
+ # Real pyarchinit schema: periodo / fase / datazione / sito.
15
17
  conn.execute("""CREATE TABLE period_table (
16
18
  id_period INTEGER PRIMARY KEY AUTOINCREMENT,
17
- period_name TEXT NOT NULL,
18
- phase_name TEXT,
19
- start_date INTEGER, end_date INTEGER,
20
- description TEXT, chronology TEXT
19
+ sito TEXT,
20
+ periodo TEXT,
21
+ fase TEXT,
22
+ datazione TEXT,
23
+ descrizione TEXT
21
24
  )""")
22
25
  conn.commit()
23
26
  conn.close()
@@ -29,50 +32,63 @@ def session(tmp_path):
29
32
 
30
33
 
31
34
  def test_upsert_row_creates_new_entry(session):
32
- svc = PeriodSyncService(session)
35
+ svc = PeriodSyncService(session, site="Volterra")
33
36
  row = svc.upsert_row(period_name="P1", phase_name="a",
34
37
  start_date=100, end_date=200)
35
38
  assert row.period_name == "P1"
36
39
  assert row.phase_name == "a"
37
40
  assert row.start_date == 100
38
41
  assert row.row_id == "row_p1_a"
42
+ datazione = session.execute(text(
43
+ "SELECT datazione FROM period_table WHERE periodo='P1' AND fase='a'"
44
+ )).scalar()
45
+ assert datazione == "100..200"
39
46
 
40
47
 
41
48
  def test_upsert_row_idempotent(session):
42
- svc = PeriodSyncService(session)
49
+ svc = PeriodSyncService(session, site="Volterra")
43
50
  svc.upsert_row(period_name="P1", phase_name="a", start_date=100, end_date=200)
44
51
  svc.upsert_row(period_name="P1", phase_name="a", start_date=100, end_date=200)
45
52
  count = session.execute(text(
46
- "SELECT COUNT(*) FROM period_table WHERE period_name='P1' AND phase_name='a'"
53
+ "SELECT COUNT(*) FROM period_table WHERE periodo='P1' AND fase='a'"
47
54
  )).scalar()
48
55
  assert count == 1
49
56
 
50
57
 
51
58
  def test_upsert_row_different_phase_creates_new(session):
52
- svc = PeriodSyncService(session)
59
+ svc = PeriodSyncService(session, site="Volterra")
53
60
  svc.upsert_row(period_name="P1", phase_name="a")
54
61
  svc.upsert_row(period_name="P1", phase_name="b")
55
62
  count = session.execute(text(
56
- "SELECT COUNT(*) FROM period_table WHERE period_name='P1'"
63
+ "SELECT COUNT(*) FROM period_table WHERE periodo='P1'"
57
64
  )).scalar()
58
65
  assert count == 2
59
66
 
60
67
 
61
68
  def test_upsert_row_empty_period_raises(session):
62
- svc = PeriodSyncService(session)
69
+ svc = PeriodSyncService(session, site="Volterra")
63
70
  with pytest.raises(PeriodSyncError):
64
71
  svc.upsert_row(period_name="")
65
72
 
66
73
 
67
74
  def test_upsert_row_invalid_date_range_raises(session):
68
- svc = PeriodSyncService(session)
75
+ svc = PeriodSyncService(session, site="Volterra")
69
76
  with pytest.raises(PeriodSyncError):
70
77
  svc.upsert_row(period_name="P1", phase_name="a",
71
78
  start_date=200, end_date=100)
72
79
 
73
80
 
74
81
  def test_upsert_row_no_phase(session):
75
- svc = PeriodSyncService(session)
82
+ svc = PeriodSyncService(session, site="Volterra")
76
83
  row = svc.upsert_row(period_name="Iron Age")
77
84
  assert row.phase_name is None
78
85
  assert row.row_id == "row_iron-age"
86
+
87
+
88
+ def test_upsert_row_persists_sito(session):
89
+ svc = PeriodSyncService(session, site="Volterra")
90
+ svc.upsert_row(period_name="P1", phase_name="a")
91
+ sito = session.execute(text(
92
+ "SELECT sito FROM period_table WHERE periodo='P1'"
93
+ )).scalar()
94
+ assert sito == "Volterra"
@@ -8,18 +8,16 @@ from sqlalchemy.orm import sessionmaker
8
8
  from pyarchinit_mini.harris_swimlane.row_provider import Row, RowProvider
9
9
 
10
10
 
11
- @pytest.fixture
12
- def session_with_period_table(tmp_path):
13
- db = tmp_path / "rp.db"
14
- conn = sqlite3.connect(db)
11
+ def _make_db_with_real_schema(db_path):
12
+ """Create the 3 tables matching the real pyarchinit schema used in prod."""
13
+ conn = sqlite3.connect(db_path)
15
14
  conn.execute("""CREATE TABLE period_table (
16
15
  id_period INTEGER PRIMARY KEY,
17
- period_name TEXT NOT NULL,
18
- phase_name TEXT,
19
- start_date INTEGER,
20
- end_date INTEGER,
21
- description TEXT,
22
- chronology TEXT
16
+ sito TEXT,
17
+ periodo TEXT,
18
+ fase TEXT,
19
+ datazione TEXT,
20
+ descrizione TEXT
23
21
  )""")
24
22
  conn.execute("""CREATE TABLE periodizzazione_table (
25
23
  id_periodizzazione INTEGER PRIMARY KEY,
@@ -32,14 +30,21 @@ def session_with_period_table(tmp_path):
32
30
  sito TEXT, us INTEGER,
33
31
  periodo_iniziale TEXT, fase_iniziale TEXT
34
32
  )""")
33
+ return conn
34
+
35
+
36
+ @pytest.fixture
37
+ def session_with_period_table(tmp_path):
38
+ db = tmp_path / "rp.db"
39
+ conn = _make_db_with_real_schema(db)
35
40
  rows = [
36
- ("Roman Imperial", "early", -27, 100),
37
- ("Roman Imperial", "late", 100, 476),
38
- ("Medieval", "early", 476, 1000),
41
+ ("Volterra", "Roman Imperial", "early", "-27..100"),
42
+ ("Volterra", "Roman Imperial", "late", "100..476"),
43
+ ("Volterra", "Medieval", "early", "476..1000"),
39
44
  ]
40
45
  for r in rows:
41
46
  conn.execute(
42
- "INSERT INTO period_table (period_name, phase_name, start_date, end_date) VALUES (?,?,?,?)",
47
+ "INSERT INTO period_table (sito, periodo, fase, datazione) VALUES (?,?,?,?)",
43
48
  r,
44
49
  )
45
50
  conn.commit()
@@ -54,22 +59,7 @@ def session_with_period_table(tmp_path):
54
59
  @pytest.fixture
55
60
  def session_fallback_only(tmp_path):
56
61
  db = tmp_path / "rp_fb.db"
57
- conn = sqlite3.connect(db)
58
- conn.execute("""CREATE TABLE period_table (
59
- id_period INTEGER PRIMARY KEY, period_name TEXT, phase_name TEXT,
60
- start_date INTEGER, end_date INTEGER, description TEXT, chronology TEXT
61
- )""")
62
- conn.execute("""CREATE TABLE periodizzazione_table (
63
- id_periodizzazione INTEGER PRIMARY KEY,
64
- sito TEXT, area TEXT, us INTEGER,
65
- periodo_iniziale TEXT, fase_iniziale TEXT,
66
- periodo_finale TEXT, fase_finale TEXT
67
- )""")
68
- conn.execute("""CREATE TABLE us_table (
69
- id_us INTEGER PRIMARY KEY,
70
- sito TEXT, us INTEGER,
71
- periodo_iniziale TEXT, fase_iniziale TEXT
72
- )""")
62
+ conn = _make_db_with_real_schema(db)
73
63
  pz = [
74
64
  ("Volterra", "A", 1, "Roman", "a", None, None),
75
65
  ("Volterra", "A", 2, "Medieval", "b", None, None),
@@ -89,13 +79,20 @@ def session_fallback_only(tmp_path):
89
79
  s.close()
90
80
 
91
81
 
92
- def test_list_rows_from_period_table_sorted_recent_first(session_with_period_table):
82
+ def test_list_rows_from_period_table_sorted_alphabetically(session_with_period_table):
83
+ # Real period_table has no numeric start_date/end_date — we sort by
84
+ # (periodo, fase) alphabetically and leave numeric dates as None.
93
85
  rows = RowProvider(session_with_period_table, "Volterra").list_rows()
94
86
  assert len(rows) == 3
95
87
  assert rows[0].period_name == "Medieval"
88
+ assert rows[0].phase_name == "early"
96
89
  assert rows[1].period_name == "Roman Imperial"
97
- assert rows[1].phase_name == "late"
98
- assert rows[2].phase_name == "early"
90
+ assert rows[1].phase_name == "early"
91
+ assert rows[2].period_name == "Roman Imperial"
92
+ assert rows[2].phase_name == "late"
93
+ for r in rows:
94
+ assert r.start_date is None
95
+ assert r.end_date is None
99
96
 
100
97
 
101
98
  def test_list_rows_source_period_table(session_with_period_table):