Exemplo n.º 1
0
    def post(self, userID):

        """
            上传头像
            :return:
            """
        from werkzeug.utils import secure_filename
        from faker import Faker

        f = Faker()
        file = request.files.get('file')
        if not file:
            return jsonify(myResponse(ResponseCode.ERROR, None, ResponseError.NO_FIlE))
        if not userID:
            return jsonify(myResponse(ResponseCode.ERROR, None, cantEmpty("userID")))
        user = User.get(userID)
        fileName = secure_filename(file.filename)
        filePath = getAvatarPath(f.pystr() + '_' + fileName)
        user.avatar = filePath

        try:
            file.save(filePath)
            user.save()
            return jsonify(myResponse(ResponseCode.SUCCESS, user.id, ResponseError.OK))
        except Exception as e:
            log.error(e)
            return jsonify(myResponse(ResponseCode.ERROR, None, ResponseCode.ERROR_TRY_AGAIN))
Exemplo n.º 2
0
    def post(self) -> jsonify:
        """
        增加一个bug信息
        :return: jsonify
        """
        parse = MyParse()
        parse.add(name="productId", type=int, required=True)
        parse.add(name="projectId", type=int, required=True)
        parse.add(name="platformId", type=int)
        parse.add(name="buildId", type=int)
        parse.add(name="errorTypeId", type=int)
        parse.add(name="title", required=True)
        parse.add(name="level", choices=['p1', 'p2', 'p3', 'p4'], required=True)
        parse.add(name="priority", choices=['p1', 'p2', 'p3', 'p4'], required=True)
        parse.add(name="assignedTo", type=int, required=True)
        parse.add(name="mailTo", type=int)
        parse.add(name="stepsBody")

        productId = parse.parse_args().get("productId")
        projectId = parse.parse_args().get("projectId")
        platformId = parse.parse_args().get("platformId")
        buildId = parse.parse_args().get("buildId")
        title = parse.parse_args().get("title")
        level = parse.parse_args().get("level")
        priority = parse.parse_args().get("priority")
        assignedTo = parse.parse_args().get("assignedTo")
        mailTo = parse.parse_args().get("mailTo")
        stepsBody = parse.parse_args().get("stepsBody")

        project = Project.get(projectId, "projectId")
        product = Product.get(productId, "productId")

        if mailTo:
            User.get(mailTo, "mailTo")
        if assignedTo:
            User.get(assignedTo, "assignedTo")

        if product not in project.product_records:
            return jsonify(
                myResponse(ResponseCode.Error_Relation, None, f"Project: Not included productId {productId}"))
        if platformId not in [i.id for i in product.platforms_records]:
            return jsonify(
                myResponse(ResponseCode.Error_Relation, None, f"Product: Not included platformId {platformId}"))
        if buildId not in [i.id for i in product.builds_records]:
            return jsonify(myResponse(ResponseCode.Error_Relation, None, f"Product: Not included buildId {buildId}"))

        try:
            u = Bugs(title=title, creater=g.user.id, stepsBody=stepsBody, product=productId, build=buildId)
            u.priority = priority
            u.level = level
            u.createrName = g.user.name
            u.save()
            return jsonify(myResponse(ResponseCode.SUCCESS, u.id, ResponseError.OK))
        except ErrorType as e:
            log.error(e)
            return jsonify(myResponse(ResponseCode.ERROR, None, str(e)))
Exemplo n.º 3
0
    def _verify(self, body: list) -> list:
        for b in body:
            if not b.get("key") and not b.get("condition") and not b.get(
                    "val"):
                abort(
                    myResponse(ResponseCode.SQL_PARAM_ERROR, None,
                               ResponseError.INVALID_PARAMS))
            if b.get("condition") not in self.condition:
                abort(
                    myResponse(ResponseCode.SQL_PARAM_ERROR, None,
                               errorValue(b.get('condition'))))

        return body
Exemplo n.º 4
0
    def get(self) -> jsonify:
        parse = MyParse()
        parse.add(name="bugID", location="args")
        bugID = parse.parse_args().get("bugID")
        bug = Bugs.get(bugID, "bugID", obj=False)

        return jsonify(myResponse(ResponseCode.SUCCESS, bug, ResponseError.OK))
Exemplo n.º 5
0
    def delete(self) -> jsonify:
        """
        删除部门
        :return: jsonify
        """
        parse = MyParse()
        parse.add(name="id", required=True)

        d = Department.get(parse.parse_args().get("id"), 'departmentId')
        try:
            d.delete()
            return jsonify(myResponse(ResponseCode.SUCCESS, None, ResponseError.OK))
        except Exception as e:
            log.error(e)
            db.session.rollback()
            return jsonify(myResponse(ResponseCode.ERROR, None, ResponseError.SOME_ERROR_TRY_AGAIN))
Exemplo n.º 6
0
    def post(self) -> jsonify:
        """
        注册 post请求
        :return: jsonify
        """
        parse = MyParse()
        parse.add(name="account", required=True)
        parse.add(name="name", required=True)
        parse.add(name="password", required=True)
        parse.add(name="departmentId", type=int, required=False)
        parse.add(name="admin", type=bool, required=False, default=False)
        parse.add(name="gender", type=bool, required=False, default=True)
        parse.add(name="email", required=False)
        parse.add(name="phone", required=False)

        departmentId = parse.parse_args().get("departmentId")
        account = parse.parse_args().get("account")
        name = parse.parse_args().get("name")
        password = parse.parse_args().get("password")
        admin = parse.parse_args().get("admin")
        gender = parse.parse_args().get('gender')
        email = parse.parse_args().get("email")
        phone = parse.parse_args().get("phone")

        if departmentId:
            # departmentId验证
            Department.get(departmentId, 'departmentId')

        # name 验证
        User.verify_account(account.lower())
        u = User(account=account, name=name, password=password, gender=gender, department=departmentId, admin=admin,
                 email=email, phone=phone)
        u.save()

        return jsonify(myResponse(ResponseCode.SUCCESS, u.id, ResponseError.OK))
Exemplo n.º 7
0
 def post(self):
     """
     获取用户信息
     :return:
     """
     user = g.user.getInfo()
     return jsonify(myResponse(ResponseCode.SUCCESS, user, ResponseError.OK))
Exemplo n.º 8
0
    def delete(self) -> jsonify:
        parse = MyParse()
        parse.add(name="bugID", type=int, required=True)
        bugID = parse.parse_args().get("bugID")
        bug = Bugs.get(bugID, "bugID")
        bug.delete()

        return jsonify(myResponse(ResponseCode.SUCCESS, None, ResponseError.OK))
Exemplo n.º 9
0
 def post(self) -> jsonify:
     parse = MyParse()
     parse.add(name="account", required=True)
     parse.add(name="password", required=True)
     account = parse.parse_args().get("account")
     password = parse.parse_args().get("password")
     user = User.query.filter(User.account == account).first()
     if user:
         res = user.verify_password(password)
         if res:
             token = user.generate_auth_token().decode("ascii")
             # 发送信号
             login_signal.send(username=account)
             return jsonify(myResponse(ResponseCode.SUCCESS, token, ResponseError.OK))
         else:
             return jsonify(myResponse(ResponseCode.ERROR, None, ResponseError.ERROR_PASSWORD))
     return jsonify(myResponse(ResponseCode.ERROR, None, ResponseError.ERROR_ACCOUNT))
Exemplo n.º 10
0
    def post(self) -> jsonify:
        """
        创建部门
        :return:  jsonify
        """
        parse = MyParse()
        parse.add(name="name", required=True)
        name = parse.parse_args().get("name")
        Department.verify_name(name=name)
        try:
            d = Department(name=name)
            d.save()
            return jsonify(myResponse(ResponseCode.SUCCESS, d.id, ResponseError.OK))
        except Exception as e:
            log.error(e)
            db.session.rollback()

            return jsonify(myResponse(ResponseCode.ERROR, None, ResponseError.SOME_ERROR_TRY_AGAIN))
Exemplo n.º 11
0
    def put(self) -> jsonify:

        parse = MyParse()
        parse.add(name="bugID", type=int, required=True)
        parse.add(name="productId", type=int)
        parse.add(name="projectId", type=int)
        parse.add(name="platformId", type=int)
        parse.add(name="buildId", type=int)
        parse.add(name="errorTypeId", type=int)
        parse.add(name="title")
        parse.add(name="level", choices=['p1', 'p2', 'p3', 'p4'])
        parse.add(name="priority", choices=['p1', 'p2', 'p3', 'p4'])
        parse.add(name="assignedTo", type=int)
        parse.add(name="mailTo", type=int)
        parse.add(name="stepsBody")
        parse.add(name="confirmed", type=bool)
        parse.add(name="status", choices=["ACTIVE", "RESOLVED", "CLOSED"])

        bugID = parse.parse_args().get("bugID")
        projectId = parse.parse_args().get("projectId")
        productId = parse.parse_args().get("productId")
        mailTo = parse.parse_args().get("mailTo")
        assignedTo = parse.parse_args().get("assignedTo")
        platformId = parse.parse_args().get("platformId")
        buildId = parse.parse_args().get("buildId")

        if projectId or productId:
            if not productId:
                return jsonify(myResponse(ResponseCode.ERROR, None, cantEmpty("productId")))
            if not projectId:
                return jsonify(myResponse(ResponseCode.ERROR, None, cantEmpty("projectId")))
            project = Project.get(projectId, "projectId")
            product = Product.get(productId, "productId")
            if product not in project.product_records:
                return jsonify(
                    myResponse(ResponseCode.Error_Relation, None, f"Project: Not included productId {productId}"))
            if product not in project.product_records:
                return jsonify(
                    myResponse(ResponseCode.Error_Relation, None, f"Project: Not included productId {productId}"))
            if platformId not in [i.id for i in product.platforms_records]:
                return jsonify(
                    myResponse(ResponseCode.Error_Relation, None, f"Product: Not included platformId {platformId}"))

            if buildId not in [i.id for i in product.builds_records]:
                return jsonify(
                    myResponse(ResponseCode.Error_Relation, None, f"Product: Not included buildId {buildId}"))

        if mailTo:
            User.get(mailTo, "mailTo")
        if assignedTo:
            User.get(assignedTo, "assignedTo")

        bug = Bugs.get(bugID, "bugID")
        bug.updater = g.user.id
        bug.updaterName = g.user.name
        bug.updateBug(parse.parse_args())

        return jsonify(myResponse(ResponseCode.SUCCESS, bug.id, ResponseError.OK))
Exemplo n.º 12
0
    def filter(self) -> list:
        sql = self.sql + self._paramParse()
        try:
            res = self.eng.execute(sql)
            return res.fetchall()
        except Exception as e:

            abort(
                myResponse(ResponseCode.SQL_ERROR, None,
                           ResponseError.SOME_ERROR_TRY_AGAIN))
Exemplo n.º 13
0
def delFile() -> jsonify:
    parse = MyParse()
    parse.add(name="fileID", required=True, type=int)
    fileID = parse.parse_args().get("fileID")
    bug = BugFile.get(fileID, "fileID")
    filePath = bug.filePath
    import os
    os.remove(filePath)
    bug.delete()
    return jsonify(myResponse(ResponseCode.SUCCESS, None, ResponseError.OK))
Exemplo n.º 14
0
 def put(self) -> jsonify:
     """
     修改部门信息
     :return: jsonify
     """
     parse = MyParse()
     parse.add(name="departmentId", required=True)
     parse.add(name="name", required=True)
     did = parse.parse_args().get("departmentId")
     name = parse.parse_args().get("name")
     d = Department.get(did, 'departmentId')
     try:
         d.name = name
         d.save()
         return jsonify(myResponse(ResponseCode.SUCCESS, d.id, ResponseError.OK))
     except Exception as e:
         log.error(e)
         db.session.rollback()
         return jsonify(myResponse(ResponseCode.ERROR, None, ResponseError.SOME_ERROR_TRY_AGAIN))
Exemplo n.º 15
0
    def _verify(self, body: list) -> list:
        for param in body:
            if not param.get("key") and not param.get(
                    "condition") and not param.get("val") and not param.get(
                        "opt"):
                abort(
                    myResponse(ResponseCode.SQL_PARAM_ERROR, None,
                               errorValue("")))
            if param.get("condition") not in self.conditions:
                abort(
                    myResponse(ResponseCode.SQL_PARAM_ERROR, None,
                               errorValue(param.get('condition'))))
            if param.get("condition") == "like":
                param['val'] = f"%{param['val']}%"
            if param.get("opt") not in self.opts:
                abort(
                    myResponse(ResponseCode.SQL_PARAM_ERROR, None,
                               errorValue(param.get('opt'))))

        return body
Exemplo n.º 16
0
    def post(self):
        """
        条件查询
        :title 包含  不包含  =   !=
        :id            = !=
        :assignedTo    = !=
        :creater       = !=
        :resolvedBy    = !=
        :solution      = !=
        :platform      = !=
        :level         = !=
        :priority      = !=
        :status        = !=
        :confirmed     = !=
        :errorType     = !=
        :createTime    = !=


        :return:
        """

        requestBody = {
            "option": "and",
            "searchBody": [
                {
                    "key": "id",
                    "condition": ">",
                    "val": 1
                }, {
                    "key": "level",
                    "condition": "=",
                    "val": "p1"
                }
            ]
        }

        parse = MyParse()
        parse.add(name="option", choices=['and', 'or'], required=True)
        parse.add(name="searchBody", type=list, required=True)
        bugInfos = [{
            "bugID": info[0],
            "createTime": info[1],
            "title": info[3],
            "level": info[4],
            "priority": info[5],
            "status": info[6],
            "confirmed": info[7],
            "creater": info[8],
            "updater": info[1],
            "solutionID": info[14]
        } for info in
            SearchParamsParse(parse.parse_args().get("searchBody"), parse.parse_args().get("option")).filter()]

        return jsonify(myResponse(ResponseCode.SUCCESS, bugInfos, ResponseError.OK))
Exemplo n.º 17
0
def putFile() -> jsonify:
    parse = MyParse()
    parse.add(name="fileID", required=True, type=int)
    parse.add(name="fileName", required=True)
    fileID = parse.parse_args().get("fileID")
    fileNewName = parse.parse_args().get('fileName')  # 没有后缀
    file = BugFile.get(fileID, "fileID")
    fileOldName = file.fileName
    fileOldPath = file.filePath
    import os
    try:
        fileNewName = fileNewName + "." + fileOldName.split(".")[1]
        fileNewPath = fileOldPath.replace(fileOldName, fileNewName)
        file.fileName = fileNewName
        file.filePath = fileNewPath
        os.rename(fileOldPath, fileNewPath)
        return jsonify(myResponse(ResponseCode.SUCCESS, file.id, ResponseError.OK))
    except Exception as e:
        log.error(e)
        return jsonify(myResponse(ResponseCode.ERROR, None, ResponseError.SOME_ERROR_TRY_AGAIN))
Exemplo n.º 18
0
    def post(self):
        """
        复制bug接口
        :return:
        """

        parse = MyParse()

        parse.add(name="bugID", type=int, required=True)
        bugID = parse.parse_args().get("bugID")
        bug = Bugs.get(bugID, "bugID", obj=False)
        return jsonify(myResponse(ResponseCode.SUCCESS, bug, ResponseError.OK))
Exemplo n.º 19
0
    def post(self, bugID):
        from werkzeug.utils import secure_filename
        from faker import Faker
        f = Faker()
        file = request.files.get('file')

        if not file:
            return jsonify(myResponse(ResponseCode.ERROR, None, ResponseError.NO_FIlE))
        if not bugID:
            return jsonify(myResponse(ResponseCode.ERROR, None, cantEmpty("bugID")))
        Bugs.get(bugID, 'bugID')

        fileName = secure_filename(file.filename)
        filePath = getFilePath(f.pystr() + '_' + fileName)

        bf = BugFile(fileName=fileName, filePath=filePath, bugID=bugID)

        try:
            file.save(filePath)
            bf.save()
            return jsonify(myResponse(ResponseCode.SUCCESS, bf.id, ResponseError.OK))
        except Exception as e:
            log.error(e)
            return jsonify(myResponse(ResponseCode.ERROR, None, ResponseCode.ERROR_TRY_AGAIN))
Exemplo n.º 20
0
    def updateBug(self, updateBody: dict):
        """数据更新"""
        try:
            if updateBody.get("module"):
                self.module = updateBody.get("module")

            if updateBody.get("title"):
                self.title = updateBody.get("title")

            if updateBody.get("level"):
                self.level = updateBody.get("level")

            if updateBody.get("priority"):
                self.priority = updateBody.get("priority")

            if updateBody.get("status"):
                self.status = updateBody.get("status")

            if updateBody.get("confirmed"):
                self.confirmed = updateBody.get("confirmed")

            if updateBody.get("platformId"):
                self.platform = updateBody.get("platformId")

            if updateBody.get("buildId"):
                self.build = updateBody.get("buildId")

            if updateBody.get("errorTypeId"):
                self.errorType = updateBody.get("errorTypeId")

            if updateBody.get("assignedTo"):
                self.assignedTo = updateBody.get("assignedTo")

            if updateBody.get("mailTo"):
                self.mailTo = updateBody.get("mailTo")

            if updateBody.get("stepsBody"):
                self.stepsBody = updateBody.get("stepsBody")

            db.session.add(self)
            db.session.commit()
        except Exception as e:
            log.error(e)
            abort(myResponse(1, None, e))
Exemplo n.º 21
0
    def post(self) -> jsonify:
        """
        确认bug接口
        :return:
        """
        parse = MyParse()
        parse.add(name="bugID", type=int, required=True)
        parse.add(name="assignedTo", type=int, required=True)
        parse.add(name="errorType", type=int, required=True)
        parse.add(name="priority")
        parse.add(name="mailTo")
        parse.add(name="note")

        bugID = parse.parse_args().get("bugID")

        bug = Bugs.get(bugID, "bugID")
        bug.update(parse.parse_args())

        return jsonify(myResponse(ResponseCode.SUCCESS, bug.id, ResponseError.OK))
Exemplo n.º 22
0
    def parse_args(self):
        """
        参数校验
        :return:
        """
        if self.body is None:
            abort(
                myResponse(ResponseCode.ERROR, None,
                           "request body cant be empty"))

        for kw in self.args:
            if kw['required'] is True:
                if not self.body.get(kw['name']) or self.body.get(
                        kw['name']) == "":
                    abort(
                        myResponse(ResponseCode.ERROR, None,
                                   cantEmpty(kw['name'])))

                # 类型判读
                if not isinstance(self.body[kw['name']], kw['type']):
                    abort(
                        myResponse(ResponseCode.ERROR, None,
                                   errorType(kw['name'])))
                # choice 判断
                if kw.get('choices'):
                    if self.body[kw['name']] not in kw['choices']:
                        abort(
                            myResponse(ResponseCode.ERROR, None,
                                       errorValue(kw['name'])))
            else:
                if self.body.get(kw['name']):
                    # 类型判读
                    if not isinstance(self.body[kw['name']], kw['type']):
                        abort(
                            myResponse(ResponseCode.ERROR, None,
                                       errorType(kw['name'])))
                    # choice 判断
                    if kw.get('choices'):
                        if self.body[kw['name']] not in kw['choices']:
                            abort(
                                myResponse(ResponseCode.ERROR, None,
                                           errorValue(kw['name'])))

                if kw.get("default") and self.body.get(kw['name']) is None:
                    self.body[kw['name']] = kw.get('default')

        return self.body
Exemplo n.º 23
0
    def post(self) -> jsonify:
        from COMMENT.sqlOpt import SqlOpt
        """
           按组搜索
           group:[{"key":"","val":"","condition":"<|>|=|like||!=","opt":"and|or"}]
           :return:
       """
        parse = MyParse()
        parse.add(name="group", required=True, type=list)
        bugInfos = [{
            "bugID": info[0],
            "createTime": info[1],
            "title": info[3],
            "level": info[4],
            "priority": info[5],
            "status": info[6],
            "confirmed": info[7],
            "creater": info[8],
            "updater": info[1],
            "solutionID": info[14]
        } for info in SqlOpt("bugs").select(parse.parse_args().get("group"))]

        return jsonify(myResponse(ResponseCode.SUCCESS, bugInfos, ResponseCode.OK))
Exemplo n.º 24
0
 def get(self):
     data = [
         {
             "id": 'trend-1',
             "updatedAt": datetime.datetime.now(),
             "user": {
                 "name": '曲丽丽',
                 "avatar": "",
             },
             "group": {
                 "name": '高逼格设计天团',
                 "link": 'http://github.com/',
             },
             "project": {
                 "name": '六月迭代',
                 "link": 'http://github.com/',
             },
             "template": '在 @{group} 新建项目 @{project}',
         },
         {
             "id": 'trend-2',
             "updatedAt": datetime.datetime.now(),
             "user": {
                 "name": '付小小',
                 "avatar": "",
             },
             "group": {
                 "name": '高逼格设计天团',
                 "link": 'http://github.com/',
             },
             "project": {
                 "name": '六月迭代',
                 "link": 'http://github.com/',
             },
             "template": '在 @{group} 新建项目 @{project}',
         }]
     return jsonify(myResponse(ResponseCode.SUCCESS, data, ResponseError.OK))
Exemplo n.º 25
0
    def post(self) -> jsonify:
        """
        解决bug
        :return:
        """
        parse = MyParse()
        parse.add(name='bugID', type=int, required=True)
        parse.add(name="confirm", type=int, required=True)
        parse.add(name="errorType", type=int)
        parse.add(name="mailTo", type=int)
        parse.add(name="priority", type=int, required=True)
        parse.add(name="note")

        bugID = parse.parse_args().get('bugID')
        note = parse.parse_args().get("note")

        bug = Bugs.get(bugID, "bugID")
        bug.update(parse.parse_args())

        if note:
            no = Note(bugID, note, g.user.id)
            no.save()

        return jsonify(myResponse(ResponseCode.SUCCESS, bug.id, ResponseError.OK))
Exemplo n.º 26
0
 def get(self):
     data = [
         {
             "id": 'xxx1',
             "title": "team1",
             "logo": "https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png",
             "description": '那是一种内在的东西,他们到达不了,也无法触及的',
             "updatedAt": datetime.datetime.now(),
             "member": '科学搬砖组',
             "href": '',
             "memberLink": '',
         },
         {
             "id": 'xxx2',
             "title": "team2",
             "logo": "https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png",
             "description": '希望是一个好东西,也许是最好的,好东西是不会消亡的',
             "updatedAt": datetime.datetime.now(),
             "member": '全组都是吴彦祖',
             "href": '',
             "memberLink": '',
         }
     ]
     return jsonify(myResponse(ResponseCode.SUCCESS, data, ResponseError.OK))
Exemplo n.º 27
0
    def post(self) -> jsonify:
        """
        指派bug
        :return:
        """
        parse = MyParse()
        parse.add(name="bugID", type=int, required=True)
        parse.add(name="assignedTo", type=int, required=True)
        parse.add(name="mailTo")
        parse.add(name="note")

        bugID = parse.parse_args().get("bugID")
        assTo = parse.parse_args().get("assignedTo")
        note = parse.parse_args().get("note")
        User.get(assTo, "assignedTo")
        bug = Bugs.get(bugID, "bugID")

        bug.update(parse.parse_args())

        if note:
            no = Note(bugID, note, g.user.id)
            no.save()

        return jsonify(myResponse(ResponseCode.SUCCESS, bug.id, ResponseError.OK))
Exemplo n.º 28
0
    def get(self) -> jsonify:
        """
        一些固定搜索哦
        :return:
        """
        parse = MyParse()
        parse.add(name="opt",
                  choices=['all', 'unClose', 'createByMe', 'assignedToMe', 'resolvedByMe'],
                  location="args",
                  required=True)

        infos = [{
            "bugID": bug.id,
            "createTime": bug.create_time,
            "title": bug.title,
            "level": bug.level,
            "priority": bug.priority,
            "status": bug.status,
            "confirmed": bug.confirmed,
            "creater": bug.creater,
            "updater": bug.updater,
            "solutionID": bug.solution
        } for bug in Bugs.optGetBugInfos(parse.parse_args().get("opt"))]
        return jsonify(myResponse(ResponseCode.SUCCESS, infos, ResponseError.OK))
Exemplo n.º 29
0
 def verify_name(cls, name):
     """同名校验"""
     res = cls.query.filter_by(name=name).first()
     if res:
         abort(
             myResponse(ResponseCode.ERROR, None, f"{name} already exists"))
Exemplo n.º 30
0
 def verify_account(cls, account):
     res = cls.query.filter_by(account=account).first()
     if res:
         abort(
             myResponse(ResponseCode.ERROR, None,
                        f"{account} already exists"))