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))
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)))
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
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))
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))
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))
def post(self): """ 获取用户信息 :return: """ user = g.user.getInfo() return jsonify(myResponse(ResponseCode.SUCCESS, user, ResponseError.OK))
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))
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))
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))
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))
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))
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))
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))
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
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))
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))
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))
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))
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))
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))
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
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))
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))
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))
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))
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))
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))
def verify_name(cls, name): """同名校验""" res = cls.query.filter_by(name=name).first() if res: abort( myResponse(ResponseCode.ERROR, None, f"{name} already exists"))
def verify_account(cls, account): res = cls.query.filter_by(account=account).first() if res: abort( myResponse(ResponseCode.ERROR, None, f"{account} already exists"))