def update_person_product_access_txn(person_key, product_key, level): key = ProductAccess.key_for(person_key, product_key) a = db.get(key) if not a: a = ProductAccess(key_name=key.name(), person=person_key, product=product_key) a.level = level a.put()
def fetch(self): self.people_authorizations = self.account.people_authorizations.fetch(100) self.people = map(lambda a: a.person, self.people_authorizations) for a in self.people_authorizations: a.person.account_access = a self.people_project_authorizations = ProductAccess.all().filter('person IN', self.people).fetch(1000) auth_list_by_person_key = group(lambda a: a.person.key(), self.people_project_authorizations) for person in self.people: try: person.product_authorization = index(lambda a: a.product.key(), auth_list_by_person_key[person.key()]) except KeyError: person.product_authorization = {} self.products = self.account.products.fetch(100) for person in self.people: for product in self.products: if not product.key() in person.product_authorization: person.product_authorization[product.key()] = ProductAccess(key_name=ProductAccess.key_for(person.key(), product.key()).name(), person=person, product=product, level=(ACCESS_READ if product.public_access else ACCESS_NONE))