s3dgraphy 1.6.0.dev54__tar.gz → 1.6.0.dev55__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.
- {s3dgraphy-1.6.0.dev54/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev55}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/api.py +7 -3
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/room_import/__init__.py +14 -4
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/room_import/engine.py +275 -55
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/room_import/node.py +11 -4
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_room_import.py +125 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_room_import_inventory.py +8 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/README.md +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/em.ttl +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/container.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/proxy.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/tileset.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/version_gltf.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/version_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/version_scene.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/2D/version_tiles.svg +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/JSON_config/version_for_cases.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/__main__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/ai_validation.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/annotation/reading.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/container.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/contract/connector.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/contract/consumer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/crdt.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/dtc/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/dtc/capture.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/dtc/devices.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/geometry/aton.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/geometry/gltf.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/geometry/reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/geometry/store_backed.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/geometry/wkt.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/graph.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/hdto.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/base_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/csv_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/import_graphml.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/sheet_header.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/labels.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/language.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/links.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/authoring.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/merge/graph_merger.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/group_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/nodes/translation_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/ownership.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/paradata_view.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/photogrammetry/delta.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/project_tree.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/property_source.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/publication.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/addresses.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/alignment.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/files.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/locate.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/moved.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/object_store.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/tiles3tz.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/resources/versions.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/rights.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/room_import/access.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/room_import/errors.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/room_import/inventory.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/room_import/pack.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/room_import/trust.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/spatiotemporal.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/stamp/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/stamp/absorb.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/stamp/emit.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/stamp/hints.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/stamp/identity.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/study.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/tools/consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/tools/deliverable_report.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/tools/node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/translation.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy/zero_hour.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy.egg-info/SOURCES.txt +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_add_resource.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_ai_validation_nodes.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_alternative_labels.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_api_surface.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_asset_dtc_protocol.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_asset_versions.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_aton_shapes.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_attach_only.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_blend_locator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_bucket_alignment.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_capture_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_capture_rdf_class.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_chronology_on_request.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_coating_unit.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_container_layouts.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_containment_tpq.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_contract_consumer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_cycle_message_is_cheap.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_datamodel_fingerprint.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dev29_em_sourcelist.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dev29_file_set_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dev29_graphml_without_a_database.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dev29_image_set_texturing.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dev29_not_georeferenced.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dev29_one_act_n_outputs.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dev29_ttl_round_trip.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dev30_decisions.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_devices.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dove_sta_il_testo.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dtc_neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_edge_outside_graph.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_edge_ui_phrases.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_emjson_no_drawing_keys.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_extracted_from_unit.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_gltf_stitch.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_glyph_paths.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_graph_header_code.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_graph_helpers_indexed.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_graph_indices_alive.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_graph_indices_edges.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_hdto_study.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_i_generi_dei_passi.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_il_modo_d_accesso.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_il_modo_dal_relay.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_il_proprietario_si_legge.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_il_riallineamento.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_importer_edge_hygiene.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_issue27_small_points.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_la_lingua_alla_nascita.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_la_lingua_dei_dati.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_la_lingua_nell_op.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_la_riga_d_intestazione.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_le_traduzioni.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_lod_levels.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_mapping_authoring.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_mapping_csv_and_relations.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_masonry_unit.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_mentions.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_site_place.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_narrative_unvalidated_export.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_node_type_map_integrity.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_one_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_one_spelling_writers.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_op_vocabulary.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_photogrammetry_delta.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_physical_relation_spellings.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_piu_indirizzi.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_promote_keeps_proxy_type.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_promotion.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_property_as_source.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_property_owners.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_proxy_resource.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_proxy_retype.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_psx_locator.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_qualia_dai_d7_d8.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_rdf_embedding.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_rdf_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_reading_coords.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_reading_migration.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_reading_place.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_reading_rdf.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_release.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_resource_files_implicit.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_resource_representations.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_resource_revision.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_resource_tier.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_rm_container_node_group.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_room_import_access.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_room_import_trust.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_semantic_purity.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_shipped_mappings.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_spatiotemporal_entities.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_stable_study_code.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_stamp_hints.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_stamp_title_description.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_tileset_resource.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_unit_definition.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_verifica_provenance.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_version_for.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_visual_assets.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_xlsx_importer_graph_init.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_xlsx_source_column.py +0 -0
- {s3dgraphy-1.6.0.dev54 → s3dgraphy-1.6.0.dev55}/tests/test_zero_hour.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: s3dgraphy
|
|
3
|
-
Version: 1.6.0.
|
|
3
|
+
Version: 1.6.0.dev55
|
|
4
4
|
Summary: 3D Stratigraphic Graph Management Library for archaeological and heritage applications
|
|
5
5
|
Author-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
|
|
6
6
|
Maintainer-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "s3dgraphy"
|
|
7
|
-
version = "1.6.0.
|
|
7
|
+
version = "1.6.0.dev55"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -3069,7 +3069,8 @@ def resolve_file(entry: Dict[str, Any], **kwargs) -> Dict[str, Any]:
|
|
|
3069
3069
|
|
|
3070
3070
|
|
|
3071
3071
|
# ── a study into a room, from a folder (MICRO-ROOM-IMPORT, 15 Oct 2026) ──────
|
|
3072
|
-
def room_import(em_json: str, *, node: str, room: str,
|
|
3072
|
+
def room_import(em_json: Optional[str] = None, *, node: str, room: str,
|
|
3073
|
+
title: Optional[str] = None,
|
|
3073
3074
|
base_dir: Optional[str] = None, visibility: str = "restricted",
|
|
3074
3075
|
token: Optional[str] = None, dry_run: bool = False,
|
|
3075
3076
|
pack_tilesets: Optional[str] = None, **kwargs) -> Dict[str, Any]:
|
|
@@ -3079,8 +3080,11 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
3079
3080
|
hosted keeping their path, the graph is seated last as operations, then
|
|
3080
3081
|
``study-access``. ``dry_run``: the plan only, nothing written.
|
|
3081
3082
|
``pack_tilesets="3tz"``: a tileset folder goes up as one canonical
|
|
3082
|
-
``.3tz``.
|
|
3083
|
-
|
|
3083
|
+
``.3tz``. ``container=`` (a study held in memory) with ``base_dirs=``
|
|
3084
|
+
instead of the path; the person's choices as ``per_group``/``per_batch``/
|
|
3085
|
+
``per_item``, ``move``, ``lots``; ``before_seed`` for what a client adds
|
|
3086
|
+
before the graph is seated. → the report. The one engine of the three
|
|
3087
|
+
doors (the command, EMStudio, EM Tools); see :mod:`s3dgraphy.room_import`."""
|
|
3084
3088
|
from .room_import import room_import as _run
|
|
3085
3089
|
return _run(em_json, node=node, room=room, title=title, base_dir=base_dir,
|
|
3086
3090
|
visibility=visibility, token=token, dry_run=dry_run,
|
|
@@ -52,13 +52,23 @@ written by dtcstamp (s3Dgraphy stays a reader), a sibling representation
|
|
|
52
52
|
(`dtc_derived_from` the folder, a DTC step `packing` with its stamp); the
|
|
53
53
|
folder stays as a reference. See :mod:`.pack`.
|
|
54
54
|
|
|
55
|
+
A CLIENT WITH A DIALOG (EM Tools' «Bring into a room») calls the two halves:
|
|
56
|
+
:func:`prepare` (the room, then the plan, from the study it holds in memory:
|
|
57
|
+
`container=`, `base_dirs=`), shows the rows, and :func:`execute` with the
|
|
58
|
+
person's choices (:func:`apply_choices` per group / batch / item, `move` for
|
|
59
|
+
«Move here», the confirmed `lots`) and its hook for what only the client can
|
|
60
|
+
make (`before_seed`: EM Tools publishes the scene's models there, so they are
|
|
61
|
+
in the one seeding).
|
|
62
|
+
|
|
55
63
|
Defaults to confirm (E.D.): the name `room_import` / `room-import`, a new
|
|
56
64
|
room's visibility `restricted`.
|
|
57
65
|
"""
|
|
58
66
|
|
|
59
|
-
from .engine import (JOURNAL_NAME, Interrupted, Journal,
|
|
60
|
-
|
|
67
|
+
from .engine import (JOURNAL_NAME, Interrupted, Journal, apply_choices,
|
|
68
|
+
birth_sections, execute, make_plan, markdown, plan_report,
|
|
69
|
+
prepare, room_import, summarise_plan)
|
|
61
70
|
from .errors import RoomError
|
|
62
71
|
|
|
63
|
-
__all__ = ["JOURNAL_NAME", "Interrupted", "Journal", "RoomError", "
|
|
64
|
-
"
|
|
72
|
+
__all__ = ["JOURNAL_NAME", "Interrupted", "Journal", "RoomError", "apply_choices",
|
|
73
|
+
"birth_sections", "execute", "make_plan", "markdown", "plan_report",
|
|
74
|
+
"prepare", "room_import", "summarise_plan"]
|
|
@@ -376,10 +376,16 @@ def _open_room(node: str, token: Optional[str], room: str, title: str,
|
|
|
376
376
|
|
|
377
377
|
def _upload_all(units: List[Dict[str, Any]], *, node: str, room: str,
|
|
378
378
|
token: Optional[str], journal: Journal, workers: int,
|
|
379
|
-
by_reference: bool, stop_after: Optional[int] = None
|
|
379
|
+
by_reference: bool, stop_after: Optional[int] = None,
|
|
380
|
+
progress: Optional[Callable[[str, int, int], None]] = None,
|
|
381
|
+
hold: Optional[Callable[[], Any]] = None,
|
|
382
|
+
on_bytes: Optional[Callable[[int], None]] = None
|
|
380
383
|
) -> Dict[str, Any]:
|
|
381
384
|
"""Every unit not on the node goes up, in a pool. One failure is one row of
|
|
382
|
-
the report; an unreachable node stops the run (the journal is kept).
|
|
385
|
+
the report; an unreachable node stops the run (the journal is kept).
|
|
386
|
+
`hold()` before each file and each piece (a client's «Pause»); `on_bytes(n)`
|
|
387
|
+
as the bytes are read out, from the WORKERS (a client that draws hands it
|
|
388
|
+
to its own thread)."""
|
|
383
389
|
total = sum(int(u["size"] or 0) for u in units)
|
|
384
390
|
done = {"files": 0, "bytes": 0, "referenced": 0, "already": 0}
|
|
385
391
|
failed: List[Dict[str, str]] = []
|
|
@@ -388,6 +394,8 @@ def _upload_all(units: List[Dict[str, Any]], *, node: str, room: str,
|
|
|
388
394
|
stop = threading.Event()
|
|
389
395
|
|
|
390
396
|
def one(u):
|
|
397
|
+
if hold is not None:
|
|
398
|
+
hold()
|
|
391
399
|
if stop.is_set():
|
|
392
400
|
return
|
|
393
401
|
if by_reference:
|
|
@@ -402,8 +410,18 @@ def _upload_all(units: List[Dict[str, Any]], *, node: str, room: str,
|
|
|
402
410
|
if exc.status != 409:
|
|
403
411
|
raise
|
|
404
412
|
# a node that keeps the bytes it is given: upload them there
|
|
413
|
+
read = [0]
|
|
414
|
+
|
|
415
|
+
def piece_read(sent, _size):
|
|
416
|
+
if on_bytes is not None and sent > read[0]:
|
|
417
|
+
on_bytes(sent - read[0])
|
|
418
|
+
read[0] = sent
|
|
419
|
+
|
|
405
420
|
info = nodeio.upload_asset(node, room, u["path"], u["sha256"],
|
|
406
|
-
u["media_type"], token
|
|
421
|
+
u["media_type"], token,
|
|
422
|
+
piece_read if on_bytes is not None else None, hold=hold)
|
|
423
|
+
if info.get("already") and read[0]:
|
|
424
|
+
on_bytes(-read[0]) # the node had them after all: nothing was read out
|
|
407
425
|
journal.note_file(u["sha256"], "already" if info.get("already") else "uploaded",
|
|
408
426
|
u["size"])
|
|
409
427
|
with lock:
|
|
@@ -426,6 +444,15 @@ def _upload_all(units: List[Dict[str, Any]], *, node: str, room: str,
|
|
|
426
444
|
u = futures[fut]
|
|
427
445
|
try:
|
|
428
446
|
fut.result()
|
|
447
|
+
if progress is not None:
|
|
448
|
+
# here, in the caller's thread: Blender's progress bar
|
|
449
|
+
# must not be touched from a worker
|
|
450
|
+
with lock:
|
|
451
|
+
sent = done["bytes"]
|
|
452
|
+
try:
|
|
453
|
+
progress(os.path.basename(u["path"] or ""), sent, total)
|
|
454
|
+
except Exception: # noqa: BLE001 — a client's bar is not the run
|
|
455
|
+
pass
|
|
429
456
|
except RoomError as exc:
|
|
430
457
|
if exc.status is None or exc.status == 401:
|
|
431
458
|
stop.set()
|
|
@@ -603,36 +630,73 @@ def _seed(container, *, node: str, room: str, token: Optional[str],
|
|
|
603
630
|
return out
|
|
604
631
|
|
|
605
632
|
|
|
606
|
-
def
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
633
|
+
def _study(em_json: Optional[str], container: Any) -> Tuple[Any, List[str]]:
|
|
634
|
+
"""The study: from its file, or the one a client holds in memory (EM Tools:
|
|
635
|
+
the graphs of the scene, the file's shelf). Anything with `graphs` (id →
|
|
636
|
+
Graph), `shelf` and `active_graph_id` — a :class:`~s3dgraphy.container.Container`."""
|
|
637
|
+
if container is not None:
|
|
638
|
+
return container, []
|
|
639
|
+
if not em_json:
|
|
640
|
+
raise ValueError("room_import needs an em.json or a container")
|
|
641
|
+
return _load(em_json)
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
def _title_of(container: Any, em_json: Optional[str]) -> str:
|
|
645
|
+
active = None
|
|
646
|
+
try:
|
|
647
|
+
active = container.active()
|
|
648
|
+
except Exception: # noqa: BLE001 — a container-like without active()
|
|
649
|
+
gid = getattr(container, "active_graph_id", None)
|
|
650
|
+
active = (getattr(container, "graphs", {}) or {}).get(gid)
|
|
651
|
+
name = getattr(active, "name", "") or ""
|
|
652
|
+
if isinstance(name, dict):
|
|
653
|
+
# a graph's name in several languages (`{"default": …}`): measured on
|
|
654
|
+
# 15 Oct 2026, the title was the dict written out
|
|
655
|
+
name = name.get("default") or next(iter(name.values()), "")
|
|
656
|
+
name = str(name or "")
|
|
657
|
+
if name:
|
|
658
|
+
return name
|
|
659
|
+
return os.path.basename(em_json).split(".")[0] if em_json else ""
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
def prepare(em_json: Optional[str] = None, *, container: Any = None,
|
|
663
|
+
node: str, room: str, title: Optional[str] = None,
|
|
664
|
+
base_dir: Optional[str] = None, base_dirs: Optional[Iterable[str]] = None,
|
|
665
|
+
token: Optional[str] = None, dry_run: bool = False,
|
|
666
|
+
pack_tilesets: Optional[str] = None, journal_path: Optional[str] = None,
|
|
667
|
+
work_dir: Optional[str] = None, workers: int = 4) -> Dict[str, Any]:
|
|
668
|
+
"""The first half of the gesture: the room (created, or taken up again —
|
|
669
|
+
unless `dry_run`), then the PLAN, every file the study names in its group.
|
|
670
|
+
Nothing is uploaded. → the run, for :func:`plan_report` and :func:`execute`.
|
|
671
|
+
|
|
672
|
+
A client with a dialog (EM Tools) calls this, shows `run["plan"]["rows"]`,
|
|
673
|
+
collects the person's choices, and then calls :func:`execute` with them.
|
|
674
|
+
`container` is the study a client holds in memory (its graphs are
|
|
675
|
+
rewritten IN PLACE when the files are hosted); `base_dirs` are where its
|
|
676
|
+
relative paths are looked for (the DosCo, the em.json's folder, the
|
|
677
|
+
.blend's folder), the first one also where the journal goes when no
|
|
678
|
+
`em_json` says where."""
|
|
616
679
|
from . import pack as packing
|
|
617
680
|
|
|
618
681
|
started = time.time()
|
|
619
682
|
t0 = time.monotonic()
|
|
620
683
|
nodeio.seen_requests(reset=True)
|
|
621
684
|
node = node.strip().rstrip("/")
|
|
622
|
-
em_json = os.path.abspath(em_json)
|
|
623
|
-
if visibility not in VISIBILITIES:
|
|
624
|
-
raise ValueError(f"visibility is restricted or public, not {visibility!r}")
|
|
625
|
-
if elsewhere not in ELSEWHERE:
|
|
626
|
-
raise ValueError(f"elsewhere is one of {ELSEWHERE}, not {elsewhere!r}")
|
|
685
|
+
em_json = os.path.abspath(em_json) if em_json else ""
|
|
627
686
|
if pack_tilesets not in (None, "", "3tz"):
|
|
628
687
|
raise ValueError(f"--pack-tilesets knows 3tz, not {pack_tilesets!r}")
|
|
629
|
-
|
|
630
|
-
|
|
688
|
+
bases = [os.path.abspath(b) for b in (base_dirs or ()) if b]
|
|
689
|
+
if base_dir or not bases:
|
|
690
|
+
if not (base_dir or em_json):
|
|
691
|
+
raise ValueError("room_import needs base_dirs when there is no em.json")
|
|
692
|
+
bases.insert(0, os.path.abspath(base_dir or os.path.dirname(em_json)))
|
|
693
|
+
bases = list(dict.fromkeys(bases))
|
|
694
|
+
journal_path = journal_path or os.path.join(
|
|
695
|
+
os.path.dirname(em_json) if em_json else bases[0], JOURNAL_NAME)
|
|
631
696
|
journal = Journal(journal_path, node=node, room=room, write=not dry_run)
|
|
632
|
-
container, warnings =
|
|
697
|
+
container, warnings = _study(em_json, container)
|
|
633
698
|
members = _members(container)
|
|
634
|
-
title = title or
|
|
635
|
-
os.path.basename(em_json).split(".")[0]
|
|
699
|
+
title = title or _title_of(container, em_json) or room
|
|
636
700
|
timings: Dict[str, float] = {}
|
|
637
701
|
|
|
638
702
|
# THE ROOM BEFORE ANY QUESTION ABOUT ITS FILES. Measured on 15 Oct 2026: a
|
|
@@ -648,8 +712,8 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
648
712
|
probe = _room_exists(node, token, room)
|
|
649
713
|
else:
|
|
650
714
|
where = _open_room(node, token, room, title, birth_sections(members),
|
|
651
|
-
container
|
|
652
|
-
plan = make_plan(container, base_dirs=
|
|
715
|
+
getattr(container, "active_graph_id", None), journal)
|
|
716
|
+
plan = make_plan(container, base_dirs=bases, node=node, room=room,
|
|
653
717
|
token=token if probe else None, journal=journal, workers=workers,
|
|
654
718
|
trees=inventory.CHOICE_REFERENCE if pack_tilesets else inventory.CHOICE_UPLOAD,
|
|
655
719
|
probe=probe)
|
|
@@ -670,7 +734,7 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
670
734
|
# its file on this disk, also when the node already has it (a
|
|
671
735
|
# row the HEAD answered for carries no path)
|
|
672
736
|
sib_path = (sib_row or {}).get("path") or inventory.resolve_path(
|
|
673
|
-
str(sib.data.get("url") or ""),
|
|
737
|
+
str(sib.data.get("url") or ""), bases)
|
|
674
738
|
check = packing.reusable(sib, sib_path, folder_digest)
|
|
675
739
|
if check["ok"]:
|
|
676
740
|
packs.append({"tree": r["id"], "reused": sib.node_id,
|
|
@@ -688,7 +752,7 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
688
752
|
packs.append(made)
|
|
689
753
|
if any("archive_id" in p for p in packs):
|
|
690
754
|
# the new siblings are resources like any other: planned again
|
|
691
|
-
plan = make_plan(container, base_dirs=[
|
|
755
|
+
plan = make_plan(container, base_dirs=bases + [work], node=node, room=room,
|
|
692
756
|
token=token, journal=journal, workers=workers,
|
|
693
757
|
trees=inventory.CHOICE_REFERENCE, probe=probe)
|
|
694
758
|
for p in packs:
|
|
@@ -697,23 +761,115 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
697
761
|
raise RoomError(f"the packed archive {p['path']} was not found again")
|
|
698
762
|
timings["pack"] = round(time.monotonic() - t0 - timings["plan"], 1)
|
|
699
763
|
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
764
|
+
return {"em_json": em_json, "container": container, "members": members,
|
|
765
|
+
"base_dirs": bases, "node": node, "room": room, "title": title,
|
|
766
|
+
"token": token, "dry_run": dry_run, "pack_tilesets": pack_tilesets or "",
|
|
767
|
+
"journal": journal, "journal_path": journal_path, "where": where,
|
|
768
|
+
"probe": probe, "plan": plan, "packs": packs, "warnings": warnings,
|
|
769
|
+
"timings": timings, "t0": t0, "started": started, "workers": workers}
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
def plan_report(run: Dict[str, Any], *, elsewhere: str = "host",
|
|
773
|
+
visibility: str = "restricted") -> Dict[str, Any]:
|
|
774
|
+
"""What :func:`prepare` found, as the report's first half (the dry run's
|
|
775
|
+
whole report)."""
|
|
776
|
+
plan = run["plan"]
|
|
777
|
+
return {
|
|
778
|
+
"em_json": run["em_json"], "base_dir": run["base_dirs"][0],
|
|
779
|
+
"base_dirs": run["base_dirs"], "node": run["node"], "room": run["room"],
|
|
780
|
+
"title": run["title"], "visibility": visibility, "dry_run": run["dry_run"],
|
|
781
|
+
"pack_tilesets": run["pack_tilesets"], "elsewhere": elsewhere,
|
|
782
|
+
"asked_the_node": run["probe"],
|
|
783
|
+
"started_at": datetime.datetime.fromtimestamp(run["started"]).isoformat(timespec="seconds"),
|
|
784
|
+
"plan": summarise_plan(plan, elsewhere=elsewhere), "packs": run["packs"],
|
|
785
|
+
"warnings": run["warnings"][:20],
|
|
707
786
|
"missing": [{"id": r["id"], "name": r["name"], "locator": r["locator"],
|
|
708
787
|
"note": r.get("note", "")}
|
|
709
788
|
for r in plan["rows"] if r["group"] == inventory.GROUP_MISSING],
|
|
710
789
|
}
|
|
711
|
-
if dry_run:
|
|
712
|
-
report["requests"] = nodeio.seen_requests()
|
|
713
|
-
report["seconds"] = round(time.monotonic() - t0, 1)
|
|
714
|
-
report["timings"] = timings
|
|
715
|
-
return report
|
|
716
790
|
|
|
791
|
+
|
|
792
|
+
def apply_choices(run: Dict[str, Any], *, per_group: Optional[Dict[str, str]] = None,
|
|
793
|
+
per_batch: Optional[Dict[str, str]] = None,
|
|
794
|
+
per_item: Optional[Dict[str, str]] = None) -> Dict[str, Any]:
|
|
795
|
+
"""The person's choices on the plan (`inventory.apply_choices`: item >
|
|
796
|
+
batch > group), and the work they mean recounted: a file left as a
|
|
797
|
+
reference or skipped is not a unit any more, a tree left as a reference
|
|
798
|
+
has no files to send. → the plan."""
|
|
799
|
+
plan = run["plan"]
|
|
800
|
+
inventory.apply_choices(plan["rows"], per_group=per_group, per_batch=per_batch,
|
|
801
|
+
per_item=per_item)
|
|
802
|
+
trees = [r for r in plan["rows"] if r.get("tree") and r["choice"] == inventory.CHOICE_UPLOAD]
|
|
803
|
+
keep = {t["id"] for t in trees}
|
|
804
|
+
plan["trees"] = trees
|
|
805
|
+
plan["members"] = [m for m in plan["members"] if m["tree_of"] in keep]
|
|
806
|
+
token = run["token"] if run["probe"] else None
|
|
807
|
+
head = _head_fn(run["node"], run["room"], token) if run["probe"] \
|
|
808
|
+
else (lambda _hexd: (False, None))
|
|
809
|
+
plan["units"] = _units(plan["rows"], plan["members"], head, run["journal"])
|
|
810
|
+
return plan
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
def _bucket_lots(run: Dict[str, Any], lots: Iterable[Dict[str, Any]]) -> List[str]:
|
|
814
|
+
"""L1 · each CONFIRMED session of photos becomes ONE acquisition in its
|
|
815
|
+
graph (`api.bucket_acquisition`, the serial node). → the acquisition ids."""
|
|
816
|
+
from ..api import bucket_acquisition
|
|
817
|
+
graphs = dict(run["members"])
|
|
818
|
+
active = getattr(run["container"], "active_graph_id", None)
|
|
819
|
+
made = []
|
|
820
|
+
for lot in lots or ():
|
|
821
|
+
if lot.get("confirmed") is False or not lot.get("ids"):
|
|
822
|
+
continue
|
|
823
|
+
graph = graphs.get(lot.get("graph_id") or active) or next(iter(graphs.values()))
|
|
824
|
+
out = bucket_acquisition(
|
|
825
|
+
graph, list(lot["ids"]), name=f"Photos · {lot.get('name') or ''}".strip(),
|
|
826
|
+
metadata={"camera": lot.get("camera"), "taken_from": lot.get("from"),
|
|
827
|
+
"taken_to": lot.get("to"),
|
|
828
|
+
"source": lot.get("source") or "room-import"})
|
|
829
|
+
made.append(str(out.get("acquisition_id") or out.get("id") or ""))
|
|
830
|
+
return made
|
|
831
|
+
|
|
832
|
+
|
|
833
|
+
def execute(run: Dict[str, Any], *, visibility: str = "restricted",
|
|
834
|
+
elsewhere: str = "host", move: Optional[Iterable[str]] = None,
|
|
835
|
+
lots: Optional[Iterable[Dict[str, Any]]] = None,
|
|
836
|
+
before_seed: Optional[Callable[[Dict[str, Any]], Optional[Dict[str, Any]]]] = None,
|
|
837
|
+
progress: Optional[Callable[[str, int, int], None]] = None,
|
|
838
|
+
report_dir: Optional[str] = None, by_reference: bool = False,
|
|
839
|
+
reseed: bool = False, stop_after: Optional[int] = None,
|
|
840
|
+
hold: Optional[Callable[[], Any]] = None,
|
|
841
|
+
on_bytes: Optional[Callable[[int], None]] = None) -> Dict[str, Any]:
|
|
842
|
+
"""The second half: the files up, the resources hosted, the graph seated,
|
|
843
|
+
`study-access`, the report (json + md in `report_dir`).
|
|
844
|
+
|
|
845
|
+
The person's choices: on the plan (:func:`apply_choices`, before this);
|
|
846
|
+
`move` — the rows (ids) or digests at home in another room the person
|
|
847
|
+
said «Move here» for (`elsewhere="move"`: all of them); `lots` — the
|
|
848
|
+
confirmed sessions of photos, one acquisition each. `before_seed(info)` is
|
|
849
|
+
the client's hook for the resources only IT can make — EM Tools exports
|
|
850
|
+
the scene's models and publishes them (`promote_model`) — called after the
|
|
851
|
+
files are up and hosted, BEFORE the graph is seated, so they are in the one
|
|
852
|
+
seeding. `info` is `{node, room, token, container, plan}`; it answers
|
|
853
|
+
`{uploaded, bytes, already, failed: [sentence], filled: [resource id]}`
|
|
854
|
+
(any of them), counted in the report. `progress(name, sent, total)`:
|
|
855
|
+
bytes, after each file. `hold()` — a client's «Pause»: called before each
|
|
856
|
+
file and each piece, it returns when the run may go on (truthy if it
|
|
857
|
+
waited); `on_bytes(n)` — the bytes as they are read out, from the upload
|
|
858
|
+
workers."""
|
|
859
|
+
if run["dry_run"]:
|
|
860
|
+
raise ValueError("a dry run is not executed: prepare it again without dry_run")
|
|
861
|
+
if visibility not in VISIBILITIES:
|
|
862
|
+
raise ValueError(f"visibility is restricted or public, not {visibility!r}")
|
|
863
|
+
if elsewhere not in ELSEWHERE:
|
|
864
|
+
raise ValueError(f"elsewhere is one of {ELSEWHERE}, not {elsewhere!r}")
|
|
865
|
+
node, room, token = run["node"], run["room"], run["token"]
|
|
866
|
+
journal, journal_path = run["journal"], run["journal_path"]
|
|
867
|
+
plan, where, members = run["plan"], run["where"], run["members"]
|
|
868
|
+
t0, timings, workers = run["t0"], run["timings"], run["workers"]
|
|
869
|
+
container = run["container"]
|
|
870
|
+
|
|
871
|
+
summary = summarise_plan(plan, elsewhere=elsewhere)
|
|
872
|
+
report = plan_report(run, elsewhere=elsewhere, visibility=visibility)
|
|
717
873
|
try:
|
|
718
874
|
report["room_state"] = where
|
|
719
875
|
t1 = time.monotonic()
|
|
@@ -722,7 +878,8 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
722
878
|
_say(f"{len(todo)} file(s) to send, {inventory.human_size(sum(int(u['size'] or 0) for u in todo))}")
|
|
723
879
|
uploads = _upload_all(todo, node=node, room=room, token=token, journal=journal,
|
|
724
880
|
workers=workers, by_reference=by_reference,
|
|
725
|
-
stop_after=stop_after
|
|
881
|
+
stop_after=stop_after, progress=progress,
|
|
882
|
+
hold=hold, on_bytes=on_bytes)
|
|
726
883
|
for u in plan["units"].values():
|
|
727
884
|
if u["present"]:
|
|
728
885
|
journal.note_file(u["sha256"], "already", u["size"])
|
|
@@ -754,22 +911,27 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
754
911
|
for r in plan["rows"]:
|
|
755
912
|
if r["group"] == inventory.GROUP_ELSEWHERE:
|
|
756
913
|
homes[r.get("home") or "?"] = homes.get(r.get("home") or "?", 0) + 1
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
914
|
+
said = {str(x) for x in (move or ())}
|
|
915
|
+
to_move = sorted({r["sha256"] for r in plan["rows"]
|
|
916
|
+
if r["group"] == inventory.GROUP_ELSEWHERE and r.get("sha256")
|
|
917
|
+
and (elsewhere == "move" or r["id"] in said or r["sha256"] in said)})
|
|
918
|
+
for hexd in to_move:
|
|
919
|
+
row = next(r for r in plan["rows"] if r.get("sha256") == hexd)
|
|
920
|
+
try:
|
|
921
|
+
answer = nodeio.move_asset_home(node, room, hexd, row.get("home"), token)
|
|
922
|
+
if answer.get("home") == room:
|
|
923
|
+
moved.add(hexd)
|
|
924
|
+
else:
|
|
766
925
|
uploads["failed"].append({"file": row["name"], "sha256": hexd,
|
|
767
|
-
"why": f"
|
|
926
|
+
"why": f"the node kept it in {answer.get('home')}"})
|
|
927
|
+
except RoomError as exc:
|
|
928
|
+
uploads["failed"].append({"file": row["name"], "sha256": hexd,
|
|
929
|
+
"why": f"not moved here: {exc}"})
|
|
768
930
|
rewritten = _rewrite(container, plan, node=node, room=room, manifests=manifests,
|
|
769
931
|
failed_hex=failed_hex, elsewhere=elsewhere, moved=moved)
|
|
770
932
|
rewritten["homes_elsewhere"] = homes
|
|
771
933
|
rewritten["moved_here"] = len(moved)
|
|
772
|
-
for p in packs:
|
|
934
|
+
for p in run["packs"]:
|
|
773
935
|
# the packed archive was born in a work folder: that path is not
|
|
774
936
|
# an address of the study, the room's store is
|
|
775
937
|
res = dict(members).get(_graph_of(plan, p.get("archive_id"))) if p.get("archive_id") else None
|
|
@@ -780,6 +942,11 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
780
942
|
res.data.pop("addresses", None)
|
|
781
943
|
else:
|
|
782
944
|
res.data["addresses"] = kept
|
|
945
|
+
acquisitions = _bucket_lots(run, lots or ())
|
|
946
|
+
scene: Dict[str, Any] = {}
|
|
947
|
+
if before_seed is not None:
|
|
948
|
+
scene = dict(before_seed({"node": node, "room": room, "token": token,
|
|
949
|
+
"container": container, "plan": plan}) or {})
|
|
783
950
|
seeded = {"applied": 0, "refused": 0, "not_news": 0, "sent": 0, "requests": 0,
|
|
784
951
|
"graphs": []}
|
|
785
952
|
if where["seedable"]:
|
|
@@ -796,15 +963,23 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
796
963
|
finally:
|
|
797
964
|
journal.flush(force=True)
|
|
798
965
|
|
|
966
|
+
filled = set(scene.get("filled") or ())
|
|
967
|
+
if filled:
|
|
968
|
+
report["missing"] = [m for m in report["missing"] if m["id"] not in filled]
|
|
969
|
+
report["plan"]["missing"] = len(report["missing"])
|
|
799
970
|
report.update({
|
|
800
|
-
"uploaded": {"files": uploads["files"]
|
|
801
|
-
|
|
971
|
+
"uploaded": {"files": uploads["files"] + int(scene.get("uploaded") or 0),
|
|
972
|
+
"bytes": uploads["bytes"] + int(scene.get("bytes") or 0)},
|
|
973
|
+
"already": {"files": summary["already"]["files"] + uploads["already"]
|
|
974
|
+
+ int(scene.get("already") or 0),
|
|
802
975
|
"bytes": summary["already"]["bytes"]},
|
|
803
976
|
"referenced_by_node": uploads["referenced"],
|
|
804
977
|
"references": summary["references"],
|
|
805
|
-
"failed": [f"{f['file']}: {f['why']}" for f in uploads["failed"]]
|
|
978
|
+
"failed": [f"{f['file']}: {f['why']}" for f in uploads["failed"]]
|
|
979
|
+
+ [str(x) for x in scene.get("failed") or ()],
|
|
806
980
|
"trees": [{"id": k, **v} for k, v in manifests.items()],
|
|
807
|
-
"rewritten": rewritten, "seeded": seeded,
|
|
981
|
+
"rewritten": rewritten, "seeded": seeded, "lots": acquisitions,
|
|
982
|
+
"scene": scene,
|
|
808
983
|
"access": access or {"visibility": journal.here.get("visibility")},
|
|
809
984
|
"link": targets.get("web") or targets.get("scheme") or "",
|
|
810
985
|
"requests": nodeio.seen_requests(),
|
|
@@ -820,6 +995,51 @@ def room_import(em_json: str, *, node: str, room: str, title: Optional[str] = No
|
|
|
820
995
|
return report
|
|
821
996
|
|
|
822
997
|
|
|
998
|
+
def room_import(em_json: Optional[str] = None, *, node: str, room: str,
|
|
999
|
+
container: Any = None, title: Optional[str] = None,
|
|
1000
|
+
base_dir: Optional[str] = None, base_dirs: Optional[Iterable[str]] = None,
|
|
1001
|
+
visibility: str = "restricted",
|
|
1002
|
+
token: Optional[str] = None, dry_run: bool = False,
|
|
1003
|
+
pack_tilesets: Optional[str] = None, journal_path: Optional[str] = None,
|
|
1004
|
+
work_dir: Optional[str] = None, report_dir: Optional[str] = None,
|
|
1005
|
+
by_reference: bool = False, workers: int = 4, reseed: bool = False,
|
|
1006
|
+
elsewhere: str = "host",
|
|
1007
|
+
per_group: Optional[Dict[str, str]] = None,
|
|
1008
|
+
per_batch: Optional[Dict[str, str]] = None,
|
|
1009
|
+
per_item: Optional[Dict[str, str]] = None,
|
|
1010
|
+
move: Optional[Iterable[str]] = None,
|
|
1011
|
+
lots: Optional[Iterable[Dict[str, Any]]] = None,
|
|
1012
|
+
before_seed: Optional[Callable[[Dict[str, Any]], Optional[Dict[str, Any]]]] = None,
|
|
1013
|
+
progress: Optional[Callable[[str, int, int], None]] = None,
|
|
1014
|
+
stop_after: Optional[int] = None,
|
|
1015
|
+
hold: Optional[Callable[[], Any]] = None,
|
|
1016
|
+
on_bytes: Optional[Callable[[int], None]] = None) -> Dict[str, Any]:
|
|
1017
|
+
"""Bring the study of `em_json` (or the `container` a client holds) and
|
|
1018
|
+
every file of its folder into `room` on `node`: :func:`prepare`, the
|
|
1019
|
+
choices (:func:`apply_choices`), :func:`execute`. → the report (also
|
|
1020
|
+
written as json + md unless `dry_run`)."""
|
|
1021
|
+
if visibility not in VISIBILITIES:
|
|
1022
|
+
raise ValueError(f"visibility is restricted or public, not {visibility!r}")
|
|
1023
|
+
if elsewhere not in ELSEWHERE:
|
|
1024
|
+
raise ValueError(f"elsewhere is one of {ELSEWHERE}, not {elsewhere!r}")
|
|
1025
|
+
run = prepare(em_json, container=container, node=node, room=room, title=title,
|
|
1026
|
+
base_dir=base_dir, base_dirs=base_dirs, token=token, dry_run=dry_run,
|
|
1027
|
+
pack_tilesets=pack_tilesets, journal_path=journal_path,
|
|
1028
|
+
work_dir=work_dir, workers=workers)
|
|
1029
|
+
if per_group or per_batch or per_item:
|
|
1030
|
+
apply_choices(run, per_group=per_group, per_batch=per_batch, per_item=per_item)
|
|
1031
|
+
if dry_run:
|
|
1032
|
+
report = plan_report(run, elsewhere=elsewhere, visibility=visibility)
|
|
1033
|
+
report["requests"] = nodeio.seen_requests()
|
|
1034
|
+
report["seconds"] = round(time.monotonic() - run["t0"], 1)
|
|
1035
|
+
report["timings"] = run["timings"]
|
|
1036
|
+
return report
|
|
1037
|
+
return execute(run, visibility=visibility, elsewhere=elsewhere, move=move, lots=lots,
|
|
1038
|
+
before_seed=before_seed, progress=progress, report_dir=report_dir,
|
|
1039
|
+
by_reference=by_reference, reseed=reseed, stop_after=stop_after,
|
|
1040
|
+
hold=hold, on_bytes=on_bytes)
|
|
1041
|
+
|
|
1042
|
+
|
|
823
1043
|
def sentence(report: Dict[str, Any]) -> str:
|
|
824
1044
|
up = report.get("uploaded") or {}
|
|
825
1045
|
return (f"uploaded {up.get('files', 0)} ({inventory.human_size(up.get('bytes', 0))}), "
|
|
@@ -275,7 +275,7 @@ def _offset_now(url: str, token, timeout) -> int:
|
|
|
275
275
|
|
|
276
276
|
|
|
277
277
|
def _resumable(node, room, path, hexd, size, media_type, token, progress_cb,
|
|
278
|
-
timeout, piece) -> Dict[str, Any]:
|
|
278
|
+
timeout, piece, hold=None) -> Dict[str, Any]:
|
|
279
279
|
start = urllib.request.Request(
|
|
280
280
|
_room_url(node, room, "uploads"), method="POST",
|
|
281
281
|
data=json.dumps({"size": size, "sha256": hexd,
|
|
@@ -292,6 +292,10 @@ def _resumable(node, room, path, hexd, size, media_type, token, progress_cb,
|
|
|
292
292
|
offset = int(session.get("offset") or 0)
|
|
293
293
|
failures = 0
|
|
294
294
|
while True:
|
|
295
|
+
if hold is not None and hold() and offset:
|
|
296
|
+
# a client's «Pause» waited here, BETWEEN two pieces: the node
|
|
297
|
+
# says where it is now, and the upload goes on from there
|
|
298
|
+
offset = _offset_now(url, token, timeout)
|
|
295
299
|
length = min(piece, size - offset)
|
|
296
300
|
read_so_far = [0]
|
|
297
301
|
|
|
@@ -343,14 +347,17 @@ def upload_asset(node: str, room: str, path: str, sha256: Optional[str],
|
|
|
343
347
|
progress_cb: ProgressCb = None, *,
|
|
344
348
|
timeout: float = 600.0,
|
|
345
349
|
single_shot_max: int = SINGLE_SHOT_MAX,
|
|
346
|
-
piece: int = PIECE
|
|
350
|
+
piece: int = PIECE,
|
|
351
|
+
hold: Optional[Callable[[], None]] = None) -> Dict[str, Any]:
|
|
347
352
|
"""Put the file at `path` into `room`'s store on `node`.
|
|
348
353
|
|
|
349
354
|
→ `{ref, sha256, size, media_type, created, author, url, already}`.
|
|
350
355
|
`already: True` means the HEAD said the room has it and nothing was sent.
|
|
351
356
|
`sha256` may be None (it is computed here); when given it is checked by
|
|
352
357
|
the node, so a file changed since the inventory read it is refused (422)
|
|
353
|
-
rather than stored under the wrong name.
|
|
358
|
+
rather than stored under the wrong name. `hold()` is called before each
|
|
359
|
+
piece of a resumable upload and returns when the client wants it to go on
|
|
360
|
+
(its «Pause»), truthy if it waited.
|
|
354
361
|
"""
|
|
355
362
|
if not os.path.isfile(path):
|
|
356
363
|
raise RoomError(f"not a file: {path}")
|
|
@@ -379,7 +386,7 @@ def upload_asset(node: str, room: str, path: str, sha256: Optional[str],
|
|
|
379
386
|
progress_cb, timeout)
|
|
380
387
|
else:
|
|
381
388
|
info = _resumable(node, room, path, hexd, size, media_type, token,
|
|
382
|
-
progress_cb, timeout, piece)
|
|
389
|
+
progress_cb, timeout, piece, hold)
|
|
383
390
|
got = _hex(info.get("ref") or info.get("sha256") or "")
|
|
384
391
|
if got != hexd:
|
|
385
392
|
raise RoomError(f"the room stored sha256:{got[:12]}…, not the "
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: s3dgraphy
|
|
3
|
-
Version: 1.6.0.
|
|
3
|
+
Version: 1.6.0.dev55
|
|
4
4
|
Summary: 3D Stratigraphic Graph Management Library for archaeological and heritage applications
|
|
5
5
|
Author-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
|
|
6
6
|
Maintainer-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
|