diff --git a/libervia/backend/plugins/plugin_comp_pubsub/__init__.py b/libervia/backend/plugins/plugin_comp_pubsub/__init__.py index 109a41dd..7413474f 100644 --- a/libervia/backend/plugins/plugin_comp_pubsub/__init__.py +++ b/libervia/backend/plugins/plugin_comp_pubsub/__init__.py @@ -564,7 +564,34 @@ class PubsubResource(pubsub.PubSubResource): return defer.ensureDeferred(self._default(request)) async def _default(self, request: pubsub.PubSubRequest) -> dict[str, object]: - raise pubsub.Unsupported("retrieve-default") + """Return default node configuration. + + @param request: Default configuration request. + @return: Default configuration values. + """ + node_type = request.nodeType or "leaf" + + if node_type != "leaf": + raise error.StanzaError( + "not-acceptable", text=f"Unknown node type: {node_type!r}" + ) + + # we build from PubsubNodeConfig defaults + config = PubsubNodeConfig() + + default_config: dict[str, object] = {} + + for field_name, value in config.__dict__.items(): + try: + pubsub_var = PubsubNodeConfig._field_var_mapping[field_name] + except KeyError: + log.error(f"Missing field mapping for {field_name!r}, ignoring.") + continue + + if value is not None: + default_config[pubsub_var] = str(value) + + return default_config def configureGet(self, request: pubsub.PubSubRequest) -> defer.Deferred[dict]: return defer.ensureDeferred(self._configureGet(request))