Source code for crossbar.bridge.rest.publisher

#####################################################################################
#
#  Copyright (c) typedef int GmbH
#  SPDX-License-Identifier: EUPL-1.2
#
#####################################################################################

from autobahn.wamp.types import PublishOptions

from crossbar._util import dump_json
from crossbar.bridge.rest.common import _CommonResource

__all__ = ("PublisherResource",)


[docs] class PublisherResource(_CommonResource): """ A HTTP/POST to WAMP-Publisher bridge. """
[docs] def _process(self, request, event): if "topic" not in event: return self._deny_request(request, 400, key="topic", log_category="AR455") topic = event.pop("topic") args = event["args"] if "args" in event and event["args"] else [] kwargs = event["kwargs"] if "kwargs" in event and event["kwargs"] else {} options = event["options"] if "options" in event and event["options"] else {} publish_options = PublishOptions( acknowledge=True, forward_for=options.get("forward_for", None), retain=options.get("retain", None), exclude_me=options.get("exclude_me", None), exclude_authid=options.get("exclude_authid", None), exclude_authrole=options.get("exclude_authrole", None), exclude=options.get("exclude", None), eligible_authid=options.get("eligible_authid", None), eligible_authrole=options.get("eligible_authrole", None), eligible=options.get("eligible", None), ) kwargs["options"] = publish_options # http://twistedmatrix.com/documents/current/web/howto/web-in-60/asynchronous-deferred.html d = self._session.publish(topic, *args, **kwargs) def on_publish_ok(pub): res = {"id": pub.id} body = dump_json(res, True).encode("utf8") self._complete_request(request, 200, body, log_category="AR200", reason="OK") def on_publish_error(err): self._fail_request(request, failure=err, log_category="AR456") return d.addCallbacks(on_publish_ok, on_publish_error)