Exemplo n.º 1
0
    def post(self):
        """Create a article tag.

        Accept tag as a dict that looks like:
            {
                "tag": {
                    "name": "db",
                }
            }
        """
        result = self.post_schema.load(g.tag)
        if result.errors:
            return make_error_response(400, result.errors)

        try:
            tag = result.data
            db.session.add(tag)
            db.session.commit()
        except IntegrityError as ex:
            db.session.rollback()
            reason = str(ex.orig)
            if any(word in reason.lower() for word in ["duplicate", "unique"]):
                return make_error_response(409, reason)
            LOG.exception("An unknown db error occurred")
            return make_error_response(500, "DB Error", ex.code)
        else:
            return {
                "tag": tag.to_dict()
            }
Exemplo n.º 2
0
    def put(self, tag_id):
        """Update the editable attributes of an exitsing tag.

        :param tag_id: an exitsing tag id.
        """
        result = self.put_schema.load(g.tag)
        if result.errors:
            return make_error_response(400, result.errors)

        tag = Tag.query.get(tag_id)
        if not tag:
            return make_error_response(404, "Tag %r not found" % tag_id)

        try:
            tag.update(**result.data)
        except IntegrityError as ex:
            db.session.rollback()
            reason = str(ex.orig)
            if any(word in reason.lower() for word in ["duplicate", "unique"]):
                return make_error_response(409, reason)
            LOG.exception("An unknown db error occurred")
            return make_error_response(500, "DB Error", ex.code)
        else:
            return {
                "tag": tag.to_dict()
            }
Exemplo n.º 3
0
    def post(self):
        """Create a user.

        Accept category as a dict that looks like:
            {
                "user": {
                    "name": "zhangsan",
                    "display_name": "san zhang",
                    "email": "*****@*****.**",
                    "password": "******",
                    "enabled": True,
                    "role_id": "2",
                }
            }
        """
        print("here")
        result = self.post_schema.load(g.user)
        if result.errors:
            return make_error_response(400, result.errors)

        try:
            user = result.data
            db.session.add(user)
            db.session.commit()
        except IntegrityError as ex:
            db.session.rollback()
            reason = str(ex.orig)
            if any(word in reason.lower() for word in ["duplicate", "unique"]):
                return make_error_response(409, reason)
            LOG.exception("An unknown db error occurred")
            return make_error_response(500, "DB Error", ex.code)
        else:
            return {"user": self._user_to_dict(user)}
Exemplo n.º 4
0
 def custom_error_handler(_orig, e):
     if isinstance(e, HTTPException):
         return make_error_response(e.code, e.description)
     else:
         # TODO: further break down the error
         LOG.exception('Unknown internal server error.')
         return make_error_response(500, 'Internal Server Error')
Exemplo n.º 5
0
    def delete(self, user_id):
        """Delete a exitsing user.

        :param tag_id: an exitsing user id.
        """
        user = User.query.get(user_id)
        if not user:
            return make_error_response(404, "User %r not found" % user_id)

        try:
            user.delete()
        except DatabaseError as ex:
            LOG.exception("An unknown db error occurred")
            return make_error_response(500, "DB Error", ex.code)
        else:
            return None, 204
Exemplo n.º 6
0
    def delete(self, article_id):
        """Delete a exitsing article.

        :param article_id: an exitsing article id.
        """
        article = Article.query.get(article_id)
        if not article:
            return make_error_response(404, "Article %r not found" % article_id)

        try:
            article.delete()
        except DatabaseError as ex:
            LOG.exception("An unknown db error occurred")
            return make_error_response(500, "DB Error", ex.code)
        else:
            return None, 204
Exemplo n.º 7
0
    def put(self, user_id):
        """Update the editable attributes of an exitsing user.

        :param user_id: an exitsing user id.
        """
        result = self.put_schema.load(g.user)
        if result.errors:
            return make_error_response(400, result.errors)

        user = User.query.get(user_id)
        if not user:
            return make_error_response(404, "User %r not found" % user_id)
        try:
            user.update(**result.data)
        except IntegrityError as ex:
            db.session.rollback()
            reason = str(ex.orig)
            if any(word in reason.lower() for word in ["duplicate", "unique"]):
                return make_error_response(409, reason)
            LOG.exception("An unknown db error occurred")
            return make_error_response(500, "DB Error", ex.code)
        else:
            return {"user": self._user_to_dict(user)}
Exemplo n.º 8
0
 def handle_unauthorized():
     """Callback for auth's unauthorized event."""
     return make_error_response(401, 'Unauthorized Access')
Exemplo n.º 9
0
    def get(self, user_id=None):
        if user_id:
            return self._get_by_id(user_id)

        # TODO: DB QUERY OPTIMIZE
        query = User.query.join(User.local_user)

        # filter by name or email
        name = request.args.get("name")
        if name is not None:
            # regexp maybe not supported, use like instead
            exp = LocalUser.name.like(''.join(['%', name, '%']))
            query = query.filter(exp)
        email = request.args.get("email")
        if email is not None:
            exp = LocalUser.email.like(''.join(['%', email, '%']))
            query = query.filter(exp)

        # since
        since = request.args.get("since")
        if since is not None:
            try:
                since = parse_isotime(since)
            except ValueError as ex:
                return make_error_response(400, str(ex))
            else:
                query = query.filter(LocalUser.created_at >= since)

        # order by related
        sort = request.args.get("sort", "updated_at")
        sort_attribute = getattr(LocalUser, sort, None)
        if not isinstance(sort_attribute, InstrumentedAttribute):
            return make_error_response(400, "Unknown sort %r" % sort)
        direction = request.args.get("direction", "desc")
        try:
            sort_method = getattr(sort_attribute, direction)
            sort_exp = sort_method()
            if not isinstance(sort_exp, UnaryExpression):
                raise TypeError("Not a unary expression!")
        except (AttributeError, TypeError):
            return make_error_response(400, "Unknown direction %r" % direction)
        else:
            query = query.order_by(sort_exp)

        # before offset and limit, we get the entry total number
        total = query.count()

        # offset limit related
        page = request.args.get("page", None)
        pagesize = request.args.get("pagesize", None)
        if page and pagesize:
            try:
                page = int(page)
            except ValueError:
                return make_error_response(400, "Unknown page %r" % page)
            try:
                pagesize = int(pagesize)
            except ValueError:
                return make_error_response(400,
                                           "Unknown pagesize %r" % pagesize)

            offset = (page - 1) * pagesize  # page starts from 1
            if offset < 0:
                offset = 0
            query = query.offset(offset).limit(pagesize)

        users = query.options(db.joinedload(User.local_user)).options(
            db.joinedload(User.role)).all()
        return {
            "users": [self._user_to_dict(user) for user in users],
            "total": total,
        }
Exemplo n.º 10
0
    def _get_by_id(self, user_id):
        user = User.get(user_id)
        if not user:
            return make_error_response(404, "User %r not found" % user_id)

        return {"user": self._user_to_dict(user)}
Exemplo n.º 11
0
    def _get_by_id(source_id):
        source = Source.query.get(source_id)
        if not source:
            return make_error_response(404, "Source %r not found" % source_id)

        return {"source": source.to_dict()}