pyarchinit-mini 2.4.4__tar.gz → 2.4.6__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.4 → pyarchinit_mini-2.4.6}/CHANGELOG.md +69 -0
  2. {pyarchinit_mini-2.4.4/pyarchinit_mini.egg-info → pyarchinit_mini-2.4.6}/PKG-INFO +1 -1
  3. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/__init__.py +1 -1
  4. pyarchinit_mini-2.4.6/pyarchinit_mini/database/migrations/_2026_05_period_table_schema.py +146 -0
  5. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migrations/__init__.py +1 -0
  6. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_swimlane/swimlane_state.py +63 -17
  7. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/harris_matrix.py +26 -8
  8. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/harris_creator_routes.py +31 -41
  9. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +51 -0
  10. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
  11. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini.egg-info/SOURCES.txt +1 -0
  12. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyproject.toml +1 -1
  13. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/fixtures/_generate_harris_swimlane_synthetic.py +3 -1
  14. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_harris_swimlane_routes_session_missing.py +2 -1
  15. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/MANIFEST.in +0 -0
  16. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/README.md +0 -0
  17. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/babel.cfg +0 -0
  18. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/data/media_viewer_demo.db +0 -0
  19. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/data/pyarchinit_mini 2.db +0 -0
  20. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/data/pyarchinit_mini.db +0 -0
  21. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/data/pyarchinit_mini_sample.db +0 -0
  22. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/data/pyarchinit_tutorial.db +0 -0
  23. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
  24. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/data/pyarchinit_tutorial_clean.db +0 -0
  25. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/data/pyarchinit_tutorial_video.db +0 -0
  26. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/data/pyarchinit_v18_demo.db +0 -0
  27. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/logo/logo_pyarchinit-mini.png +0 -0
  28. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/api/__init__.py +0 -0
  29. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/api/auth.py +0 -0
  30. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/api/dependencies.py +0 -0
  31. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/api/graphml.py +0 -0
  32. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/api/inventario.py +0 -0
  33. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/api/schemas.py +0 -0
  34. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/api/site.py +0 -0
  35. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/api/sync.py +0 -0
  36. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/api/us.py +0 -0
  37. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/__init__.py +0 -0
  38. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/export_import_cli.py +0 -0
  39. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
  40. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/graphml_cli.py +0 -0
  41. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/harris_import.py +0 -0
  42. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/harris_template.py +0 -0
  43. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/migrate.py +0 -0
  44. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
  45. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
  46. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli/sync_cli.py +0 -0
  47. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli_interface/__init__.py +0 -0
  48. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
  49. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/config/__init__.py +0 -0
  50. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/config/connection_manager.py +0 -0
  51. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
  52. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/config/em_node_types.yaml +0 -0
  53. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/__init__.py +0 -0
  54. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/concurrency_manager.py +0 -0
  55. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/connection.py +0 -0
  56. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/database_creator.py +0 -0
  57. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/manager.py +0 -0
  58. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
  59. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
  60. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
  61. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
  62. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
  63. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
  64. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
  65. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
  66. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
  67. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/migrations/backup.py +0 -0
  68. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/postgres_installer.py +0 -0
  69. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/schemas.py +0 -0
  70. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/database/utils.py +0 -0
  71. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
  72. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
  73. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
  74. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
  75. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
  76. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
  77. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
  78. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
  79. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
  80. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
  81. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/icons.py +0 -0
  82. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
  83. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
  84. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
  85. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
  86. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
  87. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
  88. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
  89. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
  90. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
  91. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/dto/__init__.py +0 -0
  92. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/dto/inventario_dto.py +0 -0
  93. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/dto/site_dto.py +0 -0
  94. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/dto/us_dto.py +0 -0
  95. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/exceptions.py +0 -0
  96. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
  97. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/converter.py +0 -0
  98. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
  99. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
  100. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
  101. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
  102. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
  103. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
  104. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
  105. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
  106. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
  107. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_io/__init__.py +0 -0
  108. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_io/reader.py +0 -0
  109. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_io/writer.py +0 -0
  110. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
  111. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphproj/__init__.py +0 -0
  112. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
  113. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
  114. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphproj/exceptions.py +0 -0
  115. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphproj/filesystem.py +0 -0
  116. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
  117. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphproj/ingestor.py +0 -0
  118. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
  119. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/graphproj/projector.py +0 -0
  120. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
  121. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
  122. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
  123. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
  124. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
  125. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
  126. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
  127. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
  128. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -0
  129. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/harris_swimlane/row_provider.py +0 -0
  130. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/i18n/__init__.py +0 -0
  131. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
  132. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/i18n/locale_manager.py +0 -0
  133. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/__init__.py +0 -0
  134. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/__main__.py +0 -0
  135. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
  136. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/config.py +0 -0
  137. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
  138. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
  139. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/http_server.py +0 -0
  140. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
  141. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
  142. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
  143. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
  144. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
  145. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
  146. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
  147. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
  148. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
  149. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
  150. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
  151. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
  152. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
  153. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
  154. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/server.py +0 -0
  155. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
  156. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
  157. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
  158. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
  159. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
  160. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
  161. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
  162. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
  163. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
  164. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
  165. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
  166. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
  167. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
  168. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
  169. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
  170. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
  171. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
  172. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
  173. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
  174. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
  175. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
  176. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
  177. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
  178. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
  179. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
  180. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
  181. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
  182. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
  183. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
  184. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
  185. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
  186. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
  187. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
  188. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
  189. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/media_manager/__init__.py +0 -0
  190. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/media_manager/media_handler.py +0 -0
  191. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/__init__.py +0 -0
  192. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/ai_chat.py +0 -0
  193. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/app_setting.py +0 -0
  194. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/base.py +0 -0
  195. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/datazione.py +0 -0
  196. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/extended_matrix.py +0 -0
  197. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/inventario_materiali.py +0 -0
  198. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/media.py +0 -0
  199. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/pottery.py +0 -0
  200. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/site.py +0 -0
  201. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/thesaurus.py +0 -0
  202. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/tma.py +0 -0
  203. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/us.py +0 -0
  204. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/models/user.py +0 -0
  205. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/pdf_export/__init__.py +0 -0
  206. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
  207. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
  208. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
  209. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
  210. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
  211. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
  212. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
  213. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
  214. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/__init__.py +0 -0
  215. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/auto_translate.py +0 -0
  216. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
  217. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
  218. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
  219. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
  220. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
  221. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
  222. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
  223. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
  224. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
  225. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
  226. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
  227. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
  228. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/setup_auth.py +0 -0
  229. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
  230. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
  231. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
  232. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
  233. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
  234. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/scripts/verify_docs.py +0 -0
  235. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/__init__.py +0 -0
  236. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
  237. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/ai_chat_service.py +0 -0
  238. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/analytics_service.py +0 -0
  239. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/app_setting_service.py +0 -0
  240. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/backup_service.py +0 -0
  241. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/command_parser.py +0 -0
  242. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/datazione_service.py +0 -0
  243. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/export_import_service.py +0 -0
  244. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
  245. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/import_export_service.py +0 -0
  246. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/inventario_service.py +0 -0
  247. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/mcp_executor.py +0 -0
  248. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/media_service.py +0 -0
  249. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
  250. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/pottery_dto.py +0 -0
  251. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
  252. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/pottery_service.py +0 -0
  253. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
  254. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/search_service.py +0 -0
  255. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/site_service.py +0 -0
  256. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/thesaurus_service.py +0 -0
  257. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/tma_service.py +0 -0
  258. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/us_service.py +0 -0
  259. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/services/user_service.py +0 -0
  260. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/stratigraph/__init__.py +0 -0
  261. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
  262. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
  263. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
  264. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
  265. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
  266. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
  267. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
  268. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
  269. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
  270. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
  271. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
  272. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
  273. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/translations/messages.pot +0 -0
  274. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/utils/__init__.py +0 -0
  275. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/utils/auth.py +0 -0
  276. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/utils/exceptions.py +0 -0
  277. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/utils/relationship_validator.py +0 -0
  278. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
  279. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
  280. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/utils/validators.py +0 -0
  281. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/vocab/__init__.py +0 -0
  282. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/vocab/exceptions.py +0 -0
  283. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/vocab/i18n.py +0 -0
  284. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/vocab/loader.py +0 -0
  285. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/vocab/provider.py +0 -0
  286. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
  287. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/vocab/translations/vocab_it.json +0 -0
  288. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/vocab/types.py +0 -0
  289. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/app.py +0 -0
  290. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
  291. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
  292. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
  293. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
  294. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
  295. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
  296. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
  297. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
  298. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
  299. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
  300. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
  301. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
  302. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
  303. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
  304. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
  305. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
  306. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +0 -0
  307. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
  308. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
  309. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
  310. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
  311. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
  312. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
  313. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
  314. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
  315. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
  316. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
  317. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
  318. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
  319. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
  320. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
  321. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
  322. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
  323. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
  324. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
  325. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
  326. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
  327. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/base.html +0 -0
  328. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
  329. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
  330. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
  331. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
  332. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
  333. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
  334. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
  335. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
  336. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
  337. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
  338. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
  339. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
  340. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
  341. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
  342. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
  343. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
  344. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
  345. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
  346. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
  347. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
  348. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
  349. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
  350. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
  351. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
  352. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
  353. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
  354. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
  355. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
  356. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
  357. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
  358. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
  359. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
  360. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
  361. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
  362. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
  363. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
  364. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
  365. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
  366. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
  367. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
  368. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
  369. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
  370. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
  371. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
  372. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
  373. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
  374. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
  375. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
  376. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
  377. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
  378. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  379. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
  380. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
  381. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
  382. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
  383. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  384. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
  385. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
  386. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
  387. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini.egg-info/requires.txt +0 -0
  388. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/pyarchinit_mini.egg-info/top_level.txt +0 -0
  389. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/requirements.txt +0 -0
  390. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/setup.cfg +0 -0
  391. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/setup.py +0 -0
  392. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/__init__.py +0 -0
  393. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/conftest.py +0 -0
  394. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/e2e/__init__.py +0 -0
  395. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/e2e/test_web_vocab_full_flow.py +0 -0
  396. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/fixtures/_generate_baseline_graphml.py +0 -0
  397. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/fixtures/_generate_synthetic_db.py +0 -0
  398. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/fixtures/build_legacy_with_pottery.py +0 -0
  399. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/__init__.py +0 -0
  400. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_admin_ai_settings_routes.py +0 -0
  401. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_admin_backup_routes.py +0 -0
  402. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_auto_regen_on_save.py +0 -0
  403. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_full_sync_flow.py +0 -0
  404. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_graph_import_flow.py +0 -0
  405. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_graph_routes.py +0 -0
  406. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
  407. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
  408. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_harris_swimlane_routes_create_row.py +0 -0
  409. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
  410. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
  411. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_migrate_vocab_cli.py +0 -0
  412. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_paradata_routes_authors.py +0 -0
  413. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_paradata_routes_other_types.py +0 -0
  414. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_paradata_ui.py +0 -0
  415. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_pottery_completion.py +0 -0
  416. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
  417. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
  418. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_pottery_routes.py +0 -0
  419. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_spec2_coverage_gaps.py +0 -0
  420. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_vocab_routes.py +0 -0
  421. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_yed_export_route.py +0 -0
  422. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/integration/test_yed_writer_parity.py +0 -0
  423. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/__init__.py +0 -0
  424. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_app_setting_model.py +0 -0
  425. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_app_setting_service.py +0 -0
  426. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_auto_regen.py +0 -0
  427. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_backup_service.py +0 -0
  428. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_bundle.py +0 -0
  429. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_concurrency_columns.py +0 -0
  430. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_concurrency_manager.py +0 -0
  431. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_connectivity_monitor.py +0 -0
  432. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_database_utils.py +0 -0
  433. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_deprecated_writers_shim.py +0 -0
  434. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_em_palette_vocab_backed.py +0 -0
  435. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_graphml_io_reader.py +0 -0
  436. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_graphml_io_writer.py +0 -0
  437. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_graphproj_edge_registry.py +0 -0
  438. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_graphproj_exceptions.py +0 -0
  439. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_graphproj_filesystem.py +0 -0
  440. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
  441. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
  442. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_graphproj_projector.py +0 -0
  443. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
  444. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
  445. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_harris_swimlane_period_sync.py +0 -0
  446. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_harris_swimlane_row_provider.py +0 -0
  447. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_harris_swimlane_state_load.py +0 -0
  448. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_harris_swimlane_state_save.py +0 -0
  449. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_ingest_plan.py +0 -0
  450. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_inventario_schema.py +0 -0
  451. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_migrations_backup.py +0 -0
  452. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_migrations_idempotent.py +0 -0
  453. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_optimistic_locking.py +0 -0
  454. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_paradata_store_authors.py +0 -0
  455. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_paradata_store_basic.py +0 -0
  456. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_paradata_store_other_types.py +0 -0
  457. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_pottery_dto.py +0 -0
  458. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_pottery_model.py +0 -0
  459. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_pottery_service.py +0 -0
  460. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
  461. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_site_service.py +0 -0
  462. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_sync_api.py +0 -0
  463. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_sync_cli.py +0 -0
  464. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_sync_orchestrator.py +0 -0
  465. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_sync_queue.py +0 -0
  466. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_sync_state_machine.py +0 -0
  467. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
  468. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_us_schema.py +0 -0
  469. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_uuid_manager.py +0 -0
  470. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
  471. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_vocab_exceptions.py +0 -0
  472. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_vocab_i18n.py +0 -0
  473. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_vocab_loader.py +0 -0
  474. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_vocab_provider.py +0 -0
  475. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_vocab_types.py +0 -0
  476. {pyarchinit_mini-2.4.4 → pyarchinit_mini-2.4.6}/tests/unit/test_yed_writer.py +0 -0
@@ -1,3 +1,72 @@
1
+ ## [2.4.6] - 2026-05-18
2
+
3
+ ### Fixed (IT)
4
+ - Editor swimlane su DB SQLite locali tornava HTTP 500 "no such column:
5
+ periodo" perché `period_table` era stata creata dal modello SQLAlchemy
6
+ con lo schema legacy `period_name/phase_name/start_date/end_date`.
7
+ Nuova migration `_2026_05_period_table_schema` aggiunge le colonne
8
+ reali pyarchinit (`periodo`, `fase`, `datazione`, `descrizione`,
9
+ `sito`) e backfilla `periodo ← period_name`, `fase ← phase_name`.
10
+ Auto-applicata dal `migrate_all_tables()`.
11
+ - Modello SQLAlchemy `Period` aggiornato per dichiarare entrambi i set
12
+ di colonne (legacy + reale), così `Base.metadata.create_all()` su DB
13
+ nuovi parte già con lo schema corretto.
14
+
15
+ ### Fixed (EN)
16
+ - Swimlane editor on local SQLite DBs returned HTTP 500 "no such column:
17
+ periodo" because `period_table` was created with the legacy schema
18
+ (`period_name/phase_name/...`). New `_2026_05_period_table_schema`
19
+ migration adds the real pyarchinit columns (`periodo`, `fase`,
20
+ `datazione`, `descrizione`, `sito`) and backfills them from legacy
21
+ ones. Auto-applied by `migrate_all_tables()`.
22
+ - SQLAlchemy `Period` model now declares both legacy and real column
23
+ sets, so freshly-created DBs start with the right shape.
24
+
25
+ ## [2.4.5] - 2026-05-18
26
+
27
+ ### Changed (IT)
28
+ - `/api/node-types` ora alimenta la sidebar del Harris Creator **direttamente
29
+ da VocabProvider** (s3dgraphy JSON catalogues), abbandonando il vecchio
30
+ YAML legacy. Conseguenza: i tipi USVs / USVn / USN / RSF / serSU /
31
+ serUSD / serUSVn / serUSVs / TSU / UL / BR / SE / USD compaiono
32
+ finalmente in sidebar. Aggiornare s3dgraphy aggiungerà automaticamente
33
+ nuovi tipi all'editor.
34
+ - Colore e forma di ogni voce vengono presi da `visual_style.fill_color`
35
+ e `visual_style.shape` di s3dgraphy (es. SF / VSF / RSF = octagon,
36
+ USVs = parallelogram, USVn = hexagon, USD = roundrectangle, BR = diamond).
37
+
38
+ ### Fixed (IT)
39
+ - Pannello Properties ora si popola correttamente al click di un nodo US:
40
+ `SwimlaneState.load` aggiunge `us_number`, `description` (da
41
+ `d_stratigrafica`), `area`, `datazione`, `file_path` ai `data` Cytoscape
42
+ che il pannello legge.
43
+ - Ai US viene allegato anche `shape` / `border_color` / `border_style` da
44
+ VocabProvider — i nodi rendono con la simbologia EM appropriata, non più
45
+ rettangoli grigi.
46
+
47
+ ### Added (IT)
48
+ - Toggle Hide/Show del pannello Properties (icona angle-double in alto a
49
+ destra del pannello): collassa a 36px e la scelta viene persistita in
50
+ `localStorage`. Cytoscape viene `fit()` dopo l'animazione per riempire
51
+ lo spazio guadagnato.
52
+
53
+ ### Changed (EN)
54
+ - `/api/node-types` is now sourced from VocabProvider (s3dgraphy JSON
55
+ catalogues). Bumping s3dgraphy is enough to surface new types in the
56
+ sidebar.
57
+ - US nodes pick `shape`/`fill_color`/`border_color`/`border_style` from
58
+ the s3dgraphy `visual_style` block so EM symbology renders correctly.
59
+
60
+ ### Fixed (EN)
61
+ - Properties panel populates again on node click — `SwimlaneState.load`
62
+ now attaches `us_number` / `description` / `area` / `datazione` /
63
+ `file_path` to the Cytoscape `data` payload.
64
+
65
+ ### Added (EN)
66
+ - Properties panel Hide/Show toggle (collapses to a thin strip on the
67
+ right). Choice persisted in `localStorage`; Cytoscape re-fits the
68
+ viewport after the transition.
69
+
1
70
  ## [2.4.4] - 2026-05-18
2
71
 
3
72
  ### Fixed (IT)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.4
3
+ Version: 2.4.6
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.4"
26
+ __version__ = "2.4.6"
27
27
  __author__ = "PyArchInit Team"
28
28
  __email__ = "enzo.ccc@gmail.com"
29
29
 
@@ -0,0 +1,146 @@
1
+ """Schema migration (2026-05-18):
2
+ Add the pyarchinit-compatible columns to ``period_table``.
3
+
4
+ The SQLAlchemy ``Period`` model historically declared (``period_name``,
5
+ ``phase_name``, ``start_date``, ``end_date``, ``description``, ``chronology``).
6
+ The real pyarchinit schema (used by QGIS plugin and PG ``pyarchinit_v2``)
7
+ is (``periodo``, ``fase``, ``datazione``, ``descrizione``, ``sito``). Spec
8
+ 3-bis queries the latter, so existing SQLite/PostgreSQL DBs created via
9
+ ``Base.metadata.create_all()`` need the new columns aliased over.
10
+
11
+ Idempotent: re-running on a DB that already has the new columns is a
12
+ no-op. Backfills ``periodo`` from ``period_name`` / ``fase`` from
13
+ ``phase_name`` when both exist.
14
+
15
+ Supports SQLite and PostgreSQL backends.
16
+ """
17
+ import sqlite3
18
+ from dataclasses import dataclass, field
19
+ from urllib.parse import urlparse
20
+
21
+
22
+ @dataclass
23
+ class MigrationReport:
24
+ script: str
25
+ db: str
26
+ tables_changed: list = field(default_factory=list)
27
+ tables_skipped: list = field(default_factory=list)
28
+ dry_run: bool = False
29
+ status: str = "ok"
30
+
31
+
32
+ TABLE = "period_table"
33
+ NEW_COLUMNS = [
34
+ ("periodo", "TEXT"),
35
+ ("fase", "TEXT"),
36
+ ("datazione", "TEXT"),
37
+ ("descrizione", "TEXT"),
38
+ ("sito", "TEXT"),
39
+ ]
40
+
41
+
42
+ def _table_exists_sqlite(conn, table):
43
+ return conn.execute(
44
+ "SELECT name FROM sqlite_master WHERE type='table' AND name=?", (table,)
45
+ ).fetchone() is not None
46
+
47
+
48
+ def _has_column_sqlite(conn, table, col):
49
+ rows = conn.execute(f"PRAGMA table_info({table})").fetchall()
50
+ return any(r[1] == col for r in rows)
51
+
52
+
53
+ def _run_sqlite(path: str, dry_run: bool, report: MigrationReport) -> None:
54
+ conn = sqlite3.connect(path)
55
+ try:
56
+ if not _table_exists_sqlite(conn, TABLE):
57
+ report.tables_skipped.append(f"{TABLE} (missing)")
58
+ return
59
+ existing = {r[1] for r in conn.execute(f"PRAGMA table_info({TABLE})").fetchall()}
60
+ added = []
61
+ for col, ctype in NEW_COLUMNS:
62
+ if col in existing:
63
+ continue
64
+ if not dry_run:
65
+ conn.execute(f"ALTER TABLE {TABLE} ADD COLUMN {col} {ctype}")
66
+ added.append(col)
67
+ # Backfill: periodo ← period_name, fase ← phase_name (only if legacy cols exist)
68
+ if not dry_run and added:
69
+ if "period_name" in existing and "periodo" in added:
70
+ conn.execute(
71
+ f"UPDATE {TABLE} SET periodo = period_name WHERE periodo IS NULL"
72
+ )
73
+ if "phase_name" in existing and "fase" in added:
74
+ conn.execute(
75
+ f"UPDATE {TABLE} SET fase = phase_name WHERE fase IS NULL"
76
+ )
77
+ conn.commit()
78
+ if added:
79
+ report.tables_changed.append(f"{TABLE} (+{','.join(added)})")
80
+ else:
81
+ report.tables_skipped.append(f"{TABLE} (already aligned)")
82
+ finally:
83
+ conn.close()
84
+
85
+
86
+ def _run_postgresql(url: str, dry_run: bool, report: MigrationReport) -> None:
87
+ import psycopg2
88
+ p = urlparse(url)
89
+ conn = psycopg2.connect(
90
+ host=p.hostname, port=p.port or 5432,
91
+ user=p.username, password=p.password,
92
+ dbname=p.path.lstrip("/"),
93
+ )
94
+ try:
95
+ cur = conn.cursor()
96
+ cur.execute(
97
+ "SELECT to_regclass(%s)", (f"public.{TABLE}",)
98
+ )
99
+ if cur.fetchone()[0] is None:
100
+ report.tables_skipped.append(f"{TABLE} (missing)")
101
+ return
102
+ cur.execute(
103
+ "SELECT column_name FROM information_schema.columns "
104
+ "WHERE table_schema='public' AND table_name=%s", (TABLE,)
105
+ )
106
+ existing = {r[0] for r in cur.fetchall()}
107
+ added = []
108
+ for col, ctype in NEW_COLUMNS:
109
+ if col in existing:
110
+ continue
111
+ if not dry_run:
112
+ cur.execute(f"ALTER TABLE {TABLE} ADD COLUMN {col} {ctype}")
113
+ added.append(col)
114
+ if not dry_run and added:
115
+ if "period_name" in existing and "periodo" in added:
116
+ cur.execute(
117
+ f"UPDATE {TABLE} SET periodo = period_name WHERE periodo IS NULL"
118
+ )
119
+ if "phase_name" in existing and "fase" in added:
120
+ cur.execute(
121
+ f"UPDATE {TABLE} SET fase = phase_name WHERE fase IS NULL"
122
+ )
123
+ conn.commit()
124
+ if added:
125
+ report.tables_changed.append(f"{TABLE} (+{','.join(added)})")
126
+ else:
127
+ report.tables_skipped.append(f"{TABLE} (already aligned)")
128
+ finally:
129
+ conn.close()
130
+
131
+
132
+ def run(url: str, dry_run: bool = False) -> MigrationReport:
133
+ report = MigrationReport(
134
+ script=__name__, db=url, dry_run=dry_run,
135
+ )
136
+ try:
137
+ if url.startswith("sqlite"):
138
+ path = url.replace("sqlite:///", "", 1)
139
+ _run_sqlite(path, dry_run, report)
140
+ elif url.startswith("postgresql") or url.startswith("postgres"):
141
+ _run_postgresql(url, dry_run, report)
142
+ else:
143
+ report.status = "unsupported"
144
+ except Exception as e:
145
+ report.status = f"error: {e}"
146
+ return report
@@ -830,6 +830,7 @@ class DatabaseMigrations:
830
830
  f"{pkg}._2026_05_node_uuid_schema",
831
831
  f"{pkg}._2026_05_node_uuid_backfill",
832
832
  f"{pkg}._2026_05_vocab_alignment",
833
+ f"{pkg}._2026_05_period_table_schema",
833
834
  ]
834
835
  url = str(self.connection.engine.url)
835
836
  applied = 0
@@ -52,31 +52,64 @@ class SwimlaneState:
52
52
  provider = RowProvider(session, site)
53
53
  rows = provider.list_rows()
54
54
 
55
- # Resolve unit_type → fill_color via VocabProvider once per request so
56
- # the editor's `'background-color': data(color)` style renders properly.
55
+ # Resolve unit_type → visual_style via VocabProvider once per request,
56
+ # cached. The editor's Cytoscape style uses `data(color)` and
57
+ # `data(shape)`; if either is missing the node renders grey rectangles
58
+ # and Cytoscape logs a warning per node.
59
+ _SHAPE_TO_CYTOSCAPE = {
60
+ "rounded_rectangle": "roundrectangle",
61
+ "parallelogram": "rhomboid",
62
+ "trapezium": "triangle",
63
+ "trapezium2": "vee",
64
+ # Names that are already valid Cytoscape shapes pass through.
65
+ }
57
66
  try:
58
67
  from pyarchinit_mini.vocab.provider import VocabProvider
59
68
  _vocab = VocabProvider.instance()
60
- _color_cache: dict[str, str] = {}
69
+ _style_cache: dict[str, dict] = {}
61
70
 
62
- def _color_for(ut: str) -> str:
63
- if ut in _color_cache:
64
- return _color_cache[ut]
71
+ def _style_for(ut: str) -> dict:
72
+ if ut in _style_cache:
73
+ return _style_cache[ut]
65
74
  try:
66
- style = _vocab.get_visual_style(ut)
67
- c = getattr(style, "fill_color", None) or "#CCCCCC"
75
+ vs = _vocab.get_visual_style(ut)
76
+ raw_shape = (
77
+ vs.get("shape") if isinstance(vs, dict)
78
+ else getattr(vs, "shape", "rectangle")
79
+ )
80
+ fill = (
81
+ vs.get("fill_color") if isinstance(vs, dict)
82
+ else getattr(vs, "fill_color", None)
83
+ ) or "#CCCCCC"
84
+ border = (
85
+ vs.get("border_color") if isinstance(vs, dict)
86
+ else getattr(vs, "border_color", None)
87
+ ) or "#333333"
88
+ border_style = (
89
+ vs.get("border_style") if isinstance(vs, dict)
90
+ else getattr(vs, "border_style", None)
91
+ ) or "solid"
92
+ out = {
93
+ "color": fill,
94
+ "shape": _SHAPE_TO_CYTOSCAPE.get(raw_shape, raw_shape),
95
+ "border_color": border,
96
+ "border_style": border_style,
97
+ }
68
98
  except Exception:
69
- c = "#CCCCCC"
70
- _color_cache[ut] = c
71
- return c
99
+ out = {"color": "#CCCCCC", "shape": "rectangle",
100
+ "border_color": "#333333", "border_style": "solid"}
101
+ _style_cache[ut] = out
102
+ return out
72
103
  except Exception:
73
- def _color_for(ut: str) -> str:
74
- return "#CCCCCC"
104
+ def _style_for(ut: str) -> dict:
105
+ return {"color": "#CCCCCC", "shape": "rectangle",
106
+ "border_color": "#333333", "border_style": "solid"}
75
107
 
76
108
  # Load US records for site
77
109
  us_rows = session.execute(text(
78
110
  "SELECT id_us, sito, area, us, unita_tipo, rapporti, node_uuid, "
79
- "periodo_iniziale, fase_iniziale "
111
+ "periodo_iniziale, fase_iniziale, "
112
+ "d_stratigrafica, datazione, file_path "
80
113
  "FROM us_table WHERE sito = :sito ORDER BY id_us"
81
114
  ), {"sito": site}).fetchall()
82
115
 
@@ -104,17 +137,30 @@ class SwimlaneState:
104
137
 
105
138
  pos = initial_node_position(_RowLike(), idx)
106
139
 
140
+ style = _style_for(unita_tipo)
107
141
  nodes.append(CytoscapeElement(
108
142
  data={
109
143
  "id": node_id,
110
144
  "label": f"{unita_tipo}{us_num}",
111
145
  "parent": parent_row_id,
112
146
  "unit_type": unita_tipo,
113
- "color": _color_for(unita_tipo),
114
- "period": periodo,
115
- "phase": fase,
147
+ # Visual fields — read by harris_creator_editor.js Cytoscape style
148
+ "color": style["color"],
149
+ "shape": style["shape"],
150
+ "border_color": style["border_color"],
151
+ "border_style": style["border_style"],
152
+ # Identity + provenance
116
153
  "us": us_num,
154
+ "us_number": us_num, # Properties panel reads this name
117
155
  "node_uuid": r[6],
156
+ # Temporal
157
+ "period": periodo,
158
+ "phase": fase,
159
+ # Descriptive fields the Properties panel populates
160
+ "description": r[9] or "", # d_stratigrafica
161
+ "area": (r[2] or "") if r[2] is not None else "",
162
+ "datazione": r[10] or "",
163
+ "file_path": r[11] or "",
118
164
  },
119
165
  position=pos,
120
166
  ))
@@ -44,20 +44,38 @@ class USRelationships(BaseModel):
44
44
 
45
45
  class Period(BaseModel):
46
46
  """
47
- Archaeological periods and phases
47
+ Archaeological periods and phases.
48
+
49
+ Carries BOTH the legacy field set (``period_name``/``phase_name``/
50
+ ``start_date``/``end_date``/``description``/``chronology``) and the
51
+ pyarchinit-real field set (``periodo``/``fase``/``datazione``/
52
+ ``descrizione``/``sito``) so the same model works whether the database
53
+ was created by pyarchinit-mini's create_all (legacy names) or by
54
+ pyarchinit QGIS (real names). The Spec-3-bis swimlane editor queries
55
+ the real names; the ``_2026_05_period_table_schema`` migration adds
56
+ those columns to existing legacy-schema DBs and backfills them.
48
57
  """
49
58
  __tablename__ = 'period_table'
50
-
59
+
51
60
  id_period = Column(Integer, primary_key=True, autoincrement=True)
52
- period_name = Column(String(200), nullable=False)
61
+ # Legacy column set (kept for backward compat with existing pyarchinit-mini DBs)
62
+ period_name = Column(String(200))
53
63
  phase_name = Column(String(200))
54
- start_date = Column(Integer) # Anno inizio
55
- end_date = Column(Integer) # Anno fine
64
+ start_date = Column(Integer)
65
+ end_date = Column(Integer)
56
66
  description = Column(Text)
57
- chronology = Column(String(100)) # Sistema cronologico
58
-
67
+ chronology = Column(String(100))
68
+ # Real pyarchinit column set (Spec 3-bis swimlane editor reads these)
69
+ sito = Column(String(350))
70
+ periodo = Column(String(200))
71
+ fase = Column(String(200))
72
+ datazione = Column(Text)
73
+ descrizione = Column(Text)
74
+
59
75
  def __repr__(self):
60
- return f"<Period('{self.period_name}', {self.start_date}-{self.end_date})>"
76
+ # Prefer real-schema field when populated, fall back to legacy.
77
+ label = self.periodo or self.period_name or "?"
78
+ return f"<Period('{label}', sito={self.sito})>"
61
79
 
62
80
  class Periodizzazione(BaseModel):
63
81
  """
@@ -481,17 +481,20 @@ def export_matrix(format):
481
481
 
482
482
  @harris_creator_bp.route('/api/node-types')
483
483
  def get_node_types():
484
+ """List Extended Matrix node types from VocabProvider (s3dgraphy JSON
485
+ catalogues). The previous implementation read a legacy YAML config and
486
+ so missed every node type added in s3dgraphy >= 0.1.42 (USVs/USVn/USN/
487
+ RSF/serSU/serUSD/serUSVn/serUSVs/TSU/UL/BR/SE...). With this refactor,
488
+ upgrading s3dgraphy is enough to make new types appear in the editor.
484
489
  """
485
- Get list of Extended Matrix node types with descriptions
486
- Now dynamically loaded from YAML configuration
487
- """
488
- # Map GraphML/yEd shapes to Cytoscape.js compatible shapes
490
+ # Map s3dgraphy yEd-style shapes to Cytoscape.js shapes.
489
491
  SHAPE_MAP = {
490
- 'note': 'roundrectangle', # Document shape -> rounded rectangle
491
- 'trapezium': 'triangle', # Trapezoid -> triangle
492
- 'trapezium2': 'vee', # Inverted trapezoid -> vee
493
- 'parallelogram': 'rhomboid', # Parallelogram -> rhomboid
494
- # Valid Cytoscape shapes pass through unchanged
492
+ 'note': 'roundrectangle',
493
+ 'trapezium': 'triangle',
494
+ 'trapezium2': 'vee',
495
+ 'parallelogram': 'rhomboid',
496
+ 'rounded_rectangle': 'roundrectangle',
497
+ # Cytoscape-native shapes pass through.
495
498
  'rectangle': 'rectangle',
496
499
  'roundrectangle': 'roundrectangle',
497
500
  'ellipse': 'ellipse',
@@ -503,49 +506,36 @@ def get_node_types():
503
506
  'star': 'star',
504
507
  'diamond': 'diamond',
505
508
  'vee': 'vee',
506
- 'rhomboid': 'rhomboid'
509
+ 'rhomboid': 'rhomboid',
507
510
  }
508
511
 
509
512
  try:
510
- config_manager = get_config_manager()
511
- all_types = config_manager.get_all_node_types()
512
-
513
- # Default colors for visual editor (can be customized in config)
514
- default_colors = {
515
- 'US': '#90CAF9', 'USM': '#FFAB91', 'USVA': '#CE93D8',
516
- 'USVB': '#E1BEE7', 'USVC': '#F48FB1', 'TU': '#80CBC4',
517
- 'USD': '#A5D6A7', 'SF': '#FFD54F', 'VSF': '#FFE082',
518
- 'CON': '#BCAAA4', 'DOC': '#B0BEC5', 'Extractor': '#EF9A9A',
519
- 'Combinar': '#9FA8DA', 'property': '#CFD8DC'
520
- }
513
+ from pyarchinit_mini.vocab.provider import VocabProvider
514
+ provider = VocabProvider.instance()
515
+ unit_types = provider.get_unit_types()
521
516
 
522
517
  node_types = []
523
- for tipo_id, config in all_types.items():
524
- visual = config.get('visual', {})
525
-
526
- # Build label
527
- label = f"{tipo_id} - {config.get('name', tipo_id)}"
528
- if config.get('description'):
529
- label += f" ({config.get('description')})"
530
-
531
- # Get shape from config and map to Cytoscape-compatible shape
532
- config_shape = visual.get('shape', 'rectangle')
533
- cytoscape_shape = SHAPE_MAP.get(config_shape, 'rectangle')
518
+ for ut in unit_types:
519
+ style = getattr(ut, "visual_style", None) or {}
520
+ shape = style.get("shape", "rectangle") if isinstance(style, dict) else getattr(style, "shape", "rectangle")
521
+ fill = style.get("fill_color", "#CCCCCC") if isinstance(style, dict) else getattr(style, "fill_color", "#CCCCCC")
522
+ description = getattr(ut, "description", "") or ""
523
+ label = ut.abbreviation
524
+ if description:
525
+ label = f"{ut.abbreviation} - {description[:80]}"
534
526
 
535
527
  node_types.append({
536
- 'value': tipo_id,
537
- 'label': label,
538
- 'color': default_colors.get(tipo_id, '#B0BEC5'), # Use default or gray
539
- 'shape': cytoscape_shape,
540
- 'custom': config.get('custom', False)
528
+ "value": ut.abbreviation,
529
+ "label": label,
530
+ "color": fill,
531
+ "shape": SHAPE_MAP.get(shape, "rectangle"),
532
+ "family": getattr(ut, "family", None),
541
533
  })
542
-
543
534
  return jsonify(node_types)
544
-
545
535
  except Exception as e:
546
- # Fallback to minimal list if config fails
547
536
  return jsonify([
548
- {'value': 'US', 'label': 'US - Standard Stratigraphic Unit', 'color': '#90CAF9', 'shape': 'rectangle'}
537
+ {"value": "US", "label": "US - Standard Stratigraphic Unit",
538
+ "color": "#F0F0F0", "shape": "rectangle"}
549
539
  ])
550
540
 
551
541
 
@@ -63,6 +63,26 @@
63
63
  padding: 15px;
64
64
  width: 300px;
65
65
  overflow-y: auto;
66
+ transition: width 0.2s ease, padding 0.2s ease;
67
+ }
68
+ #properties-panel.collapsed {
69
+ width: 36px;
70
+ padding: 6px 4px;
71
+ overflow: hidden;
72
+ }
73
+ #properties-panel.collapsed > *:not(.props-toggle-bar) {
74
+ display: none !important;
75
+ }
76
+ .props-toggle-bar {
77
+ display: flex;
78
+ justify-content: flex-end;
79
+ margin-bottom: 8px;
80
+ }
81
+ #properties-panel.collapsed .props-toggle-bar {
82
+ justify-content: center;
83
+ }
84
+ #properties-panel.collapsed .props-toggle-bar button .toggle-label {
85
+ display: none;
66
86
  }
67
87
 
68
88
  .property-field {
@@ -280,6 +300,12 @@
280
300
 
281
301
  <!-- Right Properties Panel -->
282
302
  <div id="properties-panel">
303
+ <div class="props-toggle-bar">
304
+ <button type="button" class="btn btn-sm btn-outline-secondary" onclick="togglePropertiesPanel()" title="Hide/show Properties panel">
305
+ <i class="fas fa-angle-double-right"></i>
306
+ <span class="toggle-label">Hide</span>
307
+ </button>
308
+ </div>
283
309
  <h6 class="mb-3"><i class="fas fa-cog"></i> Properties</h6>
284
310
 
285
311
  <div id="no-selection" class="text-center text-muted py-5">
@@ -442,6 +468,31 @@
442
468
  // work even if loadSwimlaneState() never succeeds (e.g. DB migration pending).
443
469
  window._currentSite = (document.getElementById('site-name') || {}).value || null;
444
470
 
471
+ // Properties panel collapse/expand (persists choice in localStorage).
472
+ function togglePropertiesPanel() {
473
+ const panel = document.getElementById('properties-panel');
474
+ if (!panel) return;
475
+ const collapsed = panel.classList.toggle('collapsed');
476
+ try { localStorage.setItem('harris_props_collapsed', collapsed ? '1' : '0'); } catch (e) {}
477
+ const icon = panel.querySelector('.props-toggle-bar button i');
478
+ if (icon) {
479
+ icon.classList.toggle('fa-angle-double-right', !collapsed);
480
+ icon.classList.toggle('fa-angle-double-left', collapsed);
481
+ }
482
+ const lbl = panel.querySelector('.props-toggle-bar .toggle-label');
483
+ if (lbl) lbl.textContent = collapsed ? 'Show' : 'Hide';
484
+ if (typeof cy !== 'undefined') {
485
+ setTimeout(() => { try { cy.resize(); cy.fit(undefined, 30); } catch(e){} }, 220);
486
+ }
487
+ }
488
+ window.addEventListener('DOMContentLoaded', () => {
489
+ try {
490
+ if (localStorage.getItem('harris_props_collapsed') === '1') {
491
+ togglePropertiesPanel();
492
+ }
493
+ } catch (e) {}
494
+ });
495
+
445
496
  async function loadSwimlaneState(site) {
446
497
  try {
447
498
  const r = await fetch(`/harris-creator/api/load/${encodeURIComponent(site)}`);
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.4
3
+ Version: 2.4.6
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
@@ -65,6 +65,7 @@ pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py
65
65
  pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py
66
66
  pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py
67
67
  pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py
68
+ pyarchinit_mini/database/migrations/_2026_05_period_table_schema.py
68
69
  pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py
69
70
  pyarchinit_mini/database/migrations/__init__.py
70
71
  pyarchinit_mini/database/migrations/backup.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyarchinit-mini"
7
- version = "2.4.4"
7
+ version = "2.4.6"
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"}
@@ -34,6 +34,7 @@ CREATE TABLE us_table (
34
34
  id_us INTEGER PRIMARY KEY AUTOINCREMENT,
35
35
  sito TEXT, area TEXT, us INTEGER, unita_tipo TEXT,
36
36
  d_stratigrafica TEXT, d_interpretativa TEXT,
37
+ datazione TEXT, file_path TEXT,
37
38
  rapporti TEXT, node_uuid TEXT,
38
39
  periodo_iniziale TEXT, fase_iniziale TEXT,
39
40
  periodo_finale TEXT, fase_finale TEXT
@@ -62,11 +63,12 @@ for i in range(30):
62
63
  us_records.append(
63
64
  ("Volterra", "A", 1000 + i, "US",
64
65
  f"strat {i}", f"interp {i}",
66
+ f"100..200", None,
65
67
  rapporti, f"uuid-{i:03d}",
66
68
  period, phase, None, None)
67
69
  )
68
70
  c.executemany(
69
- "INSERT INTO us_table (sito, area, us, unita_tipo, d_stratigrafica, d_interpretativa, rapporti, node_uuid, periodo_iniziale, fase_iniziale, periodo_finale, fase_finale) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)",
71
+ "INSERT INTO us_table (sito, area, us, unita_tipo, d_stratigrafica, d_interpretativa, datazione, file_path, rapporti, node_uuid, periodo_iniziale, fase_iniziale, periodo_finale, fase_finale) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
70
72
  us_records,
71
73
  )
72
74
 
@@ -32,7 +32,8 @@ def client_no_session(tmp_path, monkeypatch):
32
32
  );
33
33
  CREATE TABLE us_table (
34
34
  id_us INTEGER PRIMARY KEY,
35
- sito TEXT, us INTEGER, unita_tipo TEXT,
35
+ sito TEXT, area TEXT, us INTEGER, unita_tipo TEXT,
36
+ d_stratigrafica TEXT, datazione TEXT, file_path TEXT,
36
37
  rapporti TEXT, node_uuid TEXT,
37
38
  periodo_iniziale TEXT, fase_iniziale TEXT
38
39
  );