spatialdds 0.7.3__tar.gz → 0.8.0__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.
- {spatialdds-0.7.3 → spatialdds-0.8.0}/PKG-INFO +40 -8
- {spatialdds-0.7.3 → spatialdds-0.8.0}/README.md +39 -7
- {spatialdds-0.7.3 → spatialdds-0.8.0}/pyproject.toml +1 -1
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/__init__.py +1 -1
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/openapi.html +1 -1
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/openapi.yaml +313 -21
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/__init__.py +2 -1
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/_participant.py +56 -8
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/codec.py +8 -1
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/record.py +5 -2
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/records.py +9 -1
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/serve.py +43 -2
- spatialdds-0.8.0/spatialdds/server/bus.py +121 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/gateway.py +101 -4
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/gw_http.py +172 -16
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/idlmodel.py +36 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/mcapmeta.py +5 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/pin.py +6 -1
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/publish.py +215 -15
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/webjson.py +127 -1
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/PKG-INFO +40 -8
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/SOURCES.txt +1 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/setup.cfg +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/anchors.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/argeo.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/common.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/core.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/discovery.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/events.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/lidar.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/mapping.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/provisional/owm.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/provisional/radio.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/provisional/rf_beam.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/rad.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/semantics.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/slam_frontend.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/types.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/vio.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/vision.idl +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/registry.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/builtin_Time.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorDelta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorEntry.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSet.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSetRequest.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSetResponse.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_argeo_NodeGeo.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_argeo_QualityRequirements.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_argeo_VpsRequest.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_argeo_VpsResponse.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_AssetRef.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_FrameRef.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_KV.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_MetaKV.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_Vec2.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_Aabb3.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_BlobChunk.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_BlobRef.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_ComponentRef.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_Edge.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_EntityBinding.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_FrameTransform.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_FramedPose.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_GeoAnchor.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_GeoPose.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_NavSatStatus.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_Node.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_PlannedTrajectory.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_PlannedWaypoint.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_PoseSE3.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_SnapshotRequest.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_SnapshotResponse.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_TileKey.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_TileMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_TilePatch.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_Announce.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_Capabilities.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_ContentAnnounce.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageElement.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageFilter.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageHint.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageQuery.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageResponse.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_Depart.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_KV.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_ProfileSupport.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_ServiceSummary.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_TopicMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_Transform.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_ValidityWindow.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_events_CrossingLine.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_events_SpatialEvent.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_events_SpatialZone.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_events_ZoneState.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_Edge.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_MapAlignment.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_MapEvent.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_MapMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_MapQuality.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_owm_Entity.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_owm_ModelCommand.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_owm_ModelPose.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Detection2D.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Detection2DSet.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Detection3D.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Detection3DSet.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_FusedTrack.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_FusedTrackSet.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Keypoint3D.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_KeypointLink.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_Axis.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_FrameHeader.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_FrameQuality.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_Linspace.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_ROI.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_ROIReply.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_ROIRequest.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_StreamMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarDetection.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarDetectionSet.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarFrame.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadDetection.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadDetectionSet.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadSensorMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadTensorFrame.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadTensorMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioObservation.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioScan.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioSensorMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamArraySet.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamFrame.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_CamIntrinsics.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_Keypoint2D.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_Track2D.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionDetections.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionFrame.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionMeta.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_CameraInfo.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_Feature2D.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_FeatureMatch.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_KeyframeFeatures.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_Landmark.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_MatchSet.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_TrackObs.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_Tracklet.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_FusedState.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_ImuInfo.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_ImuSample.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_MagnetometerSample.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_SensorFusionSample.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/serializer_tables.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/canonical.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/canonjson.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/client.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/_extra.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/blob.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/qos.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/registry.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/_field_aliases.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/builtin/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/builtin/_types.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/anchors/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/anchors/_anchors.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/argeo/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/argeo/_argeo.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/common/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/common/_types.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/core/GnssService/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/core/GnssService/_core.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/core/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/core/_core.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/disco/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/disco/_discovery.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/_events.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/crossing_direction_enum/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/crossing_direction_enum/_events.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/event_state_enum/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/event_state_enum/_events.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/event_type_enum/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/event_type_enum/_events.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/severity_enum/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/severity_enum/_events.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/zone_kind_enum/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/zone_kind_enum/_events.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/_mapping.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/alignment_method/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/alignment_method/_mapping.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/edge_type/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/edge_type/_mapping.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_event_kind/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_event_kind/_mapping.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_kind/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_kind/_mapping.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_status/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_status/_mapping.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/owm/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/owm/_owm.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/semantics/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/semantics/_semantics.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/common/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/common/_common.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/lidar/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/lidar/_lidar.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/rad/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/rad/_rad.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/radio/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/radio/_radio.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/rf_beam/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/rf_beam/_rf_beam.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/vision/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/vision/_vision.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/slam_frontend/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/slam_frontend/_slam_frontend.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/vio/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/vio/_vio.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/assets/duck.gltf +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/assets/fountain-label.txt +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/assets/fountain-marker.gltf +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/fountain-anchors.mcap +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/manifests/content-fountain-label.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/manifests/content-fountain-marker.json +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/errors.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/events.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/frames.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/journal.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/recency.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/__init__.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/commands.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/limits.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/tenancy.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/xcdr2.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/tokens.py +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/dependency_links.txt +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/entry_points.txt +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/requires.txt +0 -0
- {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spatialdds
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
4
4
|
Summary: SpatialDDS for programs: a client for the web binding (Appendix N), a native DDS participant, and the reference registry behind one command.
|
|
5
5
|
Author: Open AR Cloud
|
|
6
6
|
License: Apache-2.0
|
|
@@ -114,7 +114,7 @@ What it asks of you, and what it will not guess:
|
|
|
114
114
|
| `service_id` and `authority` | to write or announce |
|
|
115
115
|
| `qos_profile` | where the §3.3.2 row names none, as `model_entity`'s and `model_pose`'s do; the refusal lists the §3.3.3 profiles that fit, or pass a `sd.dds.Profile(...)` extension |
|
|
116
116
|
| `on_exit="keep"` or `"withdraw"` | on every latched, keyed writer: whether a record outlives its writer is a claim only you can make |
|
|
117
|
-
| `withdraw(key, reason
|
|
117
|
+
| `withdraw(key, reason=..., **changes)` | with an empty reason, or a change to the members it sets itself or to the key |
|
|
118
118
|
|
|
119
119
|
And what it does without being asked:
|
|
120
120
|
|
|
@@ -602,6 +602,35 @@ explicitly was tried first and is what missed two paths.
|
|
|
602
602
|
|
|
603
603
|
If your clients are not browsers, nothing here changes anything for you.
|
|
604
604
|
|
|
605
|
+
## New in 0.8.0: a world from HTTP
|
|
606
|
+
|
|
607
|
+
The `entity` lane is publishable, and so is any keyed type a deployment
|
|
608
|
+
registers (`serve --extension MODULE`), so a browser or curl can populate an
|
|
609
|
+
OWM scene. A DECLARED or AUTHORED entity holds until withdrawn. An OBSERVED or
|
|
610
|
+
DERIVED one declares how often it will be said again, `?refresh=<seconds>`,
|
|
611
|
+
and when nobody says it again the gateway withdraws it, a terminal sample and
|
|
612
|
+
then a dispose, "refresh lapsed". A claim's asserter is the bearer token's
|
|
613
|
+
principal. With `serve --dds-domain N` the gateway writes all of it to a DDS
|
|
614
|
+
bus too, from its own participant. The record lanes are unchanged. The rules
|
|
615
|
+
and a measured session are in
|
|
616
|
+
[docs/PUBLISH.md](https://github.com/OpenArCloud/spatialdds-py/blob/main/docs/PUBLISH.md#world-lanes-entities-and-claims-080).
|
|
617
|
+
|
|
618
|
+
## New in 0.7.4: what the first extension found
|
|
619
|
+
|
|
620
|
+
A deployment's own type, registered with `sd.dds.extend()`, is now served
|
|
621
|
+
the way a pinned one is. The gateway publishes a schema for it, written from
|
|
622
|
+
the model it decodes the type with by the specification generator's rules,
|
|
623
|
+
because N.2 requires a schema for every type an endpoint serves. A
|
|
624
|
+
recording's extension lane is served latched when its writer opened it so,
|
|
625
|
+
and `serve --public FQN` opens it to uncredentialed readers.
|
|
626
|
+
|
|
627
|
+
- `withdraw(key, reason=..., **changes)` sets other members on the terminal
|
|
628
|
+
sample, such as a closed validity interval.
|
|
629
|
+
- `close()` finishes when a reader is slow to acknowledge (cyclonedds-python
|
|
630
|
+
11.0.1 raised on that timeout).
|
|
631
|
+
- `sd.stamp` keeps `nanosec` in range, and floors a time before the epoch.
|
|
632
|
+
- `sd.dds.extensions()` and `sd.dds.extension_of()` are exported.
|
|
633
|
+
|
|
605
634
|
## New in 0.7.3: what the first migration found
|
|
606
635
|
|
|
607
636
|
Mostly additive; one fix changes bytes. Every frame this package builds now
|
|
@@ -679,7 +708,7 @@ Two changes may need a line of yours:
|
|
|
679
708
|
The security fixes, the limits table and the details are in the
|
|
680
709
|
[changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
|
|
681
710
|
|
|
682
|
-
## Not in 0.
|
|
711
|
+
## Not in 0.8.0
|
|
683
712
|
|
|
684
713
|
Stated so nobody waits for them:
|
|
685
714
|
|
|
@@ -711,8 +740,11 @@ supplied. That second form is `sd.asset_ref`. A published release has to stay
|
|
|
711
740
|
reproducible from a public commit, so the API could not change under the same
|
|
712
741
|
number.
|
|
713
742
|
|
|
714
|
-
On the registry,
|
|
715
|
-
|
|
716
|
-
advice to caches), **per-
|
|
717
|
-
**
|
|
718
|
-
**
|
|
743
|
+
On the registry, these are deferred rather than missing, and each is on the
|
|
744
|
+
1.9 candidates list: **leases for records** (world lanes have them since
|
|
745
|
+
0.8.0; a record's `ttl_sec` is still advice to caches), **per-record
|
|
746
|
+
ownership** (a token is scoped to scenes, and within a scene to everything),
|
|
747
|
+
**server-set identity for records** (a claim's asserter comes from the
|
|
748
|
+
credential since 0.8.0; a record's `provider_id` is whatever the publisher
|
|
749
|
+
says), and **upstream subscriptions** (a registry does not follow another
|
|
750
|
+
registry).
|
|
@@ -86,7 +86,7 @@ What it asks of you, and what it will not guess:
|
|
|
86
86
|
| `service_id` and `authority` | to write or announce |
|
|
87
87
|
| `qos_profile` | where the §3.3.2 row names none, as `model_entity`'s and `model_pose`'s do; the refusal lists the §3.3.3 profiles that fit, or pass a `sd.dds.Profile(...)` extension |
|
|
88
88
|
| `on_exit="keep"` or `"withdraw"` | on every latched, keyed writer: whether a record outlives its writer is a claim only you can make |
|
|
89
|
-
| `withdraw(key, reason
|
|
89
|
+
| `withdraw(key, reason=..., **changes)` | with an empty reason, or a change to the members it sets itself or to the key |
|
|
90
90
|
|
|
91
91
|
And what it does without being asked:
|
|
92
92
|
|
|
@@ -574,6 +574,35 @@ explicitly was tried first and is what missed two paths.
|
|
|
574
574
|
|
|
575
575
|
If your clients are not browsers, nothing here changes anything for you.
|
|
576
576
|
|
|
577
|
+
## New in 0.8.0: a world from HTTP
|
|
578
|
+
|
|
579
|
+
The `entity` lane is publishable, and so is any keyed type a deployment
|
|
580
|
+
registers (`serve --extension MODULE`), so a browser or curl can populate an
|
|
581
|
+
OWM scene. A DECLARED or AUTHORED entity holds until withdrawn. An OBSERVED or
|
|
582
|
+
DERIVED one declares how often it will be said again, `?refresh=<seconds>`,
|
|
583
|
+
and when nobody says it again the gateway withdraws it, a terminal sample and
|
|
584
|
+
then a dispose, "refresh lapsed". A claim's asserter is the bearer token's
|
|
585
|
+
principal. With `serve --dds-domain N` the gateway writes all of it to a DDS
|
|
586
|
+
bus too, from its own participant. The record lanes are unchanged. The rules
|
|
587
|
+
and a measured session are in
|
|
588
|
+
[docs/PUBLISH.md](https://github.com/OpenArCloud/spatialdds-py/blob/main/docs/PUBLISH.md#world-lanes-entities-and-claims-080).
|
|
589
|
+
|
|
590
|
+
## New in 0.7.4: what the first extension found
|
|
591
|
+
|
|
592
|
+
A deployment's own type, registered with `sd.dds.extend()`, is now served
|
|
593
|
+
the way a pinned one is. The gateway publishes a schema for it, written from
|
|
594
|
+
the model it decodes the type with by the specification generator's rules,
|
|
595
|
+
because N.2 requires a schema for every type an endpoint serves. A
|
|
596
|
+
recording's extension lane is served latched when its writer opened it so,
|
|
597
|
+
and `serve --public FQN` opens it to uncredentialed readers.
|
|
598
|
+
|
|
599
|
+
- `withdraw(key, reason=..., **changes)` sets other members on the terminal
|
|
600
|
+
sample, such as a closed validity interval.
|
|
601
|
+
- `close()` finishes when a reader is slow to acknowledge (cyclonedds-python
|
|
602
|
+
11.0.1 raised on that timeout).
|
|
603
|
+
- `sd.stamp` keeps `nanosec` in range, and floors a time before the epoch.
|
|
604
|
+
- `sd.dds.extensions()` and `sd.dds.extension_of()` are exported.
|
|
605
|
+
|
|
577
606
|
## New in 0.7.3: what the first migration found
|
|
578
607
|
|
|
579
608
|
Mostly additive; one fix changes bytes. Every frame this package builds now
|
|
@@ -651,7 +680,7 @@ Two changes may need a line of yours:
|
|
|
651
680
|
The security fixes, the limits table and the details are in the
|
|
652
681
|
[changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
|
|
653
682
|
|
|
654
|
-
## Not in 0.
|
|
683
|
+
## Not in 0.8.0
|
|
655
684
|
|
|
656
685
|
Stated so nobody waits for them:
|
|
657
686
|
|
|
@@ -683,8 +712,11 @@ supplied. That second form is `sd.asset_ref`. A published release has to stay
|
|
|
683
712
|
reproducible from a public commit, so the API could not change under the same
|
|
684
713
|
number.
|
|
685
714
|
|
|
686
|
-
On the registry,
|
|
687
|
-
|
|
688
|
-
advice to caches), **per-
|
|
689
|
-
**
|
|
690
|
-
**
|
|
715
|
+
On the registry, these are deferred rather than missing, and each is on the
|
|
716
|
+
1.9 candidates list: **leases for records** (world lanes have them since
|
|
717
|
+
0.8.0; a record's `ttl_sec` is still advice to caches), **per-record
|
|
718
|
+
ownership** (a token is scoped to scenes, and within a scene to everything),
|
|
719
|
+
**server-set identity for records** (a claim's asserter comes from the
|
|
720
|
+
credential since 0.8.0; a record's `provider_id` is whatever the publisher
|
|
721
|
+
says), and **upstream subscriptions** (a registry does not follow another
|
|
722
|
+
registry).
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "spatialdds"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.8.0"
|
|
8
8
|
description = "SpatialDDS for programs: a client for the web binding (Appendix N), a native DDS participant, and the reference registry behind one command."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -41,7 +41,7 @@ __all__ = [
|
|
|
41
41
|
"participant", "MissingExtra", "dds", "events", "frames", "Recency",
|
|
42
42
|
]
|
|
43
43
|
|
|
44
|
-
__version__ = "0.
|
|
44
|
+
__version__ = "0.8.0"
|
|
45
45
|
#: The SpatialDDS-spec commit whose Appendix N and generated artifacts this
|
|
46
46
|
#: package implements. Package versions and specification versions move
|
|
47
47
|
#: independently; this is the one that says what the wire looks like.
|
|
@@ -14,4 +14,4 @@ border-bottom:1px solid var(--line)}p{margin:.35rem 0}.mut,.sum .auth{color:
|
|
|
14
14
|
var(--mut)}.auth{font-size:.85rem;margin-left:.4rem}.v{display:inline-block;
|
|
15
15
|
min-width:4.2rem;font:600 12px ui-monospace,monospace;letter-spacing:.04em;
|
|
16
16
|
color:var(--acc)}.codes{font:12px ui-monospace,monospace;color:var(--mut)}
|
|
17
|
-
.s{margin-right:.5rem}.s4,.s5{color:#b5482c}a{color:var(--acc)}</style></head><body><main><h1>SpatialDDS web binding (spatialdds-py)</h1><p class=mut>Version 0.7.3 · OpenAPI 3.1.0 · generated, never hand-written · <a href='openapi'>openapi.yaml</a></p><p>Generated by <code>tools/gen_openapi.py</code> from the gateway's own tables and the published JSON Schemas; never edited by hand. Reads are open; writes take a bearer token scoped to scenes. The WebSocket streams (N.5) are described on each collection path, not modelled.</p><h2>Operations</h2><section id="search"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/search</code></h3><p class="sum">Services near a geohash (§8.2.3 manifests) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="searchPost"><h3><span class="v post">POST</span> <code>/.well-known/spatialdds/search</code></h3><p class="sum">The same search, as a POST body <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="listSchemas"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/schemas</code></h3><p class="sum">The published JSON Schemas, by type <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="getSchema"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/schemas/{type}</code></h3><p class="sum"> <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="bootstrap"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/bootstrap</code></h3><p class="sum">DDS-join material (N.2); optional <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="resolverMetadata"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/resolver</code></h3><p class="sum">§7.5.2 resolver metadata <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="openapi"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/openapi</code></h3><p class="sum">This document <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="openapiPage"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/openapi.html</code></h3><p class="sum">This document as a static reference page <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="resolve"><h3><span class="v get">GET</span> <code>/spatialdds/resolve</code></h3><p class="sum">Resolve a URI to its manifest (§7.5.2) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">400</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putManifest"><h3><span class="v put">PUT</span> <code>/spatialdds/resolve</code></h3><p class="sum">Publish a manifest, keyed by its own <code>id</code> <span class="auth">token</span></p><p>The <code>uri</code> parameter is not used; the body's <code>id</code> is the key. Its scene segment is the lane. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>).</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawManifest"><h3><span class="v delete">DELETE</span> <code>/spatialdds/resolve</code></h3><p class="sum">Withdraw a manifest; <code>resolve</code> then answers 404 <span class="auth">token</span></p><p>Owner-checked by the URI's scene segment. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>).</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="getAsset"><h3><span class="v get">GET</span> <code>/assets/{name}</code></h3><p class="sum">Asset bytes this endpoint hosts (implementation-defined) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="listAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/announce/v1</code></h3><p class="sum">Every spatial.disco.Announce instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandAnnounce"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/announce/v1</code></h3><p class="sum">An N.6 command addressed through the announce lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">One spatial.disco.Announce instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putAnnounce"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.disco.Announce <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body's key must equal the URL's. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawAnnounce"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.disco.Announce <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection's WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listContentAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/content_announce/v1</code></h3><p class="sum">Every spatial.disco.ContentAnnounce instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandContentAnnounce"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/content_announce/v1</code></h3><p class="sum">An N.6 command addressed through the content_announce lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getContentAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">One spatial.disco.ContentAnnounce instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putContentAnnounce"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.disco.ContentAnnounce <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body's key must equal the URL's. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawContentAnnounce"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.disco.ContentAnnounce <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection's WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listGeoAnchor"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/geo_anchor/v1</code></h3><p class="sum">Every spatial.core.GeoAnchor instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandGeoAnchor"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/geo_anchor/v1</code></h3><p class="sum">An N.6 command addressed through the geo_anchor lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getGeoAnchor"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">One spatial.core.GeoAnchor instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putGeoAnchor"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.core.GeoAnchor <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body's key must equal the URL's. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawGeoAnchor"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.core.GeoAnchor <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection's WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listInstances"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/{type}/{version}</code></h3><p class="sum">Any other served topic, read-only <span class="auth">token for operator-scoped</span></p><p>Latched types answer with the latched set; streamed types with the replayed window. Public or operator-scoped per the type: <code>spatial.core.FrameTransform</code> latched public, <code>spatial.events.CrossingLine</code> latched public, <code>spatial.events.SpatialEvent</code> stream bearer, <code>spatial.events.SpatialZone</code> latched public, <code>spatial.owm.Entity</code> latched bearer, <code>spatial.owm.ModelPose</code> stream bearer, <code>spatial.semantics.Detection2DSet</code> stream bearer, <code>spatial.semantics.Detection3DSet</code> stream bearer, <code>spatial.semantics.FusedTrackSet</code> stream bearer. **The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listWellKnownInstances"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/{stream}/{type}/{version}</code></h3><p class="sum">A four-segment topic's collection <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/<stream>/<type>/<version></code>, no scene), such as the discovery announce lane, served exactly as a scene-scoped collection is: latched set, <code>ETag</code>, <code>304</code>, the same access classes, and the N.5 stream by upgrading the same path. Read-only: a topic with no scene is in no lane. **The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="getWellKnownInstance"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/{stream}/{type}/{version}/{key}</code></h3><p class="sum">One instance of a four-segment topic <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/<stream>/<type>/<version></code>, no scene), such as the discovery announce lane, served exactly as a scene-scoped collection is: latched set, <code>ETag</code>, <code>304</code>, the same access classes, and the N.5 stream by upgrading the same path. Read-only: a topic with no scene is in no lane. </p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><h2>Schemas</h2><p class=mut>115 components, from the published JSON Schemas at <code>/.well-known/spatialdds/schemas</code>.</p></main></body></html>
|
|
17
|
+
.s{margin-right:.5rem}.s4,.s5{color:#b5482c}a{color:var(--acc)}</style></head><body><main><h1>SpatialDDS web binding (spatialdds-py)</h1><p class=mut>Version 0.8.0 · OpenAPI 3.1.0 · generated, never hand-written · <a href='openapi'>openapi.yaml</a></p><p>Generated by <code>tools/gen_openapi.py</code> from the gateway's own tables and the published JSON Schemas; never edited by hand. Reads are open; writes take a bearer token scoped to scenes. The WebSocket streams (N.5) are described on each collection path, not modelled. A deployment's own keyed types (<code>serve --extension</code>) are publishable on their own collection paths, under the same rules as the entity lane when they carry <code>basis</code>, <code>state</code>, <code>state_reason</code> and <code>stamp</code>; a type that names an <code>asserter</code> has it stamped or verified as the bearer token's principal (<code>asserter-not-principal</code>, <code>asserter-ungrounded</code>). Their paths are not listed here, because the deployment chooses them.</p><h2>Operations</h2><section id="search"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/search</code></h3><p class="sum">Services near a geohash (§8.2.3 manifests) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="searchPost"><h3><span class="v post">POST</span> <code>/.well-known/spatialdds/search</code></h3><p class="sum">The same search, as a POST body <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="listSchemas"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/schemas</code></h3><p class="sum">The published JSON Schemas, by type <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="getSchema"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/schemas/{type}</code></h3><p class="sum"> <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="bootstrap"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/bootstrap</code></h3><p class="sum">DDS-join material (N.2); optional <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="resolverMetadata"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/resolver</code></h3><p class="sum">§7.5.2 resolver metadata <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="openapi"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/openapi</code></h3><p class="sum">This document <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="openapiPage"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/openapi.html</code></h3><p class="sum">This document as a static reference page <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="resolve"><h3><span class="v get">GET</span> <code>/spatialdds/resolve</code></h3><p class="sum">Resolve a URI to its manifest (§7.5.2) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">400</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putManifest"><h3><span class="v put">PUT</span> <code>/spatialdds/resolve</code></h3><p class="sum">Publish a manifest, keyed by its own <code>id</code> <span class="auth">token</span></p><p>The <code>uri</code> parameter is not used; the body's <code>id</code> is the key. Its scene segment is the lane. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>).</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawManifest"><h3><span class="v delete">DELETE</span> <code>/spatialdds/resolve</code></h3><p class="sum">Withdraw a manifest; <code>resolve</code> then answers 404 <span class="auth">token</span></p><p>Owner-checked by the URI's scene segment. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>).</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="getAsset"><h3><span class="v get">GET</span> <code>/assets/{name}</code></h3><p class="sum">Asset bytes this endpoint hosts (implementation-defined) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="listAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/announce/v1</code></h3><p class="sum">Every spatial.disco.Announce instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandAnnounce"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/announce/v1</code></h3><p class="sum">An N.6 command addressed through the announce lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">One spatial.disco.Announce instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putAnnounce"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.disco.Announce <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body's key must equal the URL's. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawAnnounce"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.disco.Announce <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection's WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listContentAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/content_announce/v1</code></h3><p class="sum">Every spatial.disco.ContentAnnounce instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandContentAnnounce"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/content_announce/v1</code></h3><p class="sum">An N.6 command addressed through the content_announce lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getContentAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">One spatial.disco.ContentAnnounce instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putContentAnnounce"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.disco.ContentAnnounce <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body's key must equal the URL's. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawContentAnnounce"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.disco.ContentAnnounce <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection's WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listEntity"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/entity/v1</code></h3><p class="sum">Every spatial.owm.Entity instance in the latched set <span class="auth">token</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandEntity"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/entity/v1</code></h3><p class="sum">An N.6 command addressed through the entity lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getEntity"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/entity/v1/{key}</code></h3><p class="sum">One spatial.owm.Entity instance <span class="auth">token</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putEntity"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/entity/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.owm.Entity <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body's key must equal the URL's. <code>If-Match</code> is honoured when present. **Basis gates liveliness.** A DECLARED or AUTHORED body is a declaration and holds until withdrawn; it takes no <code>refresh</code>. An DERIVED or OBSERVED body must declare <code>refresh</code>, and be PUT again within it; when it lapses the gateway withdraws the instance itself, a terminal sample (RETIRED) then the dispose, both with the reason <code>refresh lapsed</code>. On a gateway with a DDS domain the instance is written there too, from the gateway's own participant.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s5">503</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="withdrawEntity"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/entity/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.owm.Entity <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). A terminal sample (RETIRED, with the reason) streams first, then the dispose with its <code>reason</code>, on the collection's WebSocket and, on a gateway with a DDS domain, on the bus.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listGeoAnchor"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/geo_anchor/v1</code></h3><p class="sum">Every spatial.core.GeoAnchor instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandGeoAnchor"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/geo_anchor/v1</code></h3><p class="sum">An N.6 command addressed through the geo_anchor lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getGeoAnchor"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">One spatial.core.GeoAnchor instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putGeoAnchor"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.core.GeoAnchor <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body's key must equal the URL's. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawGeoAnchor"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.core.GeoAnchor <span class="auth">token</span></p><p>**Writes are per lane.** The path's first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection's WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listInstances"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/{type}/{version}</code></h3><p class="sum">Any other served topic, read-only <span class="auth">token for operator-scoped</span></p><p>Latched types answer with the latched set; streamed types with the replayed window. Public or operator-scoped per the type: <code>spatial.core.FrameTransform</code> latched public, <code>spatial.events.CrossingLine</code> latched public, <code>spatial.events.SpatialEvent</code> stream bearer, <code>spatial.events.SpatialZone</code> latched public, <code>spatial.owm.ModelPose</code> stream bearer, <code>spatial.semantics.Detection2DSet</code> stream bearer, <code>spatial.semantics.Detection3DSet</code> stream bearer, <code>spatial.semantics.FusedTrackSet</code> stream bearer. **The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listWellKnownInstances"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/{stream}/{type}/{version}</code></h3><p class="sum">A four-segment topic's collection <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/<stream>/<type>/<version></code>, no scene), such as the discovery announce lane, served exactly as a scene-scoped collection is: latched set, <code>ETag</code>, <code>304</code>, the same access classes, and the N.5 stream by upgrading the same path. Read-only: a topic with no scene is in no lane. **The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="getWellKnownInstance"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/{stream}/{type}/{version}/{key}</code></h3><p class="sum">One instance of a four-segment topic <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/<stream>/<type>/<version></code>, no scene), such as the discovery announce lane, served exactly as a scene-scoped collection is: latched set, <code>ETag</code>, <code>304</code>, the same access classes, and the N.5 stream by upgrading the same path. Read-only: a topic with no scene is in no lane. </p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><h2>Schemas</h2><p class=mut>115 components, from the published JSON Schemas at <code>/.well-known/spatialdds/schemas</code>.</p></main></body></html>
|