Search code examples
pythongoogle-mirror-apigoogle-glasscallbackurl

Google Glass callbackUrl POST from Mirror API is empty?


Apologies because the only web development I know is of the django/python kind and am probably guilty of mixing my code idioms ( REST vs django URL dispatch workflow)

I have a URL handler which serves as a callbackUrl to a subscription for my Glassware. I am getting a POST to the handler , but the request object seems empty.

I am sure I am understanding this wrong but can someone point me in the direction of getting the "REPLY" information from a POST notification to a callbackURL.

My URL Handler is

class A600Handler(webapp2.RequestHandler):

def post(self):
    """Process the value of A600 received and return a plot"""
    # I am seeing this in my logs proving that I am getting a POST when glass replies
    logging.info("Received POST to logA600")
    # This is returning None
    my_collection = self.request.get("collection")
    logging.info(my_collection)
    # I also tried this but self.sequest.POST is empty '[]' and of type UnicodeMultiDict
    # json_request_data = json.loads(self.request.POST)


@util.auth_required
def get(self):
    """Process the value of A600 received and return a plot"""
    logging.info("Received GET to this logA600")

I have the following URL Handler defined and can verify that the post function is getting a "ping" when the user hits reply by looking at the app-engine logs.

MAIN_ROUTES = [ ('/', MainHandler),('/logA600',A600Handler), ]

How do I extract the payload in the form of the voice transcribed text sent by the user?. I am not understanding The "parse_notification" example given in the docs


Solution

  • Did you try request.body? The docs for request.POST state

    "If you need to access raw or non-form data posted in the request, access this through the HttpRequest.body attribute instead."

    If the API isn't using form data in its post, you'll likely find the contents in request.body. The docs to which you linked indicate that the content will be placed as JSON in the body instead of form data ("containing a JSON request body"). I would try json.loads(request.body).