Пример #1
0
 def post(self):
   """POST handler as JSON-RPC."""
   data = parse_body(self)
   method = getattr(LoadBalancerApi, data.get("method"))
   params = data.get("params", [])
   params.insert(0, self.request)
   resp = method(*params)
   return resp
Пример #2
0
    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()
Пример #4
0
    def set_or_create(self, model, id):
        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)

        m = reflective_create(cls, data)
        if key:
            m.key = key
        if model != "users":
            if len(m.owners) == 0:
                m.owners.append(u)

        m.put()

        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()
Пример #5
0
    def set_or_create(self, model, id):
        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)

        m = reflective_create(cls, data)
        if key:
            m.key = key
        if model != "users":
            if len(m.owners) == 0:
                m.owners.append(u)

        m.put()

        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()