Search code examples
pythonpython-2.7google-app-enginegoogle-cloud-datastorewebapp2

Google Cloud Datastore 'NoneType' object has no attribute 'email'


When I try getting a kind from my datastore it returns NoneType, as if the query is empty. I know the datastore is working properly while saving, but pulling a kind from the a query is not.

Also using the GQL Query in the Google cloud Console website and using SELECT * FROM User does return all the kinds. User kind has no parents, it is at the root. I made sure all the properties are indexed as well.

I am not sure what I am doing wrong on GET.

MyApp.py

import webapp2
from google.appengine.ext import ndb
from google.appengine.ext.db import GqlQuery


class MainHandler(webapp2.RequestHandler):

    def post(self):
        message = self.request.body
        message = message.splitlines()

        if message[0] == "register":
            user = User.create_user(message[1], message[2], message[3])
            user_key = User.save_user(user)
            if user_key is not None:
                self.response.write(user_key)

        else:
            user = User.get_by_id(User.email == message[0])
            if User.token == message[1]:
                self.response.write("CURRENT")
            else:
                User.token = message[1]
                User.save_user(user)
                self.response.write("UPDATED")

    def get(self):
        self.response.write("CONNECTED")
        user= User.query().get()
        self.response.write("\n" + query.email)


class User(ndb.Model):
    email = ndb.StringProperty()
    token = ndb.StringProperty()
    name = ndb.StringProperty()

    @classmethod
    def create_user(cls, email, token, name):
        user = User(email=email, token=token, name=name, id=email)
        return user

    @classmethod
    def save_user(cls, user):
        user_key = user.put()
        return user_key

    @classmethod
    def get_user(cls, email):
        return User.get_by_id(User.email == email)


app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

Solution

  • So I figured out what was wrong. So there seems to be an issue with the way Google Cloud SDK is set up on my computer. When running the same code on the google servers rather than on my network everything seems to work properly.