cabinet-manage/git/kernel.py

188 lines
26 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding:utf-8 -*-
'''
@AuthorRobin
@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)