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

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