spatialdds 0.7.1__tar.gz → 0.7.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. {spatialdds-0.7.1 → spatialdds-0.7.3}/PKG-INFO +35 -5
  2. {spatialdds-0.7.1 → spatialdds-0.7.3}/README.md +34 -4
  3. {spatialdds-0.7.1 → spatialdds-0.7.3}/pyproject.toml +1 -1
  4. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/__init__.py +1 -1
  5. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/openapi.html +1 -1
  6. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/openapi.yaml +1 -1
  7. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/registry.json +43 -0
  8. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/__init__.py +5 -4
  9. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/_participant.py +67 -16
  10. spatialdds-0.7.3/spatialdds/dds/codec.py +377 -0
  11. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/record.py +4 -1
  12. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/registry.py +34 -4
  13. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/demo/manifests/content-fountain-label.json +1 -1
  14. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/demo/manifests/content-fountain-marker.json +1 -1
  15. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/records.py +22 -5
  16. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/gateway.py +9 -2
  17. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/xcdr2.py +7 -2
  18. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds.egg-info/PKG-INFO +35 -5
  19. spatialdds-0.7.1/spatialdds/dds/codec.py +0 -183
  20. {spatialdds-0.7.1 → spatialdds-0.7.3}/setup.cfg +0 -0
  21. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/anchors.idl +0 -0
  22. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/argeo.idl +0 -0
  23. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/common.idl +0 -0
  24. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/core.idl +0 -0
  25. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/discovery.idl +0 -0
  26. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/events.idl +0 -0
  27. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/lidar.idl +0 -0
  28. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/mapping.idl +0 -0
  29. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/provisional/owm.idl +0 -0
  30. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/provisional/radio.idl +0 -0
  31. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/provisional/rf_beam.idl +0 -0
  32. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/rad.idl +0 -0
  33. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/semantics.idl +0 -0
  34. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/slam_frontend.idl +0 -0
  35. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/types.idl +0 -0
  36. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/vio.idl +0 -0
  37. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/idl/vision.idl +0 -0
  38. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/builtin_Time.json +0 -0
  39. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_anchors_AnchorDelta.json +0 -0
  40. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_anchors_AnchorEntry.json +0 -0
  41. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSet.json +0 -0
  42. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSetRequest.json +0 -0
  43. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSetResponse.json +0 -0
  44. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_argeo_NodeGeo.json +0 -0
  45. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_argeo_QualityRequirements.json +0 -0
  46. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_argeo_VpsRequest.json +0 -0
  47. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_argeo_VpsResponse.json +0 -0
  48. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_common_AssetRef.json +0 -0
  49. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_common_FrameRef.json +0 -0
  50. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_common_KV.json +0 -0
  51. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_common_MetaKV.json +0 -0
  52. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_common_Vec2.json +0 -0
  53. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_Aabb3.json +0 -0
  54. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_BlobChunk.json +0 -0
  55. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_BlobRef.json +0 -0
  56. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_ComponentRef.json +0 -0
  57. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_Edge.json +0 -0
  58. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_EntityBinding.json +0 -0
  59. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_FrameTransform.json +0 -0
  60. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_FramedPose.json +0 -0
  61. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_GeoAnchor.json +0 -0
  62. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_GeoPose.json +0 -0
  63. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_NavSatStatus.json +0 -0
  64. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_Node.json +0 -0
  65. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_PlannedTrajectory.json +0 -0
  66. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_PlannedWaypoint.json +0 -0
  67. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_PoseSE3.json +0 -0
  68. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_SnapshotRequest.json +0 -0
  69. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_SnapshotResponse.json +0 -0
  70. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_TileKey.json +0 -0
  71. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_TileMeta.json +0 -0
  72. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_core_TilePatch.json +0 -0
  73. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_Announce.json +0 -0
  74. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_Capabilities.json +0 -0
  75. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_ContentAnnounce.json +0 -0
  76. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_CoverageElement.json +0 -0
  77. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_CoverageFilter.json +0 -0
  78. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_CoverageHint.json +0 -0
  79. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_CoverageQuery.json +0 -0
  80. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_CoverageResponse.json +0 -0
  81. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_Depart.json +0 -0
  82. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_KV.json +0 -0
  83. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_ProfileSupport.json +0 -0
  84. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_ServiceSummary.json +0 -0
  85. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_TopicMeta.json +0 -0
  86. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_Transform.json +0 -0
  87. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_disco_ValidityWindow.json +0 -0
  88. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_events_CrossingLine.json +0 -0
  89. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_events_SpatialEvent.json +0 -0
  90. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_events_SpatialZone.json +0 -0
  91. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_events_ZoneState.json +0 -0
  92. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_mapping_Edge.json +0 -0
  93. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_mapping_MapAlignment.json +0 -0
  94. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_mapping_MapEvent.json +0 -0
  95. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_mapping_MapMeta.json +0 -0
  96. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_mapping_MapQuality.json +0 -0
  97. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_owm_Entity.json +0 -0
  98. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_owm_ModelCommand.json +0 -0
  99. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_owm_ModelPose.json +0 -0
  100. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_semantics_Detection2D.json +0 -0
  101. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_semantics_Detection2DSet.json +0 -0
  102. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_semantics_Detection3D.json +0 -0
  103. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_semantics_Detection3DSet.json +0 -0
  104. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_semantics_FusedTrack.json +0 -0
  105. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_semantics_FusedTrackSet.json +0 -0
  106. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_semantics_Keypoint3D.json +0 -0
  107. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_semantics_KeypointLink.json +0 -0
  108. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_common_Axis.json +0 -0
  109. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_common_FrameHeader.json +0 -0
  110. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_common_FrameQuality.json +0 -0
  111. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_common_Linspace.json +0 -0
  112. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_common_ROI.json +0 -0
  113. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_common_ROIReply.json +0 -0
  114. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_common_ROIRequest.json +0 -0
  115. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_common_StreamMeta.json +0 -0
  116. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarDetection.json +0 -0
  117. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarDetectionSet.json +0 -0
  118. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarFrame.json +0 -0
  119. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarMeta.json +0 -0
  120. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadDetection.json +0 -0
  121. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadDetectionSet.json +0 -0
  122. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadSensorMeta.json +0 -0
  123. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadTensorFrame.json +0 -0
  124. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadTensorMeta.json +0 -0
  125. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioObservation.json +0 -0
  126. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioScan.json +0 -0
  127. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioSensorMeta.json +0 -0
  128. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamArraySet.json +0 -0
  129. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamFrame.json +0 -0
  130. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamMeta.json +0 -0
  131. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_vision_CamIntrinsics.json +0 -0
  132. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_vision_Keypoint2D.json +0 -0
  133. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_vision_Track2D.json +0 -0
  134. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionDetections.json +0 -0
  135. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionFrame.json +0 -0
  136. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionMeta.json +0 -0
  137. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_slam_frontend_CameraInfo.json +0 -0
  138. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_slam_frontend_Feature2D.json +0 -0
  139. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_slam_frontend_FeatureMatch.json +0 -0
  140. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_slam_frontend_KeyframeFeatures.json +0 -0
  141. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_slam_frontend_Landmark.json +0 -0
  142. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_slam_frontend_MatchSet.json +0 -0
  143. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_slam_frontend_TrackObs.json +0 -0
  144. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_slam_frontend_Tracklet.json +0 -0
  145. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_vio_FusedState.json +0 -0
  146. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_vio_ImuInfo.json +0 -0
  147. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_vio_ImuSample.json +0 -0
  148. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_vio_MagnetometerSample.json +0 -0
  149. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/schemas/spatial_vio_SensorFusionSample.json +0 -0
  150. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/artifacts/serializer_tables.json +0 -0
  151. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/canonical.py +0 -0
  152. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/canonjson.py +0 -0
  153. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/client.py +0 -0
  154. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/_extra.py +0 -0
  155. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/blob.py +0 -0
  156. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/qos.py +0 -0
  157. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/__init__.py +0 -0
  158. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/_field_aliases.py +0 -0
  159. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/builtin/__init__.py +0 -0
  160. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/builtin/_types.py +0 -0
  161. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/__init__.py +0 -0
  162. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/anchors/__init__.py +0 -0
  163. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/anchors/_anchors.py +0 -0
  164. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/argeo/__init__.py +0 -0
  165. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/argeo/_argeo.py +0 -0
  166. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/common/__init__.py +0 -0
  167. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/common/_types.py +0 -0
  168. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/core/GnssService/__init__.py +0 -0
  169. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/core/GnssService/_core.py +0 -0
  170. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/core/__init__.py +0 -0
  171. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/core/_core.py +0 -0
  172. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/disco/__init__.py +0 -0
  173. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/disco/_discovery.py +0 -0
  174. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/__init__.py +0 -0
  175. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/_events.py +0 -0
  176. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/__init__.py +0 -0
  177. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/crossing_direction_enum/__init__.py +0 -0
  178. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/crossing_direction_enum/_events.py +0 -0
  179. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/event_state_enum/__init__.py +0 -0
  180. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/event_state_enum/_events.py +0 -0
  181. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/event_type_enum/__init__.py +0 -0
  182. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/event_type_enum/_events.py +0 -0
  183. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/severity_enum/__init__.py +0 -0
  184. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/severity_enum/_events.py +0 -0
  185. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/zone_kind_enum/__init__.py +0 -0
  186. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/events/enums/zone_kind_enum/_events.py +0 -0
  187. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/__init__.py +0 -0
  188. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/_mapping.py +0 -0
  189. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/__init__.py +0 -0
  190. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/alignment_method/__init__.py +0 -0
  191. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/alignment_method/_mapping.py +0 -0
  192. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/edge_type/__init__.py +0 -0
  193. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/edge_type/_mapping.py +0 -0
  194. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/map_event_kind/__init__.py +0 -0
  195. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/map_event_kind/_mapping.py +0 -0
  196. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/map_kind/__init__.py +0 -0
  197. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/map_kind/_mapping.py +0 -0
  198. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/map_status/__init__.py +0 -0
  199. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/mapping/enums/map_status/_mapping.py +0 -0
  200. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/owm/__init__.py +0 -0
  201. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/owm/_owm.py +0 -0
  202. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/semantics/__init__.py +0 -0
  203. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/semantics/_semantics.py +0 -0
  204. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/__init__.py +0 -0
  205. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/common/__init__.py +0 -0
  206. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/common/_common.py +0 -0
  207. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/lidar/__init__.py +0 -0
  208. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/lidar/_lidar.py +0 -0
  209. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/rad/__init__.py +0 -0
  210. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/rad/_rad.py +0 -0
  211. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/radio/__init__.py +0 -0
  212. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/radio/_radio.py +0 -0
  213. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/rf_beam/__init__.py +0 -0
  214. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/rf_beam/_rf_beam.py +0 -0
  215. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/vision/__init__.py +0 -0
  216. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/sensing/vision/_vision.py +0 -0
  217. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/slam_frontend/__init__.py +0 -0
  218. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/slam_frontend/_slam_frontend.py +0 -0
  219. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/vio/__init__.py +0 -0
  220. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/dds/types/spatial/vio/_vio.py +0 -0
  221. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/demo/assets/duck.gltf +0 -0
  222. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/demo/assets/fountain-label.txt +0 -0
  223. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/demo/assets/fountain-marker.gltf +0 -0
  224. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/demo/fountain-anchors.mcap +0 -0
  225. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/errors.py +0 -0
  226. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/events.py +0 -0
  227. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/frames.py +0 -0
  228. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/journal.py +0 -0
  229. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/recency.py +0 -0
  230. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/serve.py +0 -0
  231. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/__init__.py +0 -0
  232. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/commands.py +0 -0
  233. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/gw_http.py +0 -0
  234. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/idlmodel.py +0 -0
  235. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/limits.py +0 -0
  236. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/mcapmeta.py +0 -0
  237. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/pin.py +0 -0
  238. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/publish.py +0 -0
  239. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/tenancy.py +0 -0
  240. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/server/webjson.py +0 -0
  241. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds/tokens.py +0 -0
  242. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds.egg-info/SOURCES.txt +0 -0
  243. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds.egg-info/dependency_links.txt +0 -0
  244. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds.egg-info/entry_points.txt +0 -0
  245. {spatialdds-0.7.1 → spatialdds-0.7.3}/spatialdds.egg-info/requires.txt +0 -0
  246. {spatialdds-0.7.1 → spatialdds-0.7.3}/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.1
3
+ Version: 0.7.3
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
@@ -139,19 +139,27 @@ scene:
139
139
  tick, a framework's timer, or a request handler.
140
140
  - **`topic=`** on `writer()` and `reader()` gives the whole name, for another
141
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.
142
+ grammar, a templated type to its template, and a name that fills §2's
143
+ template for its type is admitted though it is longer
144
+ (`spatialdds/<scene>/plan/<agent_id>/trajectory/v1`). `history=` sets a
145
+ reader's own cache, for a reply reader that must keep every reply.
144
146
  - **`ignore_local=True`** on a reader drops the participant's own writes, for
145
147
  a bridge that writes and reads one lane. **`matched()`** and
146
148
  **`wait_matched()`** on writers and readers count the other side.
147
149
  - **`p.announce(transforms=...)`** carries the service's frame placement.
148
150
  `service_id=` and `topics=` announce several services from one
149
- participant.
151
+ participant. `topics=` may list readers as well as writers, for a service
152
+ that announces where requests go, and `auth_hint=` and
153
+ `coverage_frame_ref=` pass through.
150
154
  - **`p.relay()`** re-publishes other services' announces. It uses a writer of
151
155
  its own and marks each with a `relayed_by` hint naming the relay, so it
152
156
  never speaks as the asserter.
153
157
  - **`sd.dds.class_for(name)`** is the generated class for a registered type
154
158
  name, a well-known message or a dotted identity.
159
+ - **`sd.dds.extend(name, cls, idl)`** registers a deployment's own type, with
160
+ the IDL it was generated from. After that it converts, keys, records and
161
+ opens by name like a pinned type, and validation checks N.1
162
+ representability, since it has no published schema.
155
163
 
156
164
  `Sample.data` is the typed sample (`sd.dds.types` carries every type in the
157
165
  pinned IDL). `sd.dds.to_json(sample)` is its N.1 form, produced by the gateway's
@@ -594,6 +602,28 @@ explicitly was tried first and is what missed two paths.
594
602
 
595
603
  If your clients are not browsers, nothing here changes anything for you.
596
604
 
605
+ ## New in 0.7.3: what the first migration found
606
+
607
+ Mostly additive; one fix changes bytes. Every frame this package builds now
608
+ carries the uuid its name derives to, because Appendix G makes the uuid a
609
+ frame's identity. Until 0.7.3 the earth-fixed frame's uuid was empty in
610
+ announces, built manifests and the gateway's manifest, and a conforming
611
+ consumer could match it to nothing. If you compare such documents by digest,
612
+ expect the uuid, and the ETags over it, to change.
613
+
614
+ - `check_topic` and `topic=` admit §2's lane templates, so the six-segment
615
+ plan lane opens.
616
+ - `p.announce(topics=)` takes readers, plus `auth_hint=` and
617
+ `coverage_frame_ref=`.
618
+ - `sd.dds.from_json(..., strict=True)` refuses unknown members by name.
619
+ - `sd.dds.WireError` is exported and is a `ValueError`.
620
+
621
+ ## New in 0.7.2: a deployment's own types
622
+
623
+ `sd.dds.extend(name, cls, idl)` brings a deployment's own documented type
624
+ into the native layer: N.1 conversion, its key, `class_for`, the recording
625
+ tap, and opening it by name. Additive, as 0.7.1 was.
626
+
597
627
  ## New in 0.7.1: for programs that own their loop
598
628
 
599
629
  Everything SpatialDDS-demo's adoption found missing, and nothing removed:
@@ -649,7 +679,7 @@ Two changes may need a line of yours:
649
679
  The security fixes, the limits table and the details are in the
650
680
  [changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
651
681
 
652
- ## Not in 0.7.1
682
+ ## Not in 0.7.3
653
683
 
654
684
  Stated so nobody waits for them:
655
685
 
@@ -111,19 +111,27 @@ scene:
111
111
  tick, a framework's timer, or a request handler.
112
112
  - **`topic=`** on `writer()` and `reader()` gives the whole name, for another
113
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.
114
+ grammar, a templated type to its template, and a name that fills §2's
115
+ template for its type is admitted though it is longer
116
+ (`spatialdds/<scene>/plan/<agent_id>/trajectory/v1`). `history=` sets a
117
+ reader's own cache, for a reply reader that must keep every reply.
116
118
  - **`ignore_local=True`** on a reader drops the participant's own writes, for
117
119
  a bridge that writes and reads one lane. **`matched()`** and
118
120
  **`wait_matched()`** on writers and readers count the other side.
119
121
  - **`p.announce(transforms=...)`** carries the service's frame placement.
120
122
  `service_id=` and `topics=` announce several services from one
121
- participant.
123
+ participant. `topics=` may list readers as well as writers, for a service
124
+ that announces where requests go, and `auth_hint=` and
125
+ `coverage_frame_ref=` pass through.
122
126
  - **`p.relay()`** re-publishes other services' announces. It uses a writer of
123
127
  its own and marks each with a `relayed_by` hint naming the relay, so it
124
128
  never speaks as the asserter.
125
129
  - **`sd.dds.class_for(name)`** is the generated class for a registered type
126
130
  name, a well-known message or a dotted identity.
131
+ - **`sd.dds.extend(name, cls, idl)`** registers a deployment's own type, with
132
+ the IDL it was generated from. After that it converts, keys, records and
133
+ opens by name like a pinned type, and validation checks N.1
134
+ representability, since it has no published schema.
127
135
 
128
136
  `Sample.data` is the typed sample (`sd.dds.types` carries every type in the
129
137
  pinned IDL). `sd.dds.to_json(sample)` is its N.1 form, produced by the gateway's
@@ -566,6 +574,28 @@ explicitly was tried first and is what missed two paths.
566
574
 
567
575
  If your clients are not browsers, nothing here changes anything for you.
568
576
 
577
+ ## New in 0.7.3: what the first migration found
578
+
579
+ Mostly additive; one fix changes bytes. Every frame this package builds now
580
+ carries the uuid its name derives to, because Appendix G makes the uuid a
581
+ frame's identity. Until 0.7.3 the earth-fixed frame's uuid was empty in
582
+ announces, built manifests and the gateway's manifest, and a conforming
583
+ consumer could match it to nothing. If you compare such documents by digest,
584
+ expect the uuid, and the ETags over it, to change.
585
+
586
+ - `check_topic` and `topic=` admit §2's lane templates, so the six-segment
587
+ plan lane opens.
588
+ - `p.announce(topics=)` takes readers, plus `auth_hint=` and
589
+ `coverage_frame_ref=`.
590
+ - `sd.dds.from_json(..., strict=True)` refuses unknown members by name.
591
+ - `sd.dds.WireError` is exported and is a `ValueError`.
592
+
593
+ ## New in 0.7.2: a deployment's own types
594
+
595
+ `sd.dds.extend(name, cls, idl)` brings a deployment's own documented type
596
+ into the native layer: N.1 conversion, its key, `class_for`, the recording
597
+ tap, and opening it by name. Additive, as 0.7.1 was.
598
+
569
599
  ## New in 0.7.1: for programs that own their loop
570
600
 
571
601
  Everything SpatialDDS-demo's adoption found missing, and nothing removed:
@@ -621,7 +651,7 @@ Two changes may need a line of yours:
621
651
  The security fixes, the limits table and the details are in the
622
652
  [changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
623
653
 
624
- ## Not in 0.7.1
654
+ ## Not in 0.7.3
625
655
 
626
656
  Stated so nobody waits for them:
627
657
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "spatialdds"
7
- version = "0.7.1"
7
+ version = "0.7.3"
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.1"
44
+ __version__ = "0.7.3"
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.1 · 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.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&#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.1
5
+ version: 0.7.3
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:
@@ -216,6 +216,7 @@
216
216
  "anchor_delta": {
217
217
  "idl": "spatial::anchors::AnchorDelta",
218
218
  "profile": "ANCHOR_DELTA",
219
+ "profile_template": null,
219
220
  "provisional": false,
220
221
  "spelled_qos": {},
221
222
  "topic_template": null
@@ -223,6 +224,7 @@
223
224
  "crossing_line": {
224
225
  "idl": "spatial::events::CrossingLine",
225
226
  "profile": "ZONE_META",
227
+ "profile_template": null,
226
228
  "provisional": false,
227
229
  "spelled_qos": {},
228
230
  "topic_template": null
@@ -230,6 +232,7 @@
230
232
  "desc_array": {
231
233
  "idl": "spatial::slam_frontend::KeyframeFeatures",
232
234
  "profile": "DESC_BATCH",
235
+ "profile_template": null,
233
236
  "provisional": false,
234
237
  "spelled_qos": {},
235
238
  "topic_template": null
@@ -237,6 +240,7 @@
237
240
  "detection2d": {
238
241
  "idl": "spatial::semantics::Detection2DSet",
239
242
  "profile": "DET_RT",
243
+ "profile_template": null,
240
244
  "provisional": false,
241
245
  "spelled_qos": {},
242
246
  "topic_template": null
@@ -244,6 +248,7 @@
244
248
  "detection3d": {
245
249
  "idl": "spatial::semantics::Detection3DSet",
246
250
  "profile": "DET_RT",
251
+ "profile_template": null,
247
252
  "provisional": false,
248
253
  "spelled_qos": {},
249
254
  "topic_template": null
@@ -251,6 +256,10 @@
251
256
  "entity_binding": {
252
257
  "idl": "spatial::core::EntityBinding",
253
258
  "profile": null,
259
+ "profile_template": {
260
+ "level": "SHOULD",
261
+ "topic": "spatialdds/<scene>/entity/binding/v1"
262
+ },
254
263
  "provisional": false,
255
264
  "spelled_qos": {},
256
265
  "topic_template": null
@@ -258,6 +267,7 @@
258
267
  "framed_pose": {
259
268
  "idl": "spatial::core::FramedPose",
260
269
  "profile": "POSE_RT",
270
+ "profile_template": null,
261
271
  "provisional": false,
262
272
  "spelled_qos": {},
263
273
  "topic_template": null
@@ -265,6 +275,7 @@
265
275
  "fused_track": {
266
276
  "idl": "spatial::semantics::FusedTrackSet",
267
277
  "profile": "DET_RT",
278
+ "profile_template": null,
268
279
  "provisional": false,
269
280
  "spelled_qos": {},
270
281
  "topic_template": null
@@ -272,6 +283,7 @@
272
283
  "geometry_tile": {
273
284
  "idl": "spatial::core::TileMeta",
274
285
  "profile": "GEOM_TILE",
286
+ "profile_template": null,
275
287
  "provisional": false,
276
288
  "spelled_qos": {},
277
289
  "topic_template": null
@@ -279,6 +291,7 @@
279
291
  "geopose": {
280
292
  "idl": "spatial::core::GeoPose",
281
293
  "profile": "POSE_RT",
294
+ "profile_template": null,
282
295
  "provisional": false,
283
296
  "spelled_qos": {},
284
297
  "topic_template": null
@@ -286,6 +299,7 @@
286
299
  "imu_sample": {
287
300
  "idl": "spatial::vio::ImuSample",
288
301
  "profile": "IMU_RT",
302
+ "profile_template": null,
289
303
  "provisional": false,
290
304
  "spelled_qos": {},
291
305
  "topic_template": null
@@ -293,6 +307,7 @@
293
307
  "lidar_frame": {
294
308
  "idl": "spatial::sensing::lidar::LidarFrame",
295
309
  "profile": "LIDAR_RT",
310
+ "profile_template": null,
296
311
  "provisional": false,
297
312
  "spelled_qos": {},
298
313
  "topic_template": null
@@ -300,6 +315,7 @@
300
315
  "lidar_meta": {
301
316
  "idl": "spatial::sensing::lidar::LidarMeta",
302
317
  "profile": "SENSOR_META",
318
+ "profile_template": null,
303
319
  "provisional": false,
304
320
  "spelled_qos": {},
305
321
  "topic_template": null
@@ -307,6 +323,7 @@
307
323
  "map_alignment": {
308
324
  "idl": "spatial::mapping::MapAlignment",
309
325
  "profile": "MAP_META",
326
+ "profile_template": null,
310
327
  "provisional": false,
311
328
  "spelled_qos": {},
312
329
  "topic_template": null
@@ -314,6 +331,7 @@
314
331
  "map_event": {
315
332
  "idl": "spatial::mapping::MapEvent",
316
333
  "profile": "MAP_META",
334
+ "profile_template": null,
317
335
  "provisional": false,
318
336
  "spelled_qos": {},
319
337
  "topic_template": null
@@ -321,6 +339,7 @@
321
339
  "map_meta": {
322
340
  "idl": "spatial::mapping::MapMeta",
323
341
  "profile": "MAP_META",
342
+ "profile_template": null,
324
343
  "provisional": false,
325
344
  "spelled_qos": {},
326
345
  "topic_template": null
@@ -328,6 +347,7 @@
328
347
  "model_command": {
329
348
  "idl": "spatial::owm::ModelCommand",
330
349
  "profile": null,
350
+ "profile_template": null,
331
351
  "provisional": true,
332
352
  "spelled_qos": {
333
353
  "durability": "VOLATILE",
@@ -341,6 +361,7 @@
341
361
  "model_entity": {
342
362
  "idl": "spatial::owm::Entity",
343
363
  "profile": null,
364
+ "profile_template": null,
344
365
  "provisional": true,
345
366
  "spelled_qos": {
346
367
  "durability": "TRANSIENT_LOCAL",
@@ -355,6 +376,7 @@
355
376
  "model_pose": {
356
377
  "idl": "spatial::owm::ModelPose",
357
378
  "profile": null,
379
+ "profile_template": null,
358
380
  "provisional": true,
359
381
  "spelled_qos": {
360
382
  "durability": "VOLATILE",
@@ -368,6 +390,7 @@
368
390
  "navsat_status": {
369
391
  "idl": "spatial::core::NavSatStatus",
370
392
  "profile": null,
393
+ "profile_template": null,
371
394
  "provisional": false,
372
395
  "spelled_qos": {},
373
396
  "topic_template": null
@@ -375,6 +398,10 @@
375
398
  "planned_trajectory": {
376
399
  "idl": "spatial::core::PlannedTrajectory",
377
400
  "profile": "EVENT_RT",
401
+ "profile_template": {
402
+ "level": "SHOULD",
403
+ "topic": "spatialdds/<scene>/plan/<agent_id>/trajectory/v1"
404
+ },
378
405
  "provisional": false,
379
406
  "spelled_qos": {},
380
407
  "topic_template": null
@@ -382,6 +409,7 @@
382
409
  "rad_sensor_meta": {
383
410
  "idl": "spatial::sensing::rad::RadSensorMeta",
384
411
  "profile": "SENSOR_META",
412
+ "profile_template": null,
385
413
  "provisional": false,
386
414
  "spelled_qos": {},
387
415
  "topic_template": null
@@ -389,6 +417,7 @@
389
417
  "radar_detection": {
390
418
  "idl": "spatial::sensing::rad::RadDetectionSet",
391
419
  "profile": "RADAR_RT",
420
+ "profile_template": null,
392
421
  "provisional": false,
393
422
  "spelled_qos": {},
394
423
  "topic_template": null
@@ -396,6 +425,7 @@
396
425
  "radar_tensor": {
397
426
  "idl": "spatial::sensing::rad::RadTensorFrame",
398
427
  "profile": "RADAR_RT",
428
+ "profile_template": null,
399
429
  "provisional": false,
400
430
  "spelled_qos": {},
401
431
  "topic_template": null
@@ -403,6 +433,7 @@
403
433
  "radar_tensor_meta": {
404
434
  "idl": "spatial::sensing::rad::RadTensorMeta",
405
435
  "profile": "SENSOR_META",
436
+ "profile_template": null,
406
437
  "provisional": false,
407
438
  "spelled_qos": {},
408
439
  "topic_template": null
@@ -410,6 +441,7 @@
410
441
  "radio_scan": {
411
442
  "idl": "spatial::sensing::radio::RadioScan",
412
443
  "profile": "RADIO_SCAN_RT",
444
+ "profile_template": null,
413
445
  "provisional": true,
414
446
  "spelled_qos": {},
415
447
  "topic_template": null
@@ -417,6 +449,7 @@
417
449
  "radio_sensor_meta": {
418
450
  "idl": "spatial::sensing::radio::RadioSensorMeta",
419
451
  "profile": "SENSOR_META",
452
+ "profile_template": null,
420
453
  "provisional": true,
421
454
  "spelled_qos": {},
422
455
  "topic_template": null
@@ -424,6 +457,7 @@
424
457
  "rf_beam": {
425
458
  "idl": "spatial::sensing::rf_beam::RfBeamFrame",
426
459
  "profile": "RF_BEAM_RT",
460
+ "profile_template": null,
427
461
  "provisional": true,
428
462
  "spelled_qos": {},
429
463
  "topic_template": null
@@ -431,6 +465,7 @@
431
465
  "rf_beam_meta": {
432
466
  "idl": "spatial::sensing::rf_beam::RfBeamMeta",
433
467
  "profile": "SENSOR_META",
468
+ "profile_template": null,
434
469
  "provisional": true,
435
470
  "spelled_qos": {},
436
471
  "topic_template": null
@@ -438,6 +473,7 @@
438
473
  "seg_mask": {
439
474
  "idl": "spatial::sensing::vision::VisionFrame",
440
475
  "profile": "SEG_MASK_RT",
476
+ "profile_template": null,
441
477
  "provisional": false,
442
478
  "spelled_qos": {},
443
479
  "topic_template": null
@@ -445,6 +481,7 @@
445
481
  "spatial_event": {
446
482
  "idl": "spatial::events::SpatialEvent",
447
483
  "profile": "EVENT_RT",
484
+ "profile_template": null,
448
485
  "provisional": false,
449
486
  "spelled_qos": {},
450
487
  "topic_template": null
@@ -452,6 +489,7 @@
452
489
  "spatial_zone": {
453
490
  "idl": "spatial::events::SpatialZone",
454
491
  "profile": "ZONE_META",
492
+ "profile_template": null,
455
493
  "provisional": false,
456
494
  "spelled_qos": {},
457
495
  "topic_template": null
@@ -459,6 +497,7 @@
459
497
  "video_frame": {
460
498
  "idl": "spatial::sensing::vision::VisionFrame",
461
499
  "profile": "VIDEO_LIVE",
500
+ "profile_template": null,
462
501
  "provisional": false,
463
502
  "spelled_qos": {},
464
503
  "topic_template": null
@@ -466,6 +505,7 @@
466
505
  "video_meta": {
467
506
  "idl": "spatial::sensing::vision::VisionMeta",
468
507
  "profile": "SENSOR_META",
508
+ "profile_template": null,
469
509
  "provisional": false,
470
510
  "spelled_qos": {},
471
511
  "topic_template": null
@@ -473,6 +513,7 @@
473
513
  "vps_query": {
474
514
  "idl": "spatial::argeo::VpsRequest",
475
515
  "profile": "VPS_REQ",
516
+ "profile_template": null,
476
517
  "provisional": false,
477
518
  "spelled_qos": {},
478
519
  "topic_template": null
@@ -480,6 +521,7 @@
480
521
  "vps_response": {
481
522
  "idl": "spatial::argeo::VpsResponse",
482
523
  "profile": "VPS_RESP",
524
+ "profile_template": null,
483
525
  "provisional": false,
484
526
  "spelled_qos": {},
485
527
  "topic_template": null
@@ -487,6 +529,7 @@
487
529
  "zone_state": {
488
530
  "idl": "spatial::events::ZoneState",
489
531
  "profile": "ZONE_META",
532
+ "profile_template": null,
490
533
  "provisional": false,
491
534
  "spelled_qos": {},
492
535
  "topic_template": null
@@ -28,8 +28,9 @@ __all__ = [
28
28
  "participant", "Participant", "Writer", "Reader", "ParticipantRefused",
29
29
  "AnnounceRelay", "RELAYED_BY",
30
30
  "ON_EXIT", "DOMAIN_ENV",
31
- "to_json", "from_json", "validate", "SchemaInvalid", "fqn_of", "key_of",
32
- "class_for",
31
+ "to_json", "from_json", "validate", "SchemaInvalid", "WireError",
32
+ "fqn_of", "key_of",
33
+ "class_for", "extend", "Extension",
33
34
  "registry", "Profile", "RegistryError", "topic_name",
34
35
  "ANNOUNCE", "DEPART", "CONTENT", "QUERY", "COVERAGE_HINT",
35
36
  "Recorder", "chunk", "Reassembler", "CorruptChunk", "blob_ref",
@@ -50,8 +51,8 @@ _FROM = {
50
51
  "AnnounceRelay": "_participant", "RELAYED_BY": "_participant",
51
52
  "DOMAIN_ENV": "_participant",
52
53
  "to_json": "codec", "from_json": "codec", "validate": "codec",
53
- "SchemaInvalid": "codec", "fqn_of": "codec", "key_of": "codec",
54
- "class_for": "codec",
54
+ "SchemaInvalid": "codec", "WireError": "codec", "fqn_of": "codec", "key_of": "codec",
55
+ "class_for": "codec", "extend": "codec", "Extension": "codec",
55
56
  "Profile": "registry", "RegistryError": "registry",
56
57
  "topic_name": "registry",
57
58
  "Recorder": "record",