spatialdds 0.7.0__tar.gz → 0.7.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. {spatialdds-0.7.0 → spatialdds-0.7.2}/PKG-INFO +46 -3
  2. {spatialdds-0.7.0 → spatialdds-0.7.2}/README.md +45 -2
  3. {spatialdds-0.7.0 → spatialdds-0.7.2}/pyproject.toml +1 -1
  4. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/__init__.py +1 -1
  5. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/openapi.html +1 -1
  6. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/openapi.yaml +1 -1
  7. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/__init__.py +4 -0
  8. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/_participant.py +410 -116
  9. spatialdds-0.7.2/spatialdds/dds/codec.py +333 -0
  10. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/qos.py +10 -3
  11. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/record.py +4 -1
  12. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/registry.py +53 -0
  13. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/records.py +11 -2
  14. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds.egg-info/PKG-INFO +46 -3
  15. spatialdds-0.7.0/spatialdds/dds/codec.py +0 -154
  16. {spatialdds-0.7.0 → spatialdds-0.7.2}/setup.cfg +0 -0
  17. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/anchors.idl +0 -0
  18. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/argeo.idl +0 -0
  19. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/common.idl +0 -0
  20. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/core.idl +0 -0
  21. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/discovery.idl +0 -0
  22. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/events.idl +0 -0
  23. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/lidar.idl +0 -0
  24. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/mapping.idl +0 -0
  25. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/provisional/owm.idl +0 -0
  26. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/provisional/radio.idl +0 -0
  27. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/provisional/rf_beam.idl +0 -0
  28. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/rad.idl +0 -0
  29. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/semantics.idl +0 -0
  30. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/slam_frontend.idl +0 -0
  31. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/types.idl +0 -0
  32. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/vio.idl +0 -0
  33. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/idl/vision.idl +0 -0
  34. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/registry.json +0 -0
  35. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/builtin_Time.json +0 -0
  36. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_anchors_AnchorDelta.json +0 -0
  37. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_anchors_AnchorEntry.json +0 -0
  38. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSet.json +0 -0
  39. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSetRequest.json +0 -0
  40. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSetResponse.json +0 -0
  41. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_argeo_NodeGeo.json +0 -0
  42. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_argeo_QualityRequirements.json +0 -0
  43. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_argeo_VpsRequest.json +0 -0
  44. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_argeo_VpsResponse.json +0 -0
  45. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_common_AssetRef.json +0 -0
  46. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_common_FrameRef.json +0 -0
  47. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_common_KV.json +0 -0
  48. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_common_MetaKV.json +0 -0
  49. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_common_Vec2.json +0 -0
  50. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_Aabb3.json +0 -0
  51. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_BlobChunk.json +0 -0
  52. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_BlobRef.json +0 -0
  53. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_ComponentRef.json +0 -0
  54. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_Edge.json +0 -0
  55. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_EntityBinding.json +0 -0
  56. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_FrameTransform.json +0 -0
  57. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_FramedPose.json +0 -0
  58. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_GeoAnchor.json +0 -0
  59. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_GeoPose.json +0 -0
  60. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_NavSatStatus.json +0 -0
  61. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_Node.json +0 -0
  62. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_PlannedTrajectory.json +0 -0
  63. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_PlannedWaypoint.json +0 -0
  64. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_PoseSE3.json +0 -0
  65. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_SnapshotRequest.json +0 -0
  66. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_SnapshotResponse.json +0 -0
  67. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_TileKey.json +0 -0
  68. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_TileMeta.json +0 -0
  69. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_core_TilePatch.json +0 -0
  70. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_Announce.json +0 -0
  71. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_Capabilities.json +0 -0
  72. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_ContentAnnounce.json +0 -0
  73. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_CoverageElement.json +0 -0
  74. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_CoverageFilter.json +0 -0
  75. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_CoverageHint.json +0 -0
  76. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_CoverageQuery.json +0 -0
  77. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_CoverageResponse.json +0 -0
  78. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_Depart.json +0 -0
  79. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_KV.json +0 -0
  80. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_ProfileSupport.json +0 -0
  81. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_ServiceSummary.json +0 -0
  82. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_TopicMeta.json +0 -0
  83. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_Transform.json +0 -0
  84. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_disco_ValidityWindow.json +0 -0
  85. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_events_CrossingLine.json +0 -0
  86. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_events_SpatialEvent.json +0 -0
  87. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_events_SpatialZone.json +0 -0
  88. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_events_ZoneState.json +0 -0
  89. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_mapping_Edge.json +0 -0
  90. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_mapping_MapAlignment.json +0 -0
  91. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_mapping_MapEvent.json +0 -0
  92. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_mapping_MapMeta.json +0 -0
  93. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_mapping_MapQuality.json +0 -0
  94. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_owm_Entity.json +0 -0
  95. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_owm_ModelCommand.json +0 -0
  96. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_owm_ModelPose.json +0 -0
  97. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_semantics_Detection2D.json +0 -0
  98. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_semantics_Detection2DSet.json +0 -0
  99. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_semantics_Detection3D.json +0 -0
  100. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_semantics_Detection3DSet.json +0 -0
  101. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_semantics_FusedTrack.json +0 -0
  102. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_semantics_FusedTrackSet.json +0 -0
  103. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_semantics_Keypoint3D.json +0 -0
  104. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_semantics_KeypointLink.json +0 -0
  105. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_common_Axis.json +0 -0
  106. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_common_FrameHeader.json +0 -0
  107. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_common_FrameQuality.json +0 -0
  108. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_common_Linspace.json +0 -0
  109. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_common_ROI.json +0 -0
  110. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_common_ROIReply.json +0 -0
  111. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_common_ROIRequest.json +0 -0
  112. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_common_StreamMeta.json +0 -0
  113. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarDetection.json +0 -0
  114. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarDetectionSet.json +0 -0
  115. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarFrame.json +0 -0
  116. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarMeta.json +0 -0
  117. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadDetection.json +0 -0
  118. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadDetectionSet.json +0 -0
  119. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadSensorMeta.json +0 -0
  120. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadTensorFrame.json +0 -0
  121. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadTensorMeta.json +0 -0
  122. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioObservation.json +0 -0
  123. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioScan.json +0 -0
  124. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioSensorMeta.json +0 -0
  125. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamArraySet.json +0 -0
  126. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamFrame.json +0 -0
  127. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamMeta.json +0 -0
  128. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_vision_CamIntrinsics.json +0 -0
  129. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_vision_Keypoint2D.json +0 -0
  130. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_vision_Track2D.json +0 -0
  131. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionDetections.json +0 -0
  132. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionFrame.json +0 -0
  133. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionMeta.json +0 -0
  134. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_slam_frontend_CameraInfo.json +0 -0
  135. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_slam_frontend_Feature2D.json +0 -0
  136. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_slam_frontend_FeatureMatch.json +0 -0
  137. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_slam_frontend_KeyframeFeatures.json +0 -0
  138. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_slam_frontend_Landmark.json +0 -0
  139. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_slam_frontend_MatchSet.json +0 -0
  140. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_slam_frontend_TrackObs.json +0 -0
  141. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_slam_frontend_Tracklet.json +0 -0
  142. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_vio_FusedState.json +0 -0
  143. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_vio_ImuInfo.json +0 -0
  144. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_vio_ImuSample.json +0 -0
  145. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_vio_MagnetometerSample.json +0 -0
  146. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/schemas/spatial_vio_SensorFusionSample.json +0 -0
  147. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/artifacts/serializer_tables.json +0 -0
  148. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/canonical.py +0 -0
  149. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/canonjson.py +0 -0
  150. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/client.py +0 -0
  151. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/_extra.py +0 -0
  152. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/blob.py +0 -0
  153. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/__init__.py +0 -0
  154. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/_field_aliases.py +0 -0
  155. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/builtin/__init__.py +0 -0
  156. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/builtin/_types.py +0 -0
  157. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/__init__.py +0 -0
  158. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/anchors/__init__.py +0 -0
  159. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/anchors/_anchors.py +0 -0
  160. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/argeo/__init__.py +0 -0
  161. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/argeo/_argeo.py +0 -0
  162. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/common/__init__.py +0 -0
  163. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/common/_types.py +0 -0
  164. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/core/GnssService/__init__.py +0 -0
  165. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/core/GnssService/_core.py +0 -0
  166. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/core/__init__.py +0 -0
  167. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/core/_core.py +0 -0
  168. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/disco/__init__.py +0 -0
  169. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/disco/_discovery.py +0 -0
  170. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/__init__.py +0 -0
  171. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/_events.py +0 -0
  172. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/__init__.py +0 -0
  173. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/crossing_direction_enum/__init__.py +0 -0
  174. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/crossing_direction_enum/_events.py +0 -0
  175. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/event_state_enum/__init__.py +0 -0
  176. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/event_state_enum/_events.py +0 -0
  177. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/event_type_enum/__init__.py +0 -0
  178. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/event_type_enum/_events.py +0 -0
  179. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/severity_enum/__init__.py +0 -0
  180. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/severity_enum/_events.py +0 -0
  181. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/zone_kind_enum/__init__.py +0 -0
  182. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/events/enums/zone_kind_enum/_events.py +0 -0
  183. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/__init__.py +0 -0
  184. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/_mapping.py +0 -0
  185. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/__init__.py +0 -0
  186. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/alignment_method/__init__.py +0 -0
  187. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/alignment_method/_mapping.py +0 -0
  188. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/edge_type/__init__.py +0 -0
  189. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/edge_type/_mapping.py +0 -0
  190. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/map_event_kind/__init__.py +0 -0
  191. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/map_event_kind/_mapping.py +0 -0
  192. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/map_kind/__init__.py +0 -0
  193. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/map_kind/_mapping.py +0 -0
  194. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/map_status/__init__.py +0 -0
  195. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/mapping/enums/map_status/_mapping.py +0 -0
  196. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/owm/__init__.py +0 -0
  197. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/owm/_owm.py +0 -0
  198. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/semantics/__init__.py +0 -0
  199. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/semantics/_semantics.py +0 -0
  200. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/__init__.py +0 -0
  201. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/common/__init__.py +0 -0
  202. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/common/_common.py +0 -0
  203. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/lidar/__init__.py +0 -0
  204. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/lidar/_lidar.py +0 -0
  205. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/rad/__init__.py +0 -0
  206. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/rad/_rad.py +0 -0
  207. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/radio/__init__.py +0 -0
  208. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/radio/_radio.py +0 -0
  209. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/rf_beam/__init__.py +0 -0
  210. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/rf_beam/_rf_beam.py +0 -0
  211. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/vision/__init__.py +0 -0
  212. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/sensing/vision/_vision.py +0 -0
  213. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/slam_frontend/__init__.py +0 -0
  214. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/slam_frontend/_slam_frontend.py +0 -0
  215. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/vio/__init__.py +0 -0
  216. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/dds/types/spatial/vio/_vio.py +0 -0
  217. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/demo/assets/duck.gltf +0 -0
  218. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/demo/assets/fountain-label.txt +0 -0
  219. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/demo/assets/fountain-marker.gltf +0 -0
  220. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/demo/fountain-anchors.mcap +0 -0
  221. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/demo/manifests/content-fountain-label.json +0 -0
  222. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/demo/manifests/content-fountain-marker.json +0 -0
  223. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/errors.py +0 -0
  224. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/events.py +0 -0
  225. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/frames.py +0 -0
  226. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/journal.py +0 -0
  227. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/recency.py +0 -0
  228. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/serve.py +0 -0
  229. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/__init__.py +0 -0
  230. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/commands.py +0 -0
  231. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/gateway.py +0 -0
  232. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/gw_http.py +0 -0
  233. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/idlmodel.py +0 -0
  234. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/limits.py +0 -0
  235. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/mcapmeta.py +0 -0
  236. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/pin.py +0 -0
  237. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/publish.py +0 -0
  238. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/tenancy.py +0 -0
  239. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/webjson.py +0 -0
  240. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/server/xcdr2.py +0 -0
  241. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds/tokens.py +0 -0
  242. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds.egg-info/SOURCES.txt +0 -0
  243. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds.egg-info/dependency_links.txt +0 -0
  244. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds.egg-info/entry_points.txt +0 -0
  245. {spatialdds-0.7.0 → spatialdds-0.7.2}/spatialdds.egg-info/requires.txt +0 -0
  246. {spatialdds-0.7.0 → spatialdds-0.7.2}/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.7.0
3
+ Version: 0.7.2
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
@@ -131,6 +131,32 @@ And what it does without being asked:
131
131
  - **Every sample is validated** against the published JSON Schema before it is
132
132
  written.
133
133
 
134
+ For a program that already owns its loop, or reads lanes beyond its own
135
+ scene:
136
+
137
+ - **`reader.take()`** returns what has arrived, now, without blocking: the
138
+ same events as `events()`, with the same single `EndOfReplay`. It is for a
139
+ tick, a framework's timer, or a request handler.
140
+ - **`topic=`** on `writer()` and `reader()` gives the whole name, for another
141
+ scene's lane or one the spec names only by example. It is held to §3.3.1's
142
+ grammar, and a templated type to its template. `history=` sets a reader's
143
+ own cache, for a reply reader that must keep every reply.
144
+ - **`ignore_local=True`** on a reader drops the participant's own writes, for
145
+ a bridge that writes and reads one lane. **`matched()`** and
146
+ **`wait_matched()`** on writers and readers count the other side.
147
+ - **`p.announce(transforms=...)`** carries the service's frame placement.
148
+ `service_id=` and `topics=` announce several services from one
149
+ participant.
150
+ - **`p.relay()`** re-publishes other services' announces. It uses a writer of
151
+ its own and marks each with a `relayed_by` hint naming the relay, so it
152
+ never speaks as the asserter.
153
+ - **`sd.dds.class_for(name)`** is the generated class for a registered type
154
+ name, a well-known message or a dotted identity.
155
+ - **`sd.dds.extend(name, cls, idl)`** registers a deployment's own type, with
156
+ the IDL it was generated from. After that it converts, keys, records and
157
+ opens by name like a pinned type, and validation checks N.1
158
+ representability, since it has no published schema.
159
+
134
160
  `Sample.data` is the typed sample (`sd.dds.types` carries every type in the
135
161
  pinned IDL). `sd.dds.to_json(sample)` is its N.1 form, produced by the gateway's
136
162
  own codec, so a native sample and a served one cannot disagree.
@@ -572,6 +598,22 @@ explicitly was tried first and is what missed two paths.
572
598
 
573
599
  If your clients are not browsers, nothing here changes anything for you.
574
600
 
601
+ ## New in 0.7.2: a deployment's own types
602
+
603
+ `sd.dds.extend(name, cls, idl)` brings a deployment's own documented type
604
+ into the native layer: N.1 conversion, its key, `class_for`, the recording
605
+ tap, and opening it by name. Additive, as 0.7.1 was.
606
+
607
+ ## New in 0.7.1: for programs that own their loop
608
+
609
+ Everything SpatialDDS-demo's adoption found missing, and nothing removed:
610
+ `reader.take()`, `topic=` and `history=`, `ignore_local=`, `matched()` and
611
+ `wait_matched()`, announces that carry placement and speak for several
612
+ services, `p.relay()`, and `sd.dds.class_for()`. They are described with the
613
+ native participant at the top of this page. Nothing in 0.7.0 changed
614
+ behaviour. Details are in the
615
+ [changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
616
+
575
617
  ## New in 0.7.0: a native participant, and the v1.8 tag
576
618
 
577
619
  - **The package speaks DDS natively.** `sd.participant(...)`, under the `[dds]`
@@ -617,7 +659,7 @@ Two changes may need a line of yours:
617
659
  The security fixes, the limits table and the details are in the
618
660
  [changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
619
661
 
620
- ## Not in 0.7.0
662
+ ## Not in 0.7.2
621
663
 
622
664
  Stated so nobody waits for them:
623
665
 
@@ -626,7 +668,8 @@ Stated so nobody waits for them:
626
668
  - no retry policy;
627
669
  - no client-side command helper;
628
670
  - no request/reply machinery in the native layer. VPS and coverage queries are
629
- a documented convention until 1.9 settles their shape;
671
+ a documented convention until 1.9 settles their shape, and 0.7.1 makes
672
+ their lanes reachable;
630
673
  - no C++ or other-language port.
631
674
 
632
675
  The web client still has no DDS dependency of any kind: cyclonedds arrives
@@ -103,6 +103,32 @@ And what it does without being asked:
103
103
  - **Every sample is validated** against the published JSON Schema before it is
104
104
  written.
105
105
 
106
+ For a program that already owns its loop, or reads lanes beyond its own
107
+ scene:
108
+
109
+ - **`reader.take()`** returns what has arrived, now, without blocking: the
110
+ same events as `events()`, with the same single `EndOfReplay`. It is for a
111
+ tick, a framework's timer, or a request handler.
112
+ - **`topic=`** on `writer()` and `reader()` gives the whole name, for another
113
+ scene's lane or one the spec names only by example. It is held to §3.3.1's
114
+ grammar, and a templated type to its template. `history=` sets a reader's
115
+ own cache, for a reply reader that must keep every reply.
116
+ - **`ignore_local=True`** on a reader drops the participant's own writes, for
117
+ a bridge that writes and reads one lane. **`matched()`** and
118
+ **`wait_matched()`** on writers and readers count the other side.
119
+ - **`p.announce(transforms=...)`** carries the service's frame placement.
120
+ `service_id=` and `topics=` announce several services from one
121
+ participant.
122
+ - **`p.relay()`** re-publishes other services' announces. It uses a writer of
123
+ its own and marks each with a `relayed_by` hint naming the relay, so it
124
+ never speaks as the asserter.
125
+ - **`sd.dds.class_for(name)`** is the generated class for a registered type
126
+ name, a well-known message or a dotted identity.
127
+ - **`sd.dds.extend(name, cls, idl)`** registers a deployment's own type, with
128
+ the IDL it was generated from. After that it converts, keys, records and
129
+ opens by name like a pinned type, and validation checks N.1
130
+ representability, since it has no published schema.
131
+
106
132
  `Sample.data` is the typed sample (`sd.dds.types` carries every type in the
107
133
  pinned IDL). `sd.dds.to_json(sample)` is its N.1 form, produced by the gateway's
108
134
  own codec, so a native sample and a served one cannot disagree.
@@ -544,6 +570,22 @@ explicitly was tried first and is what missed two paths.
544
570
 
545
571
  If your clients are not browsers, nothing here changes anything for you.
546
572
 
573
+ ## New in 0.7.2: a deployment's own types
574
+
575
+ `sd.dds.extend(name, cls, idl)` brings a deployment's own documented type
576
+ into the native layer: N.1 conversion, its key, `class_for`, the recording
577
+ tap, and opening it by name. Additive, as 0.7.1 was.
578
+
579
+ ## New in 0.7.1: for programs that own their loop
580
+
581
+ Everything SpatialDDS-demo's adoption found missing, and nothing removed:
582
+ `reader.take()`, `topic=` and `history=`, `ignore_local=`, `matched()` and
583
+ `wait_matched()`, announces that carry placement and speak for several
584
+ services, `p.relay()`, and `sd.dds.class_for()`. They are described with the
585
+ native participant at the top of this page. Nothing in 0.7.0 changed
586
+ behaviour. Details are in the
587
+ [changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
588
+
547
589
  ## New in 0.7.0: a native participant, and the v1.8 tag
548
590
 
549
591
  - **The package speaks DDS natively.** `sd.participant(...)`, under the `[dds]`
@@ -589,7 +631,7 @@ Two changes may need a line of yours:
589
631
  The security fixes, the limits table and the details are in the
590
632
  [changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
591
633
 
592
- ## Not in 0.7.0
634
+ ## Not in 0.7.2
593
635
 
594
636
  Stated so nobody waits for them:
595
637
 
@@ -598,7 +640,8 @@ Stated so nobody waits for them:
598
640
  - no retry policy;
599
641
  - no client-side command helper;
600
642
  - no request/reply machinery in the native layer. VPS and coverage queries are
601
- a documented convention until 1.9 settles their shape;
643
+ a documented convention until 1.9 settles their shape, and 0.7.1 makes
644
+ their lanes reachable;
602
645
  - no C++ or other-language port.
603
646
 
604
647
  The web client still has no DDS dependency of any kind: cyclonedds arrives
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "spatialdds"
7
- version = "0.7.0"
7
+ version = "0.7.2"
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.7.0"
44
+ __version__ = "0.7.2"
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.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&#x27;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&#x27;s <code>id</code> is the key. Its scene segment is the lane. **Writes are per lane.** The path&#x27;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&#x27;s scene segment. **Writes are per lane.** The path&#x27;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&#x27;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&#x27;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&#x27;s key must equal the URL&#x27;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&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;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&#x27;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&#x27;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&#x27;s key must equal the URL&#x27;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&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;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&#x27;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&#x27;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&#x27;s key must equal the URL&#x27;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&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;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&#x27;s collection <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/&lt;stream&gt;/&lt;type&gt;/&lt;version&gt;</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/&lt;stream&gt;/&lt;type&gt;/&lt;version&gt;</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.7.2 · 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&#x27;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&#x27;s <code>id</code> is the key. Its scene segment is the lane. **Writes are per lane.** The path&#x27;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&#x27;s scene segment. **Writes are per lane.** The path&#x27;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&#x27;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&#x27;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&#x27;s key must equal the URL&#x27;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&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;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&#x27;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&#x27;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&#x27;s key must equal the URL&#x27;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&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;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&#x27;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&#x27;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&#x27;s key must equal the URL&#x27;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&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;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&#x27;s collection <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/&lt;stream&gt;/&lt;type&gt;/&lt;version&gt;</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/&lt;stream&gt;/&lt;type&gt;/&lt;version&gt;</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>
@@ -2,7 +2,7 @@
2
2
  openapi: 3.1.0
3
3
  info:
4
4
  title: SpatialDDS web binding (spatialdds-py)
5
- version: 0.7.0
5
+ version: 0.7.2
6
6
  summary: SpatialDDS 1.8 Appendix N over HTTPS, plus this endpoint's write surface.
7
7
  description: Generated by `tools/gen_openapi.py` 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.
8
8
  servers:
@@ -26,8 +26,10 @@ from ._extra import MissingExtra, require_cyclonedds
26
26
  __all__ = [
27
27
  "MissingExtra", "require_cyclonedds",
28
28
  "participant", "Participant", "Writer", "Reader", "ParticipantRefused",
29
+ "AnnounceRelay", "RELAYED_BY",
29
30
  "ON_EXIT", "DOMAIN_ENV",
30
31
  "to_json", "from_json", "validate", "SchemaInvalid", "fqn_of", "key_of",
32
+ "class_for", "extend", "Extension",
31
33
  "registry", "Profile", "RegistryError", "topic_name",
32
34
  "ANNOUNCE", "DEPART", "CONTENT", "QUERY", "COVERAGE_HINT",
33
35
  "Recorder", "chunk", "Reassembler", "CorruptChunk", "blob_ref",
@@ -45,9 +47,11 @@ _FROM = {
45
47
  "participant": "_participant", "Participant": "_participant",
46
48
  "Writer": "_participant", "Reader": "_participant",
47
49
  "ParticipantRefused": "_participant", "ON_EXIT": "_participant",
50
+ "AnnounceRelay": "_participant", "RELAYED_BY": "_participant",
48
51
  "DOMAIN_ENV": "_participant",
49
52
  "to_json": "codec", "from_json": "codec", "validate": "codec",
50
53
  "SchemaInvalid": "codec", "fqn_of": "codec", "key_of": "codec",
54
+ "class_for": "codec", "extend": "codec", "Extension": "codec",
51
55
  "Profile": "registry", "RegistryError": "registry",
52
56
  "topic_name": "registry",
53
57
  "Recorder": "record",