# -*- coding:utf-8 -*- ''' @Author:Robin @Email: 329080237@qq.com @Wechat: 15618110227 @File: kernel.py @Date: 2021/9/25 16:51 @Description: ''' from utils.public import * from .base import RequestGit import requests, json import urllib.parse class CreateReport: def __init__(self, projectKey, data): self.projectKey = projectKey self.data = data def report_create(self): payload = { "projectKey_id": self.projectKey, "uuid": self.data.get("uuid"), "file_id": self.data.get("file_id"), "spend_time": self.data.get("spend_time"), } payload = dict(payload, **self.data.get("score")) #console(payload) item = Report.objects.create(**payload) return item.id def report_issues(self, reportKey): for i in self.data.get("issue"): del i["id"] # 删除原数据中ID字段 i["reportKey_id"] = reportKey ReportIssues.objects.create(**i) def report_metric(self, reportKey): payload = { "reportKey_id": reportKey, } payload = dict(payload, **self.data.get("metric")) ReportMetric.objects.create(**payload) def report_language(self, reportKey): payload = { "reportKey_id": reportKey, } del self.data["language"]["langs"] payload = dict(payload, **self.data.get("language")) ReportLanguage.objects.create(**payload) def report_langs(self, reportKey): for i in self.data.get("language").get("langs"): i["reportKey_id"] = reportKey ReportLangs.objects.create(**i) def report_duplication(self, reportKey): for i in self.data.get("duplication"): payload = { "reportKey_id": reportKey, "cloneLines": i['cloneLines'], "nrLines": i['nrLines'] } item = ReportDuplication.objects.create(**payload) for j in self.data.get("duplication").get("files"): files_payload = { "RDKey_id": item.id, "filePath": j["filePath"], "startLine": j["startLine"], "endLine": j["endLine"] } DuplicationFiles.objects.create(**files_payload) def getZIP(request, owner, repo, ref): #url = "http://39.103.231.107:3000/api/v1/repos/liugongyuan/kernelApi-test/archive/master.zip?access_token=4cc77190f9da0844acae6c1572e5a7e4b92a253b" api = "/repos/{}/{}/archive/{}.zip".format(owner, repo, ref) res = RequestGit(request, api).get() return res.content def code_analysis_test(request): data = json.loads(request.body) owner = data.get("owner") repo = data.get("repo") ref = data.get("ref") id = Project.objects.get(userKey__username=owner, repo_name=repo).id url = 'http://39.103.231.107:1234/kernel/api/v1/code_analysis' test_data = { "uuid":"1111-cvvs-wrnr-bjsa", "call_back_url":"http://wb-api.traumwork.com/API/web/git/kernel/code_analysis_result_call_back/?id="+str(id), "file_ext":".zip" } test_files = { '111d6-asd66-sdsd5-3ffda': getZIP(request, owner, repo, ref) } # 传递文件数据 response = requests.post(url=url, data=test_data, files=test_files) print(response.text) print('DONE!') return jsonData() def code_analysis_result_call_back(request): projectKey = request.GET.get("id") data = request.body result = data.decode() resData = transJson(result) console(resData) # 更新项目评估状态为:正在评估 Project.objects.filter(id=id).update(state=2) if resData["type"] == "result": # 将回调报告存入本地数据库 p = CreateReport(projectKey, resData["msg"]) reportKey = p.report_create() p.report_issues(reportKey) p.report_metric(reportKey) p.report_langs(reportKey) p.report_language(reportKey) p.report_duplication(reportKey) Project.objects.filter(id=id).update(state=1) return jsonData() def transJson(back_result): re_data = {} params = back_result.split("&") for i in params: k = i.split("=")[0] v = i.split("=")[1] if k == "msg": format_str1 = v.replace("+", "") format_str2 = urllib.parse.unquote(format_str1) re_data[k] = json.loads(format_str2) else: re_data[k] = v return re_data @try_except def reportView(request): data = json.loads(request.GET.get("data")) owner = data.get("owner") repo = data.get("repo") p = Project.objects.get(userKey__username=owner, repo_name=repo) item = Report.objects.filter(projectKey=p.id).order_by("-id") if item: reportKey = item[0].id resData = ReportMetric.objects.filter(reportKey=reportKey).order_by("-id").values()[0] resData["history"] = [] for i in item: rm = ReportMetric.objects.filter(reportKey=i.id) score_history = { "score": round(float(i.all_score), 2), "reliability_rating": rm[0].reliability_rating if rm else None, "security_rating": rm[0].security_rating if rm else None, "maintainability_rating": rm[0].maintainability_rating if rm else None } resData["history"].append(score_history) resData["name"] = p.name console(resData) code = 20000 message = "查询成功!" else: resData = [] code = 40001 message = "您还没有进行过代码评估!" return jsonData(code=code, message=message, data=resData) if __name__ == '__main__': pass #code_analysis_test() # result = 'uuid=1111-cvvs-wrnr-bjsa&file_id=111d6-asd66-sdsd5-3ffda&type=result&msg=%7B%0A++++%22issue%22%3A+%5B%0A++++++++%7B%0A++++++++++++%22id%22%3A+%22expr%22%2C%0A++++++++++++%22level%22%3A+%22meddle%22%2C%0A++++++++++++%22type%22%3A+%22smell%22%2C%0A++++++++++++%22file_path%22%3A+%22App.vue%22%2C%0A++++++++++++%22begin_line_number%22%3A+2%2C%0A++++++++++++%22end_line_number%22%3A+2%2C%0A++++++++++++%22rule_name%22%3A+%22Prohibit+unusually+placed+expressions%22%2C%0A++++++++++++%22rule_desc%22%3A+%22%E7%A6%81%E6%AD%A2%E5%9C%A8%E9%80%9A%E5%B8%B8%E4%BC%9A%E7%9C%8B%E5%88%B0%E8%B5%8B%E5%80%BC%E6%88%96%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%9C%B0%E6%96%B9%E4%BD%BF%E7%94%A8%E8%A1%A8%E8%BE%BE%E5%BC%8F%22%2C%0A++++++++++++%22rule_example%22%3A+%22%E6%AD%A4%E9%80%89%E9%A1%B9%E7%A6%81%E6%AD%A2%E5%9C%A8%E6%82%A8%E9%80%9A%E5%B8%B8%E5%B8%8C%E6%9C%9B%E7%9C%8B%E5%88%B0%E8%B5%8B%E5%80%BC%E6%88%96%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%9C%B0%E6%96%B9%E4%BD%BF%E7%94%A8%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E8%AD%A6%E5%91%8A%E3%80%82+%E5%A4%A7%E5%A4%9A%E6%95%B0%E6%97%B6%E5%80%99%EF%BC%8C%E8%BF%99%E6%A0%B7%E7%9A%84%E4%BB%A3%E7%A0%81%E6%98%AF%E4%B8%80%E4%B8%AA%E9%94%99%E5%AD%97%E3%80%82+%E4%BD%86%E6%98%AF%EF%BC%8C%E8%A7%84%E8%8C%83%E5%B9%B6%E6%9C%AA%E7%A6%81%E6%AD%A2%E5%AE%83%EF%BC%8C%E8%BF%99%E5%B0%B1%E6%98%AF%E4%B8%BA%E4%BB%80%E4%B9%88%E6%AD%A4%E8%AD%A6%E5%91%8A%E6%98%AF%E5%8F%AF%E9%80%89%E7%9A%84%E3%80%82%22%2C%0A++++++++++++%22solution%22%3A+null%2C%0A++++++++++++%22code_block_lang%22%3A+%22vue%22%2C%0A++++++++++++%22code_block_begin_line_number%22%3A+1%2C%0A++++++++++++%22code_block_end_line_number%22%3A+5%2C%0A++++++++++++%22code_block%22%3A+%22%60%60%60vue%5Cn%3C%21--%5Cn+%2A+%40Author%3A+Robin.lau%5Cn+%2A+%40Email%3A+329080237%40qq.com%5Cn+%2A+%40Wechat%3A+15618110227%5Cn--%3E%5Cn%60%60%60%22%0A++++++++%7D%2C%0A++++++++%7B%0A++++++++++++%22id%22%3A+%22expr%22%2C%0A++++++++++++%22level%22%3A+%22meddle%22%2C%0A++++++++++++%22type%22%3A+%22smell%22%2C%0A++++++++++++%22file_path%22%3A+%22App.vue%22%2C%0A++++++++++++%22begin_line_number%22%3A+3%2C%0A++++++++++++%22end_line_number%22%3A+3%2C%0A++++++++++++%22rule_name%22%3A+%22Prohibit+unusually+placed+expressions%22%2C%0A++++++++++++%22rule_desc%22%3A+%22%E7%A6%81%E6%AD%A2%E5%9C%A8%E9%80%9A%E5%B8%B8%E4%BC%9A%E7%9C%8B%E5%88%B0%E8%B5%8B%E5%80%BC%E6%88%96%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%9C%B0%E6%96%B9%E4%BD%BF%E7%94%A8%E8%A1%A8%E8%BE%BE%E5%BC%8F%22%2C%0A++++++++++++%22rule_example%22%3A+%22%E6%AD%A4%E9%80%89%E9%A1%B9%E7%A6%81%E6%AD%A2%E5%9C%A8%E6%82%A8%E9%80%9A%E5%B8%B8%E5%B8%8C%E6%9C%9B%E7%9C%8B%E5%88%B0%E8%B5%8B%E5%80%BC%E6%88%96%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%9C%B0%E6%96%B9%E4%BD%BF%E7%94%A8%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E8%AD%A6%E5%91%8A%E3%80%82+%E5%A4%A7%E5%A4%9A%E6%95%B0%E6%97%B6%E5%80%99%EF%BC%8C%E8%BF%99%E6%A0%B7%E7%9A%84%E4%BB%A3%E7%A0%81%E6%98%AF%E4%B8%80%E4%B8%AA%E9%94%99%E5%AD%97%E3%80%82+%E4%BD%86%E6%98%AF%EF%BC%8C%E8%A7%84%E8%8C%83%E5%B9%B6%E6%9C%AA%E7%A6%81%E6%AD%A2%E5%AE%83%EF%BC%8C%E8%BF%99%E5%B0%B1%E6%98%AF%E4%B8%BA%E4%BB%80%E4%B9%88%E6%AD%A4%E8%AD%A6%E5%91%8A%E6%98%AF%E5%8F%AF%E9%80%89%E7%9A%84%E3%80%82%22%2C%0A++++++++++++%22solution%22%3A+null%2C%0A++++++++++++%22code_block_lang%22%3A+%22vue%22%2C%0A++++++++++++%22code_block_begin_line_number%22%3A+1%2C%0A++++++++++++%22code_block_end_line_number%22%3A+6%2C%0A++++++++++++%22code_block%22%3A+%22%60%60%60vue%5Cn%3C%21--%5Cn+%2A+%40Author%3A+Robin.lau%5Cn+%2A+%40Email%3A+329080237%40qq.com%5Cn+%2A+%40Wechat%3A+15618110227%5Cn--%3E%5Cn%3Ctemplate%3E%5Cn%60%60%60%22%0A++++++++%7D%2C%0A++++++++%7B%0A++++++++++++%22id%22%3A+%22expr%22%2C%0A++++++++++++%22level%22%3A+%22meddle%22%2C%0A++++++++++++%22type%22%3A+%22smell%22%2C%0A++++++++++++%22file_path%22%3A+%22App.vue%22%2C%0A++++++++++++%22begin_line_number%22%3A+5%2C%0A++++++++++++%22end_line_number%22%3A+5%2C%0A++++++++++++%22rule_name%22%3A+%22Prohibit+unusually+placed+expressions%22%2C%0A++++++++++++%22rule_desc%22%3A+%22%E7%A6%81%E6%AD%A2%E5%9C%A8%E9%80%9A%E5%B8%B8%E4%BC%9A%E7%9C%8B%E5%88%B0%E8%B5%8B%E5%80%BC%E6%88%96%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%9C%B0%E6%96%B9%E4%BD%BF%E7%94%A8%E8%A1%A8%E8%BE%BE%E5%BC%8F%22%2C%0A++++++++++++%22rule_example%22%3A+%22%E6%AD%A4%E9%80%89%E9%A1%B9%E7%A6%81%E6%AD%A2%E5%9C%A8%E6%82%A8%E9%80%9A%E5%B8%B8%E5%B8%8C%E6%9C%9B%E7%9C%8B%E5%88%B0%E8%B5%8B%E5%80%BC%E6%88%96%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%9C%B0%E6%96%B9%E4%BD%BF%E7%94%A8%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E8%AD%A6%E5%91%8A%E3%80%82+%E5%A4%A7%E5%A4%9A%E6%95%B0%E6%97%B6%E5%80%99%EF%BC%8C%E8%BF%99%E6%A0%B7%E7%9A%84%E4%BB%A3%E7%A0%81%E6%98%AF%E4%B8%80%E4%B8%AA%E9%94%99%E5%AD%97%E3%80%82+%E4%BD%86%E6%98%AF%EF%BC%8C%E8%A7%84%E8%8C%83%E5%B9%B6%E6%9C%AA%E7%A6%81%E6%AD%A2%E5%AE%83%EF%BC%8C%E8%BF%99%E5%B0%B1%E6%98%AF%E4%B8%BA%E4%BB%80%E4%B9%88%E6%AD%A4%E8%AD%A6%E5%91%8A%E6%98%AF%E5%8F%AF%E9%80%89%E7%9A%84%E3%80%82%22%2C%0A++++++++++++%22solution%22%3A+null%2C%0A++++++++++++%22code_block_lang%22%3A+%22vue%22%2C%0A++++++++++++%22code_block_begin_line_number%22%3A+2%2C%0A++++++++++++%22code_block_end_line_number%22%3A+8%2C%0A++++++++++++%22code_block%22%3A+%22%60%60%60vue%5Cn+%2A+%40Author%3A+Robin.lau%5Cn+%2A+%40Email%3A+329080237%40qq.com%5Cn+%2A+%40Wechat%3A+15618110227%5Cn--%3E%5Cn%3Ctemplate%3E%5Cn++%3Cdiv+id%3D%5C%22app%5C%22%3E%5Cn++++%3Crouter-view+v-if%3D%5C%22isRouterAlive%5C%22+%3Akey%3D%5C%22key%5C%22%3E%3C%2Frouter-view%3E%5Cn%60%60%60%22%0A++++++++%7D%2C%0A++++++++%7B%0A++++++++++++%22id%22%3A+%22expr%22%2C%0A++++++++++++%22level%22%3A+%22meddle%22%2C%0A++++++++++++%22type%22%3A+%22smell%22%2C%0A++++++++++++%22file_path%22%3A+%22App.vue%22%2C%0A++++++++++++%22begin_line_number%22%3A+6%2C%0A++++++++++++%22end_line_number%22%3A+6%2C%0A++++++++++++%22rule_name%22%3A+%22Prohibit+unusually+placed+expressions%22%2C%0A++++++++++++%22rule_desc%22%3A+%22%E7%A6%81%E6%AD%A2%E5%9C%A8%E9%80%9A%E5%B8%B8%E4%BC%9A%E7%9C%8B%E5%88%B0%E8%B5%8B%E5%80%BC%E6%88%96%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%9C%B0%E6%96%B9%E4%BD%BF%E7%94%A8%E8%A1%A8%E8%BE%BE%E5%BC%8F%22%2C%0A++++++++++++%22rule_example%22%3A+%22%E6%AD%A4%E9%80%89%E9%A1%B9%E7%A6%81%E6%AD%A2%E5%9C%A8%E6%82%A8%E9%80%9A%E5%B8%B8%E5%B8%8C%E6%9C%9B%E7%9C%8B%E5%88%B0%E8%B5%8B%E5%80%BC%E6%88%96%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%9C%B0%E6%96%B9%E4%BD%BF%E7%94%A8%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E8%AD%A6%E5%91%8A%E3%80%82+%E5%A4%A7%E5%A4%9A%E6%95%B0%E6%97%B6%E5%80%99%EF%BC%8C%E8%BF%99%E6%A0%B7%E7%9A%84%E4%BB%A3%E7%A0%81%E6%98%AF%E4%B8%80%E4%B8%AA%E9%94%99%E5%AD%97%E3%80%82+%E4%BD%86%E6%98%AF%EF%BC%8C%E8%A7%84%E8%8C%83%E5%B9%B6%E6%9C%AA%E7%A6%81%E6%AD%A2%E5%AE%83%EF%BC%8C%E8%BF%99%E5%B0%B1%E6%98%AF%E4%B8%BA%E4%BB%80%E4%B9%88%E6%AD%A4%E8%AD%A6%E5%91%8A%E6%98%AF%E5%8F%AF%E9%80%89%E7%9A%84%E3%80%82%22%2C%0A++++++++++++%22solution%22%3A+null%2C%0A++++++++++++%22code_block_lang%22%3A+%22vue%22%2C%0A++++++++++++%22code_block_begin_line_number%22%3A+3%2C%0A++++++++++++%22code_block_end_line_number%22%3A+9%2C%0A++++++++++++%22code_block%22%3A+%22%60%60%60vue%5Cn+%2A+%40Email%3A+329080237%40qq.com%5Cn+%2A+%40Wechat%3A+15618110227%5Cn--%3E%5Cn%3Ctemplate%3E%5Cn++%3Cdiv+id%3D%5C%22app%5C%22%3E%5Cn++++%3Crouter-view+v-if%3D%5C%22isRouterAlive%5C%22+%3Akey%3D%5C%22key%5C%22%3E%3C%2Frouter-view%3E%5Cn++%3C%2Fdiv%3E%5Cn%60%60%60%22%0A++++++++%7D%2C%0A++++++++%7B%0A++++++++++++%22id%22%3A+%22C0114%22%2C%0A++++++++++++%22level%22%3A+%22low%22%2C%0A++++++++++++%22type%22%3A+%22smell%22%2C%0A++++++++++++%22file_path%22%3A+%22manage.py%22%2C%0A++++++++++++%22begin_line_number%22%3A+1%2C%0A++++++++++++%22end_line_number%22%3A+1%2C%0A++++++++++++%22rule_name%22%3A+%22missing-module-docstring%5Cn%E7%BC%BA%E5%B0%91%E6%A8%A1%E5%9D%97%E6%96%87%E6%A1%A3%E5%AD%97%E7%AC%A6%E4%B8%B2+%28C0114%29%22%2C%0A++++++++++++%22rule_desc%22%3A+%22%E7%BC%BA%E5%B0%91%E6%A8%A1%E5%9D%97%E6%96%87%E6%A1%A3%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%82+%5Cn%E5%9C%A8%E6%A8%A1%E5%9D%97%E6%B2%A1%E6%9C%89%E6%96%87%E6%A1%A3%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%97%B6%E4%BD%BF%E7%94%A8%E3%80%82%E7%A9%BA%E6%A8%A1%E5%9D%97%E4%B8%8D%E9%9C%80%E8%A6%81%E6%96%87%E6%A1%A3%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%82%22%2C%0A++++++++++++%22rule_example%22%3A+%22%23+missing-module-docstring%E7%BC%BA%E5%B0%91%E6%A8%A1%E5%9D%97%E6%96%87%E6%A1%A3%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%82++%28C0114%29%5Cn%E5%9C%A8%E6%A8%A1%E5%9D%97%E6%B2%A1%E6%9C%89%E6%96%87%E6%A1%A3%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%97%B6%E5%8F%91%E5%87%BA%E6%AD%A4%E8%AD%A6%E5%91%8A%E6%B6%88%E6%81%AF%E3%80%82%E7%A9%BA%E6%A8%A1%E5%9D%97%E4%B8%8D%E9%9C%80%E8%A6%81%E6%96%87%E6%A1%A3%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%82%22%2C%0A++++++++++++%22solution%22%3A+null%2C%0A++++++++++++%22code_block_lang%22%3A+%22python%22%2C%0A++++++++++++%22code_block_begin_line_number%22%3A+1%2C%0A++++++++++++%22code_block_end_line_number%22%3A+4%2C%0A++++++++++++%22code_block%22%3A+%22%60%60%60python%5Cn%23%21%2Fusr%2Fbin%2Fenv+python%5Cnimport+os%5Cnimport+sys%5Cn%5Cn%60%60%60%22%0A++++++++%7D%2C%0A++++++++%7B%0A++++++++++++%22id%22%3A+%22W0611%22%2C%0A++++++++++++%22level%22%3A+%22meddle%22%2C%0A++++++++++++%22type%22%3A+%22smell%22%2C%0A++++++++++++%22file_path%22%3A+%22manage.py%22%2C%0A++++++++++++%22begin_line_number%22%3A+14%2C%0A++++++++++++%22end_line_number%22%3A+14%2C%0A++++++++++++%22rule_name%22%3A+%22%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%E5%AF%BC%E5%85%A5+%28W0611%29%22%2C%0A++++++++++++%22rule_desc%22%3A+%22%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84+%25s%E3%80%82%E5%9C%A8%E4%B8%8D%E4%BD%BF%E7%94%A8%E5%AF%BC%E5%85%A5%E7%9A%84%E6%A8%A1%E5%9D%97%E6%88%96%E5%8F%98%E9%87%8F%E6%97%B6%E4%BD%BF%E7%94%A8%E3%80%82%22%2C%0A++++++++++++%22rule_example%22%3A+%22%E2%80%9C%23%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%E5%AF%BC%E5%85%A5%EF%BC%88W0611%EF%BC%89%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84+%25s+%E5%9C%A8%E6%9C%AA%E4%BD%BF%E7%94%A8%E5%AF%BC%E5%85%A5%E7%9A%84%E6%A8%A1%E5%9D%97%E6%88%96%E5%8F%98%E9%87%8F%E6%97%B6%E4%BD%BF%E7%94%A8%E3%80%82%5C%22%22%2C%0A++++++++++++%22solution%22%3A+null%2C%0A++++++++++++%22code_block_lang%22%3A+%22python%22%2C%0A++++++++++++%22code_block_begin_line_number%22%3A+11%2C%0A++++++++++++%22code_block_end_line_number%22%3A+17%2C%0A++++++++++++%22code_block%22%3A+%22%60%60%60python%5Cn++++++++%23+issue+is+really+that+Django+is+missing+to+avoid+masking+other%5Cn++++++++%23+exceptions+on+Python+2.%5Cn++++++++try%3A%5Cn++++++++++++import+django%5Cn++++++++except+ImportError%3A%5Cn++++++++++++raise+ImportError%28%5Cn++++++++++++++++%5C%22Couldn%27t+import+Django.+Are+you+sure+it%27s+installed+and+%5C%22%5Cn%60%60%60%22%0A++++++++%7D%2C%0A++++++++%7B%0A++++++++++++%22id%22%3A+%22W0707%22%2C%0A++++++++++++%22level%22%3A+%22meddle%22%2C%0A++++++++++++%22type%22%3A+%22smell%22%2C%0A++++++++++++%22file_path%22%3A+%22manage.py%22%2C%0A++++++++++++%22begin_line_number%22%3A+16%2C%0A++++++++++++%22end_line_number%22%3A+16%2C%0A++++++++++++%22rule_name%22%3A+%22raise-missing-from+%28W0707%29%22%2C%0A++++++++++++%22rule_desc%22%3A+%22%E8%80%83%E8%99%91%E4%BD%BF%E7%94%A8+%27from%27+%E5%85%B3%E9%94%AE%E5%AD%97%E6%98%8E%E7%A1%AE%E9%87%8D%E6%96%B0%E5%8A%A0%E6%B3%A8%E3%80%82+Python+3+%E7%9A%84%E5%BC%82%E5%B8%B8%E9%93%BE%E6%8E%A5%E6%84%8F%E5%91%B3%E7%9D%80%E5%AE%83%E6%98%BE%E7%A4%BA%E4%BA%86%E5%BD%93%E5%89%8D%E5%BC%82%E5%B8%B8%E7%9A%84%E5%9B%9E%E6%BA%AF%EF%BC%8C%E4%B9%9F%E6%98%BE%E7%A4%BA%E4%BA%86%E5%8E%9F%E5%A7%8B%E5%BC%82%E5%B8%B8%E3%80%82%E4%B8%8D%E4%BD%BF%E7%94%A8+raise+from+%E4%BC%9A%E4%BD%BF%E5%9B%9E%E6%BA%AF%E4%B8%8D%E5%87%86%E7%A1%AE%EF%BC%8C%E5%9B%A0%E4%B8%BA%E8%AF%A5%E6%B6%88%E6%81%AF%E6%9A%97%E7%A4%BA%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86%E4%BB%A3%E7%A0%81%E6%9C%AC%E8%BA%AB%E5%AD%98%E5%9C%A8%E9%94%99%E8%AF%AF%EF%BC%8C%E8%BF%99%E6%98%AF%E4%B8%8E%E5%8C%85%E8%A3%85%E5%BC%82%E5%B8%B8%E4%B8%8D%E5%90%8C%E7%9A%84%E6%83%85%E5%86%B5%E3%80%82%22%2C%0A++++++++++++%22rule_example%22%3A+%22%E2%80%9C%23+raise-missing-from+%28W0707%29%E8%80%83%E8%99%91%E4%BD%BF%E7%94%A8%E2%80%9Cfrom%E2%80%9D%E5%85%B3%E9%94%AE%E5%AD%97%E6%98%BE%E5%BC%8F%E9%87%8D%E6%96%B0%E5%BC%95%E5%8F%91+Python+3+%E7%9A%84%E5%BC%82%E5%B8%B8%E9%93%BE%E6%84%8F%E5%91%B3%E7%9D%80%E5%AE%83%E6%98%BE%E7%A4%BA%E4%BA%86%E5%BD%93%E5%89%8D%E5%BC%82%E5%B8%B8%E7%9A%84%E5%9B%9E%E6%BA%AF%EF%BC%8C%E4%BD%86%E4%B9%9F%E6%98%BE%E7%A4%BA%E4%BA%86%E5%8E%9F%E5%A7%8B%E5%BC%82%E5%B8%B8%E3%80%82%E4%B8%8D%E4%BD%BF%E7%94%A8+raise+from+%E4%BC%9A%E4%BD%BF%E5%9B%9E%E6%BA%AF%E4%B8%8D%E5%87%86%E7%A1%AE%EF%BC%8C%E5%9B%A0%E4%B8%BA%E8%AF%A5%E6%B6%88%E6%81%AF%E6%9A%97%E7%A4%BA%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86%E4%BB%A3%E7%A0%81%E6%9C%AC%E8%BA%AB%E5%AD%98%E5%9C%A8%E9%94%99%E8%AF%AF%EF%BC%8C%E8%BF%99%E6%98%AF%E4%B8%8E%E5%8C%85%E8%A3%85%E5%BC%82%E5%B8%B8%E4%B8%8D%E5%90%8C%E7%9A%84%E6%83%85%E5%86%B5%E3%80%82%E2%80%9D%22%2C%0A++++++++++++%22solution%22%3A+null%2C%0A++++++++++++%22code_block_lang%22%3A+%22python%22%2C%0A++++++++++++%22code_block_begin_line_number%22%3A+13%2C%0A++++++++++++%22code_block_end_line_number%22%3A+19%2C%0A++++++++++++%22code_block%22%3A+%22%60%60%60python%5Cn++++++++try%3A%5Cn++++++++++++import+django%5Cn++++++++except+ImportError%3A%5Cn++++++++++++raise+ImportError%28%5Cn++++++++++++++++%5C%22Couldn%27t+import+Django.+Are+you+sure+it%27s+installed+and+%5C%22%5Cn++++++++++++++++%5C%22available+on+your+PYTHONPATH+environment+variable%3F+Did+you+%5C%22%5Cn++++++++++++++++%5C%22forget+to+activate+a+virtual+environment%3F%5C%22%5Cn%60%60%60%22%0A++++++++%7D%2C%0A++++++++%7B%0A++++++++++++%22id%22%3A+%22S125%22%2C%0A++++++++++++%22level%22%3A+%22low%22%2C%0A++++++++++++%22type%22%3A+%22smell%22%2C%0A++++++++++++%22file_path%22%3A+%22App.vue%22%2C%0A++++++++++++%22begin_line_number%22%3A+%2248%22%2C%0A++++++++++++%22end_line_number%22%3A+%2248%22%2C%0A++++++++++++%22rule_name%22%3A+%22%E4%BB%A3%E7%A0%81%E6%AE%B5%E4%B8%8D%E5%BA%94%E8%A2%AB%E6%B3%A8%E9%87%8A%E6%8E%89%22%2C%0A++++++++++++%22rule_desc%22%3A+%22%E7%A8%8B%E5%BA%8F%E5%91%98%E4%B8%8D%E5%BA%94%E8%AF%A5%E6%B3%A8%E9%87%8A%E6%8E%89%E4%BB%A3%E7%A0%81%EF%BC%8C%E5%9B%A0%E4%B8%BA%E5%AE%83%E4%BC%9A%E4%BD%BF%E7%A8%8B%E5%BA%8F%E5%8F%98%E5%BE%97%E8%87%83%E8%82%BF%EF%BC%8C%E9%99%8D%E4%BD%8E%E5%8F%AF%E8%AF%BB%E6%80%A7%E3%80%82%5Cn%E5%BA%94%E5%88%A0%E9%99%A4%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%E4%BB%A3%E7%A0%81%EF%BC%8C%E5%A6%82%E6%9E%9C%E9%9C%80%E8%A6%81%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BB%8E%E6%BA%90%E4%BB%A3%E7%A0%81%E7%AE%A1%E7%90%86%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E4%B8%AD%E6%A3%80%E7%B4%A2%E8%BF%99%E4%BA%9B%E4%BB%A3%E7%A0%81%E3%80%82%22%2C%0A++++++++++++%22rule_example%22%3A+null%2C%0A++++++++++++%22solution%22%3A+null%2C%0A++++++++++++%22code_block_lang%22%3A+%22vue%22%2C%0A++++++++++++%22code_block_begin_line_number%22%3A+45%2C%0A++++++++++++%22code_block_end_line_number%22%3A+51%2C%0A++++++++++++%22code_block%22%3A+%22%60%60%60vue%5Cn++++++initSocket%28%29+%7B%5Cn++++++++let+that+%3D+this%3B%5Cn++++++++if+%28%5C%22WebSocket%5C%22+in+window%29+%7B%5Cn++++++++++%2F%2F%E7%BA%BF%E4%B8%8A%E7%8E%AF%E5%A2%83%5Cn++++++++++%2F%2Fthat.ws+%3D+new+WebSocket%28%5C%22ws%3A%2F%2Fwb-web.traumwork.com%2Fws%2Fclient%2F%5C%22%2Bthat.userInfo.id%2B%5C%22%2F%5C%22%29%3B%5Cn++++++++++%2F%2F%E6%9C%AC%E5%9C%B0%E7%8E%AF%E5%A2%83%5Cn++++++++++that.ws+%3D+new+WebSocket%28%5C%22ws%3A%2F%2F127.0.0.1%3A8000%2Fws%2Fclient%2F%5C%22%2Bthat.userInfo.id%2B%5C%22%2F%5C%22%29%3B%5Cn%60%60%60%22%0A++++++++%7D%2C%0A++++++++%7B%0A++++++++++++%22id%22%3A+%22S125%22%2C%0A++++++++++++%22level%22%3A+%22low%22%2C%0A++++++++++++%22type%22%3A+%22smell%22%2C%0A++++++++++++%22file_path%22%3A+%22App.vue%22%2C%0A++++++++++++%22begin_line_number%22%3A+%2260%22%2C%0A++++++++++++%22end_line_number%22%3A+%2260%22%2C%0A++++++++++++%22rule_name%22%3A+%22%E4%BB%A3%E7%A0%81%E6%AE%B5%E4%B8%8D%E5%BA%94%E8%A2%AB%E6%B3%A8%E9%87%8A%E6%8E%89%22%2C%0A++++++++++++%22rule_desc%22%3A+%22%E7%A8%8B%E5%BA%8F%E5%91%98%E4%B8%8D%E5%BA%94%E8%AF%A5%E6%B3%A8%E9%87%8A%E6%8E%89%E4%BB%A3%E7%A0%81%EF%BC%8C%E5%9B%A0%E4%B8%BA%E5%AE%83%E4%BC%9A%E4%BD%BF%E7%A8%8B%E5%BA%8F%E5%8F%98%E5%BE%97%E8%87%83%E8%82%BF%EF%BC%8C%E9%99%8D%E4%BD%8E%E5%8F%AF%E8%AF%BB%E6%80%A7%E3%80%82%5Cn%E5%BA%94%E5%88%A0%E9%99%A4%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%E4%BB%A3%E7%A0%81%EF%BC%8C%E5%A6%82%E6%9E%9C%E9%9C%80%E8%A6%81%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BB%8E%E6%BA%90%E4%BB%A3%E7%A0%81%E7%AE%A1%E7%90%86%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E4%B8%AD%E6%A3%80%E7%B4%A2%E8%BF%99%E4%BA%9B%E4%BB%A3%E7%A0%81%E3%80%82%22%2C%0A++++++++++++%22rule_example%22%3A+null%2C%0A++++++++++++%22solution%22%3A+null%2C%0A++++++++++++%22code_block_lang%22%3A+%22vue%22%2C%0A++++++++++++%22code_block_begin_line_number%22%3A+57%2C%0A++++++++++++%22code_block_end_line_number%22%3A+63%2C%0A++++++++++++%22code_block%22%3A+%22%60%60%60vue%5Cn++++++++++that.ws.onclose+%3D+function+%28%29+%7B%5Cn++++++++++++%2F%2F+%E5%85%B3%E9%97%AD+websocket%5Cn++++++++++++console.log%28%5C%22%E8%BF%9E%E6%8E%A5%E5%B7%B2%E5%85%B3%E9%97%AD...%5C%22%29%3B%5Cn++++++++++++%2F%2F%E6%96%AD%E7%BA%BF%E9%87%8D%E6%96%B0%E8%BF%9E%E6%8E%A5%5Cn++++++++++++%2F%2F+setTimeout%28%28%29+%3D%3E+%7B%5Cn++++++++++++%2F%2F+++++that.initSocket%28%29%3B%5Cn++++++++++++%2F%2F+%7D%2C+3000%29%3B%5Cn%60%60%60%22%0A++++++++%7D%0A++++%5D%2C%0A++++%22metric%22%3A+%7B%0A++++++++%22files%22%3A+%222%22%2C%0A++++++++%22codes%22%3A+%2267%22%2C%0A++++++++%22lines%22%3A+%2298%22%2C%0A++++++++%22statements%22%3A+%2231%22%2C%0A++++++++%22classes%22%3A+%220%22%2C%0A++++++++%22functions%22%3A+%229%22%2C%0A++++++++%22cognitive_complexity%22%3A+%229%22%2C%0A++++++++%22complexity%22%3A+%2212%22%2C%0A++++++++%22duplicated_lines%22%3A+%220%22%2C%0A++++++++%22duplicate_blocks%22%3A+%220%22%2C%0A++++++++%22duplicate_files%22%3A+%220%22%2C%0A++++++++%22duplicate_rate%22%3A+%220.00%22%2C%0A++++++++%22comment_lines%22%3A+%2214%22%2C%0A++++++++%22comment_rate%22%3A+%2217.3%22%2C%0A++++++++%22uncover_lines%22%3A+%2231%22%2C%0A++++++++%22cover_lines%22%3A+%2231%22%2C%0A++++++++%22cover_rate%22%3A+%220.0%22%2C%0A++++++++%22line_cover_rate%22%3A+%220.0%22%2C%0A++++++++%22code_smells%22%3A+%222%22%2C%0A++++++++%22maintainability_rating%22%3A+%221.0%22%2C%0A++++++++%22maintainability_time%22%3A+%2210%22%2C%0A++++++++%22bugs%22%3A+%220%22%2C%0A++++++++%22reliability_rating%22%3A+%221.0%22%2C%0A++++++++%22reliability_time%22%3A+%220%22%2C%0A++++++++%22vulnerabilities%22%3A+%220%22%2C%0A++++++++%22security_rating%22%3A+%221.0%22%2C%0A++++++++%22security_time%22%3A+%220%22%0A++++%7D%2C%0A++++%22language%22%3A+%7B%0A++++++++%22all_langs%22%3A+%223%22%2C%0A++++++++%22all_codes%22%3A+%2282%22%2C%0A++++++++%22all_lines%22%3A+%2296%22%2C%0A++++++++%22all_files%22%3A+%223%22%2C%0A++++++++%22all_sizes%22%3A+%222616%22%2C%0A++++++++%22all_comments%22%3A+%229%22%2C%0A++++++++%22all_complexity%22%3A+%224%22%2C%0A++++++++%22comment_rate%22%3A+%229.89%22%2C%0A++++++++%22langs%22%3A+%5B%0A++++++++++++%7B%0A++++++++++++++++%22name%22%3A+%22Markdown%22%2C%0A++++++++++++++++%22bytes%22%3A+0%2C%0A++++++++++++++++%22lines%22%3A+0%2C%0A++++++++++++++++%22code%22%3A+0%2C%0A++++++++++++++++%22comment%22%3A+0%2C%0A++++++++++++++++%22blank%22%3A+0%2C%0A++++++++++++++++%22complexity%22%3A+0%2C%0A++++++++++++++++%22count%22%3A+1%2C%0A++++++++++++++++%22rate%22%3A+%220.00%22%0A++++++++++++%7D%2C%0A++++++++++++%7B%0A++++++++++++++++%22name%22%3A+%22Python%22%2C%0A++++++++++++++++%22bytes%22%3A+804%2C%0A++++++++++++++++%22lines%22%3A+22%2C%0A++++++++++++++++%22code%22%3A+17%2C%0A++++++++++++++++%22comment%22%3A+4%2C%0A++++++++++++++++%22blank%22%3A+1%2C%0A++++++++++++++++%22complexity%22%3A+1%2C%0A++++++++++++++++%22count%22%3A+1%2C%0A++++++++++++++++%22rate%22%3A+%2220.73%22%0A++++++++++++%7D%2C%0A++++++++++++%7B%0A++++++++++++++++%22name%22%3A+%22Vue%22%2C%0A++++++++++++++++%22bytes%22%3A+1812%2C%0A++++++++++++++++%22lines%22%3A+74%2C%0A++++++++++++++++%22code%22%3A+65%2C%0A++++++++++++++++%22comment%22%3A+5%2C%0A++++++++++++++++%22blank%22%3A+4%2C%0A++++++++++++++++%22complexity%22%3A+3%2C%0A++++++++++++++++%22count%22%3A+1%2C%0A++++++++++++++++%22rate%22%3A+%2279.27%22%0A++++++++++++%7D%0A++++++++%5D%0A++++%7D%2C%0A++++%22duplication%22%3A+%5B%5D%2C%0A++++%22score%22%3A+%7B%0A++++++++%22all_score%22%3A+%2292.23544776119402%22%2C%0A++++++++%22comment_score%22%3A+%224.325%22%2C%0A++++++++%22coverage_score%22%3A+%225%22%2C%0A++++++++%22dup_score%22%3A+%225%22%2C%0A++++++++%22complexity_score%22%3A+%220%22%2C%0A++++++++%22smell_score%22%3A+%227.91044776119403%22%2C%0A++++++++%22bug_score%22%3A+%2230.0%22%2C%0A++++++++%22vulnerability_score%22%3A+%2240.0%22%0A++++%7D%2C%0A++++%22uuid%22%3A+%221111-cvvs-wrnr-bjsa%22%2C%0A++++%22file_id%22%3A+%22111d6-asd66-sdsd5-3ffda%22%2C%0A++++%22spend_time%22%3A+%22174%22%0A%7D' # data = transJson(result) # print(data)