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...')
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