def get_login_user(): """Find the account which represents the currently logged in and authenticated user If user is not authenticated, returns None """ authenticated_user = users.get_current_user() if not authenticated_user: return None q_me = LoginUser.all() q_me.filter('user =', authenticated_user) me = q_me.fetch(3) if len(me) > 0: if len(me) > 1: logging.critical ("more than one person with google account: %s [%s]" % (authenticated_user.nickname(),authenticated_user.user_id())) me = me[0] else: logging.warning ("No Person registered for login_user %s" % authenticated_user) logging.warning ("Trying email as user_id instead...") me = LoginUser.all().filter("user_id =", authenticated_user.email()).get() if not me: logging.warning ("Email not recognized either.") return None logging.warning ("Email worked.") # Check if login_user has a vaild person attached try: if me.me: logging.debug("Found login user person: %s" % (me.me.name)) except db.ReferencePropertyResolveError: logging.critical ("Login user: %s has an invalid reference to Person" % (str(me.key()))) return None return me
def get(self): """Function is called by cron to build a contact index Call with a key to build index for this entity. """ if not users.is_current_user_admin(): logging.critical("UpdateIndex called by non-admin") self.error(500) return key = self.request.get("key", None) logging.info("Update index tables.") if key: con = Contact.get(Key(key)) if con: update_index(con) # update dependant take2 entries for t2 in Take2.all().filter("contact_ref =", con): update_index(t2) # update parent login_user user = LoginUser.all().filter("me =", con).get() if user: update_index(user) return else: t2 = Take2.get(Key(key)) if t2: update_index(t2) return logging.info("Could not find key: %s" % (key)) return # Go through the tables which contribute to the index for table in [LoginUser,Contact,Address]: batch = [] for obj in table.all(): res = update_index(obj, batch=True) if res: batch.extend(res) # bulk db operation db.put(batch) logging.info("%d updates." % (len(batch))) self.response.headers['Content-Type'] = "text/plain" self.response.out.write("/index done.")
def get(self): if not users.is_current_user_admin(): logging.critical("UpdateIndex called by non-admin") self.error(500) return fix = True if self.request.get("fix", "False") == "True" else False # look for LoginUser with invalid Person attached logging.info("Check LoginUser") err = False for obj in LoginUser.all(): try: if not obj.me: logging.critical("LoginUser %d has no Person attached" % ((obj.key().id()))) err = True except db.ReferencePropertyResolveError: logging.critical("LoginUser %d has invalid Person reference" % ((obj.key().id()))) err = True if err: # check for dependent datasets count = Contact.all().filter("owned_by =", obj).count() logging.critical("LoginUser %d has %d dependant datasets" % (obj.key().id(),count)) if fix: obj.delete() logging.info("%d deleted" % obj.key().id()) err = False logging.info("Check Contact") err = False for obj in Contact.all(): try: if not obj.owned_by: logging.critical("Contact '%s' %d has no reference to owner" % (obj.name,obj.key().id())) err = True except db.ReferencePropertyResolveError: logging.critical("Contact '%s' %d has invalid reference to owner" % (obj.name,obj.key().id())) count = LoginUser.all().filter("me =", obj).count() if count: logging.critical("... but owner has reference!") err = True if err: # check for dependent datasets count = Take2.all().filter("contact_ref =", obj).count() logging.critical("Contact '%s' has %d dependent datasets" % (obj.name, count)) if fix: obj.delete() logging.info("%d deleted" % obj.key().id()) err = False logging.info("Check Take2") err = False for obj in Take2.all(): try: if not obj.contact_ref: logging.critical("Take2 has no reference to owner %s" % (obj.key().id())) err = True except db.ReferencePropertyResolveError: logging.critical("Take2 has invalid reference to owner %s" % (obj.key().id())) err = True if err: if fix: obj.delete() logging.info("%d deleted" % obj.key().id()) # location in address shall be set to default if obj.class_name() == 'Address' and not obj.location: logging.error("Address has null location %s. Fixed." % (obj.key().id())) obj.location=db.GeoPt(lon=0.0, lat=0.0) obj.put() err = False logging.info("Check SearchIndex") err = False for obj in SearchIndex.all(): try: if not obj.contact_ref: logging.critical("SearchIndex %d has no reference to owner" % (obj.key().id())) err = True except db.ReferencePropertyResolveError: logging.critical("SearchIndex %d has invalid reference to owner" % (obj.key().id())) err = True if err: if fix: obj.delete() logging.info("%d deleted" % obj.key().id()) err = False logging.info("Check GeoIndex") err = False for obj in GeoIndex.all(): try: if not obj.contact_ref: logging.critical("GeoIndex %d has no reference to owner" % (obj.key().id())) err = True except db.ReferencePropertyResolveError: logging.critical("GeoIndex %d has invalid reference to owner" % (obj.key().id())) err = True if err: if fix: obj.delete() logging.info("%d deleted" % obj.key().id()) err = False self.response.headers['Content-Type'] = "text/plain" self.response.out.write("/fix done.")