def _post_put_hook(self, future): future.wait() search.put(self) if _config.METADATA and self._previous is None: counter.increment(self.__class__.__name__) if _config.post_put_hook: _config.post_put_hook(self)
def set_or_create(self, model, id, parent_key=None): model = model.lower() u = current_user(required=True) if model == "users": if not (id == "me" or id == "" or id == u): raise AppError( "Id must be the current " + "user_id or me. User {} tried to modify user {}.".format( u, id)) id = u cls = users else: cls = None if _config.DEFINED_MODELS: cls = _config.DEFINED_MODELS.get(model) if not cls and _config.RESTRICT_TO_DEFINED_MODELS: raise RestrictedModelError if cls: model = cls.__name__ if not cls: validate_modelname(model) cls = type(model, (ScopedExpando, ), {}) data = parse_body(self) key = parse_id(id, model, data.get("Id")) clean_data(data) validate(cls.__name__, data) already_exists = False if key: old_model = key.get() if old_model: if model != "users" and not old_model.can_write(u): raise AppError("You do not have sufficient privileges.") already_exists = True # TODO: might want to add this post creation since you already have the key if parent_key: data[parent_key.kind()] = parent_key.urlsafe() m = reflective_create(cls, data) if key: m.key = key if model != "users": if len(m.owners) == 0: m.owners.append(u) m.put() # increment count if not already_exists and _config.METADATA: counter.increment(model) # update indexes search.put(m) redirect = self.request.get("redirect") if redirect: self.redirect(redirect) # Raising break error to avoid header and body writes from @as_json decorator since we override as a redirect raise BreakError() return m.to_dict()
def set_or_create(self, model, id, parent_key=None): model = model.lower() u = current_user(required=True) if model == "users": if not (id == "me" or id == "" or id == u): raise AppError("Id must be the current " + "user_id or me. User {} tried to modify user {}.".format(u, id)) id = u cls = users else: cls = None if _config.DEFINED_MODELS: cls = _config.DEFINED_MODELS.get(model) if not cls and _config.RESTRICT_TO_DEFINED_MODELS: raise RestrictedModelError if cls: model = cls.__name__ if not cls: validate_modelname(model) cls = type(model, (ScopedExpando,), {}) data = parse_body(self) key = parse_id(id, model, data.get("Id")) clean_data(data) validate(cls.__name__, data) already_exists = False if key: old_model = key.get() if old_model: if model != "users" and not old_model.can_write(u): raise AppError("You do not have sufficient privileges.") already_exists = True # TODO: might want to add this post creation since you already have the key if parent_key: data[parent_key.kind()] = parent_key.urlsafe() m = reflective_create(cls, data) if key: m.key = key if model != "users": if len(m.owners) == 0: m.owners.append(u) m.put() # increment count if not already_exists and _config.METADATA: counter.increment(model) # update indexes search.put(m) redirect = self.request.get("redirect") if redirect: self.redirect(redirect) # Raising break error to avoid header and body writes from @as_json decorator since we override as a redirect raise BreakError() return m.to_dict()