示例#1
0
def publish_device_change(sender, **kwargs):
    # get the object generating the signal and serialize it for transport
    obj = kwargs.get('instance')
    obj_ser = JSONRenderer().render(DeviceSerializer(obj).data)

    # init the publisher with our project params - will need HH ref in the future so we can discriminate
    publisher = pubsub_v1.PublisherClient()
    topic_path = publisher.topic_path('pwrnet-158117', 'home-hub-message')

    # publish the message
    publisher.publish(topic_path, data=obj_ser.encode('utf-8'))
    print('Message published...')
示例#2
0
    def _encode_data(self, data, format=None, content_type=None):  # pylint: disable=redefined-builtin
        """
        Encode the data returning a two tuple of (bytes, content_type)
        """

        if data is None:
            return ('', content_type)

        assert format is None or content_type is None, (
            'You may not set both `format` and `content_type`.')

        if content_type:
            # Content type specified explicitly, treat data as a raw bytestring
            ret = force_bytes(data, settings.DEFAULT_CHARSET)

        else:
            format = format or self.default_format

            assert format in self.renderer_classes, (
                "Invalid format '{0}'. Available formats are {1}. "
                "Set TEST_REQUEST_RENDERER_CLASSES to enable "
                "extra request formats.".format(
                    format, ', '.join([
                        "'" + fmt + "'"
                        for fmt in self.renderer_classes.keys()
                    ])))

            # Use format and render the data into a bytestring
            renderer = self.renderer_classes[format]()

            # Customization: assume tests provide input data in correct format
            #  and just use the standard JSONRenderer to serialize it
            if isinstance(renderer, JSONAPIRenderer):
                ret = RestJSONRenderer().render(data)

            else:
                ret = renderer.render(data)

            # Determine the content-type header from the renderer
            content_type = "{0}; charset={1}".format(renderer.media_type,
                                                     renderer.charset)

            # Coerce text to bytes if required.
            if isinstance(ret, str):
                ret = bytes(ret.encode(renderer.charset))

        return ret, content_type