From 81de96d1eeaa7240dd1b6011b44811d404ea6f40 Mon Sep 17 00:00:00 2001
From: Clark Wang <107419732+OEG-Clark@users.noreply.github.com>
Date: Mon, 27 Feb 2023 14:18:48 +0100
Subject: [PATCH 01/15] Add files via upload
---
inspect4py/cli.py | 47 +++-
.../models/json_files/__init__.json | 1 +
inspect4py/output_dir/directory_info.json | 1 +
inspect4py/parse_setup_files.py | 4 +-
inspect4py/resources/my-languages.so | Bin 0 -> 408064 bytes
.../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 247 bytes
.../__pycache__/builder.cpython-39.pyc | Bin 0 -> 12726 bytes
.../staticfg/__pycache__/model.cpython-39.pyc | Bin 0 -> 7447 bytes
inspect4py/utils.py | 257 +++++++++++++++++-
9 files changed, 300 insertions(+), 10 deletions(-)
create mode 100644 inspect4py/output_dir/Autumn945_MGNN-SPred/MGNN-SPred-master/models/json_files/__init__.json
create mode 100644 inspect4py/output_dir/directory_info.json
create mode 100644 inspect4py/resources/my-languages.so
create mode 100644 inspect4py/staticfg/__pycache__/__init__.cpython-39.pyc
create mode 100644 inspect4py/staticfg/__pycache__/builder.cpython-39.pyc
create mode 100644 inspect4py/staticfg/__pycache__/model.cpython-39.pyc
diff --git a/inspect4py/cli.py b/inspect4py/cli.py
index 166b275..6ee07bd 100644
--- a/inspect4py/cli.py
+++ b/inspect4py/cli.py
@@ -1,13 +1,16 @@
+import ast
import json
import tokenize
import types
import builtins
import click
from docstring_parser import parse as doc_parse
+from tree_sitter import Language, Parser
from inspect4py import __version__
from inspect4py.staticfg import builder
from inspect4py.utils import *
+# from utils import *
"""
Code Inspector
@@ -26,7 +29,7 @@
class CodeInspection:
- def __init__(self, path, out_control_flow_path, out_json_path, control_flow, abstract_syntax_tree, source_code):
+ def __init__(self, path, out_control_flow_path, out_json_path, control_flow, abstract_syntax_tree, source_code, data_flow, parser):
""" init method initializes the Code_Inspection object
:param self self: represent the instance of the class
:param str path: the file to inspect
@@ -41,6 +44,8 @@ def __init__(self, path, out_control_flow_path, out_json_path, control_flow, abs
self.out_json_path = out_json_path
self.abstract_syntax_tree = abstract_syntax_tree
self.source_code = source_code
+ self.data_flow = data_flow
+ self.parser = parser
self.tree = self.parser_file()
if self.tree != "AST_ERROR":
self.nodes = self.walk()
@@ -58,6 +63,7 @@ def __init__(self, path, out_control_flow_path, out_json_path, control_flow, abs
else:
self.fileJson = {}
+
def find_classDef(self):
classDef_nodes = [node for node in self.nodes if isinstance(node, ast.ClassDef)]
class_init=[]
@@ -466,6 +472,13 @@ def file_json(self):
json.dump(prune_json(file_dict), outfile)
return [file_dict, json_file]
+ # def get_parser_data_flow(self):
+ # parser = Parser()
+ # LANGUAGE = Language(self.symbol_table, "python")
+ # parser.set_language(LANGUAGE)
+ # parser = [parser, DFG_python]
+ # return parser
+
def _f_definitions(self, functions_definitions):
"""_f_definitions extracts the name, args, docstring
returns, raises of a list of functions or a methods.
@@ -477,11 +490,15 @@ def _f_definitions(self, functions_definitions):
:param list functions_definitions: represent a list with all functions or methods nodes
:return dictionary: a dictionary with the all the information at function/method level
"""
-
+ # print(functions_definitions)
funcs_info = {}
for f in functions_definitions:
+ # for node in ast.walk(f):
+ # print(node.name)
+
funcs_info[f.name] = {}
ds_f = ast.get_docstring(f)
+ # print(ds_f)
try:
docstring = doc_parse(ds_f)
funcs_info[f.name]["doc"] = {}
@@ -577,7 +594,10 @@ def _f_definitions(self, functions_definitions):
funcs_info[f.name]["ast"] = ast_to_json(f)
if self.source_code:
funcs_info[f.name]["source_code"] = ast_to_source_code(f)
-
+ if self.data_flow:
+ code_tokens, dfg = extract_dataflow(funcs_info[f.name]["source_code"], self.parser, "python")
+ funcs_info[f.name]["data_flow"] = dfg
+ funcs_info[f.name]["code_tokens"] = code_tokens
return funcs_info
def _skip_dynamic_calls(self, funcs_info, classes_info, check_name, name, var_name):
@@ -1204,6 +1224,7 @@ def create_output_dirs(output_dir, control_flow):
@click.option('-i', '--input_path', type=str, required=True, help="input path of the file or directory to inspect.")
@click.option('-o', '--output_dir', type=str, default="output_dir",
help="output directory path to store results. If the directory does not exist, the tool will create it.")
+@click.option('-st','--symbol_table', type=str, default="my_language.so", help="symbol table for the target function")
@click.option('-ignore_dir', '--ignore_dir_pattern', multiple=True, default=[".", "__pycache__"],
help="ignore directories starting with a certain pattern. This parameter can be provided multiple times "
"to ignore multiple directory patterns.")
@@ -1231,16 +1252,28 @@ def create_output_dirs(output_dir, control_flow):
help="extract all readme files in the target repository.")
@click.option('-md', '--metadata', type=bool, is_flag=True,
help="extract metadata of the target repository using Github API. (requires repository to have the .git folder)")
+@click.option('-df', '--data_flow', type=bool, is_flag=True,
+ help="extract data flow graph of every function in the target repository")
+
def main(input_path, output_dir, ignore_dir_pattern, ignore_file_pattern, requirements, html_output, call_list,
control_flow, directory_tree, software_invocation, abstract_syntax_tree, source_code, license_detection, readme,
- metadata):
+ metadata, data_flow, symbol_table):
+ if data_flow:
+ LANGUAGE = Language(symbol_table, "python")
+ parser = Parser()
+ parser.set_language(LANGUAGE)
+ parser = [parser, DFG_python]
+ else:
+ parser = []
+
+ # print(parsers)
if (not os.path.isfile(input_path)) and (not os.path.isdir(input_path)):
print('The file or directory specified does not exist')
sys.exit()
if os.path.isfile(input_path):
cf_dir, json_dir = create_output_dirs(output_dir, control_flow)
- code_info = CodeInspection(input_path, cf_dir, json_dir, control_flow, abstract_syntax_tree, source_code)
+ code_info = CodeInspection(input_path, cf_dir, json_dir, control_flow, abstract_syntax_tree, source_code, data_flow, parser)
# Generate the call list of a file
call_list_data = call_list_file(code_info)
@@ -1279,11 +1312,13 @@ def main(input_path, output_dir, ignore_dir_pattern, ignore_file_pattern, requir
for f in files:
if ".py" in f and not f.endswith(".pyc"):
try:
+
path = os.path.join(subdir, f)
relative_path = Path(subdir).relative_to(Path(input_path).parent)
out_dir = str(Path(output_dir) / relative_path)
cf_dir, json_dir = create_output_dirs(out_dir, control_flow)
- code_info = CodeInspection(path, cf_dir, json_dir, control_flow, abstract_syntax_tree, source_code)
+ code_info = CodeInspection(path, cf_dir, json_dir, control_flow, abstract_syntax_tree, source_code, data_flow, parser)
+ # print(parsers)
if code_info.fileJson:
if out_dir not in dir_info:
dir_info[out_dir] = [code_info.fileJson[0]]
diff --git a/inspect4py/output_dir/Autumn945_MGNN-SPred/MGNN-SPred-master/models/json_files/__init__.json b/inspect4py/output_dir/Autumn945_MGNN-SPred/MGNN-SPred-master/models/json_files/__init__.json
new file mode 100644
index 0000000..81fe488
--- /dev/null
+++ b/inspect4py/output_dir/Autumn945_MGNN-SPred/MGNN-SPred-master/models/json_files/__init__.json
@@ -0,0 +1 @@
+{"file": {"path": "D:\\inspect4py-main\\test\\Autumn945_MGNN-SPred\\MGNN-SPred-master\\models\\__init__.py", "fileNameBase": "__init__", "extension": "py"}, "dependencies": [{"from_module": "base", "import": "Base", "type": "internal", "type_element": "class"}, {"from_module": "base", "import": "GNN", "type": "internal", "type_element": "class"}], "is_test": false}
\ No newline at end of file
diff --git a/inspect4py/output_dir/directory_info.json b/inspect4py/output_dir/directory_info.json
new file mode 100644
index 0000000..a934e9c
--- /dev/null
+++ b/inspect4py/output_dir/directory_info.json
@@ -0,0 +1 @@
+{"output_dir\\Autumn945_MGNN-SPred\\MGNN-SPred-master\\models": [{"file": {"path": "D:\\inspect4py-main\\test\\Autumn945_MGNN-SPred\\MGNN-SPred-master\\models\\__init__.py", "fileNameBase": "__init__", "extension": "py"}, "dependencies": [{"from_module": "base", "import": "Base", "type": "internal", "type_element": "class"}, {"from_module": "base", "import": "GNN", "type": "internal", "type_element": "class"}], "is_test": false}]}
\ No newline at end of file
diff --git a/inspect4py/parse_setup_files.py b/inspect4py/parse_setup_files.py
index 593c99e..126130c 100644
--- a/inspect4py/parse_setup_files.py
+++ b/inspect4py/parse_setup_files.py
@@ -56,7 +56,9 @@ def parse_setup_py(parent_dir):
if single_line:
elem = setup_content[console_index]
cs = elem.split("=")
- cs_string = cs[0].strip().replace('\'', '').split('["')[1]
+ # print(cs)
+ # print(cs[1].strip())
+ cs_string = cs[1].strip().replace('\'', '').split('["')[1]
cs_list.append(normalize(cs_string))
setup_info["installation"] = "pip install " + cs_string
setup_info["run"].append(cs_string)
diff --git a/inspect4py/resources/my-languages.so b/inspect4py/resources/my-languages.so
new file mode 100644
index 0000000000000000000000000000000000000000..921ee0bf7e20ede73a280a92f6ef33a8cb1aabae
GIT binary patch
literal 408064
zcmeFa2bdPcwl3U591v(EOOPQ*PJ(378Im6gh=PC$NKnvi0AU6L4$ikHfn)bZ-3HtS
zFk;w>c?8q}L{JnE6)=MVDMt}ekq=?!f8VzQJ%HYG{^vROo_i1TJT
#&FIE5l`d@OAWz}f9tcLYsmG_zzCJlYB*{I8}n3XbP
z=JaVZCtaN~Wzsd*Oixdld|ArOjB8S^xF%)bxg%4qo_^_NovK%_+R|6Owad=scbqqG
zSCH;)+i2I_DChT?Z*D_gyWM>APaU7X>ot`fldb$#^DpHEW&!dh?Xtw*q}@DoyUN$?
z^730$KL3g-m$QyPvuMO1%epkLl9jaS(==2?c9pDDHPk;?GszkoEgvD%DgCnR(}DFkh<|JlZTIZ}rN0!ks?*F%
zC#6ratnb^wFVJaqKwhq_;#8bQojf*c8y%F2e`vGSDex9({H0n}QKuOmqilq&sc
ze5svg&YH;%l270p={xOMe3xA{9gIb+55AJV9!K%@$I<`MfAPeDCoIc$+BUSTcw!QI
z+;$49k-noU>G5z`Jn>Ft(x>74izgn&f7{7MSH}}Sz`M4y4jzmrits;kd_3_a^XA<)
zXD23Q+D_UV+51nn?^>0+*}k)Ab#~%L`vIS}-TmDxtJ~&+Rq@0!%A62SyoB8TXHju^
z`+=g|B0J|(a4h3V<%!1=Tgc$PA;Ea!EmWV`Z6G!9d_Z;aHl?Mds4>mHtEjkYJh2iS
zX;3x@+H&VX%v0pVI~^ilbvy5Rfbqn);4@P}+U{gu`OUC1b9g*4n|TM;F@qFZxtms_
zl~v-2bUH(A&21OaKJOs4m$UO4O8Z=JnPh3NAmG+e=R99$9u;{yZz1XF+|o5@aXjG=
z&UqV1Jn;}{^NPsd2)q9V-EDI`aV@&bcGkcd@x(-o$jl4kiBp;Ph$n8rFwSi3#H*lj
z{cfQn^XEXUjDI_W*LE)f9C&=RkYTFpLeQp(dVZeZ9)eR)soxDh0cJOJIY0+A47y=2
z;IJE#LhVlcr3Cq!+j&2q$|iH5+P7{89aR4T5qE=*ma-lgw41qlb8&TR?0j9b4KOEO?~((_foA!l9?*@jJapAdZ^)s2iNx-&m5p6JRPP2M8uN_Kue*dk4iC%Q@cO2EOX)RRcg
z1nKJo+6)yrPK^CU=YsYI%1lxiC=+Lwv))7f;w|gJ*O_QZPE<@$ynojScjSZW`9(#DDtL
z8@ze8RI~+`In;sLx=_IVMf4@qHyQ(lIV|eV92RZxrSsnhTN#UbOZp|i!RfY2yiM%9
zN2PKC7|b0aCy95y=v-=UOq;WbI=5qD#C3x-Y|cl?iDyU?E?*Z*L9xaAXr`icQ!LWQvTSmcu+ZFi&S
zim1;YD4Pg7Eif-S@$)5of(A-mAn`pqO)%
z{KDR{?fgk#E7RU{00igGMbgw;n#PmP=@>aWNk<#$s7t-NROOPw8I#4M-Y~h9q<6;r
z*zU0Q+X&}u2ZEUjwAmo?1;Xx|qEl;tc9v>jjH*uhGj&4+(3u(W#OL7Ee8n7Qog=d<
z*!j0Wyo_1t00OhVPz{rTXg2zp!kAT4B&?Z;ORBwq!&$X^M7$as;0$*Om(==RSZ#HM`pet+3s%K*tlqsVrwph{qG7iMVg-=nK?|;gZW7!{tWiuye6j
zhn@cr*dlhu6E{mbFVyG6ukd;EW=rMsU@(`8TrS>=L?^-1UI!Mj4s_saJnD7eTO_>>
z>=0_kz-I5b4JF@|bWV-P(ZM=;unnzzi?s8A`tDKCnZx3VJmxqhbC|=Xn}7Buko*l0
ziP&Vjg#d!SE1;&Fr=;}}&}Jb>+r3l3YgFZ3VxA|TV=!i%_=VD3MI+}^A^rWj@+M1e
z4Hb=$qM-uj*8V1V{D}xIhJ})w0A}+TNZWk~|9K&Kt10Cl#X>KhNNFHl
zx~QzHMfxs{oe`qnlmFMU>hyRbgE`KrYna2ff2k&{zJ^0_#5Sy+G3A=ZTUI04t9NZ5um->rHp)gH
zfH``o7IXAa8&%iK&VL#rWqPPCIBa(TV6TUq_@h6tX)W!%EU8}r26K(b-^6>V=;^4{
zw<)O(NZ6Dt!HR)RSAiq6sdHEX=65zYr@7Sp3$&>z@_WK=CD9Y>LnZ8J${coB%wb0@
z!?snm^S^0%gdHb>!*Tdd!Oj7)a*^eStMb{?Gg;9
z;THghc1#N^u-%KL;4>=AIXA@PiR(F(+G9K;+p{_zdvI@$S6!4|PGo)`)a+bs_`=)_CJiyMSrnzOY_!C-cX{8qeMMPCFj
z`$h~SNnc2?MPS6afJ0wA1figUzkkifB-welOVfPtnJkgZK-%tX(J{@Gh3dKktO2(V
zyP3l*!yIM}kfw5WeheaI%=$r^Iso=+jVFF3lG9YWe+O-tv88
z!W!uA_XesD?5PW$(4NiB0?khRtL?r$s{qCmgTZH(iW~;gb{`Xc31~jKxtKXlzYCee
zhNY6OZ0F~IEnwdhm3fOb;LlVu{LZD&yu>8heXg0HY<2WRG-
zcw#$SfUerY9AxT!f#$SO$QAHY}u6=_@PO|i^1#R{mM{^uY_p<@8FO50uTPLl!aXJs;
zW$e34TDt=d?0Zm13m_Ux2dM%ETp|@01_qP@4h`6c*)b6Bj3(IbH$dWvJ#3D5el8*j
zH5)h3zVU&YHvorfo(H|#nr%Ry8{3RKHq*JdGS!Sn^blHgJ~x68u8W_T^~LVjA3OkCN9D7
zTK*H@(3r1q=?g0u%L;J)+6*wBm=8^+NaQ>0NcUyYdzXNAUR6hy2h9f&AF)!*{U0!=
zS-z(Hc@T-1WxF#01ogENSA9EgvJ{ttGBZMCMb_aC7M;pEyxyrs5(Xv4u%YFH-f0dv
zH0Z=g1-FV1%eEwGdJ%l)CoC=EiQhrm?zf^RJ^`(`fK_F#@qCE&U_AdpE^p#1A?c0h
zXCW1s@X2VuPac%2v!KE_B5wkT=O3cCQ?qwRxRJ2470V(gev^bd(G2r85d1L0qd6lb
zvN)sjlAeQyM=E=buzR}Xi%92m36J9Wx9}=3
zmV;|Aj?<{^%wg0iY7JIV<-k_PsPCn9CzifJN1h;FO!iv<;!+8f=1q|`=t_5)=r*j$
zI~P+(;#~Y`6ip8AR9XQJ&&AxZf_S1c)#PwJkEIf5GgagjgxztXoBjdXS*?z;5>OAD
zmTpDP3FB$xuxWv+n`!5Ff=C&g9tNlF)&d;Z)Ehs~>8`z;)E@+c*;AhlxcUHjcZ#l!
zT78==lCWt(MG9UKjIT<7Lz|w1P;e&HXM^1brKSn#oI4^%+vsRqM+boB73~b>FsB!D
zn6sqH
zW--S^crA0-S5sQ6*!ed@JYt{iUIDQ*I2ZxqMdiBu1-CuFvTM8XZzh9qCcT#oNn(h
zNB^v1j`mNK^vQPq8(@pHKb}}C>4yOa9_%7sTt4oQ%57jUagm>i_d3yS;6cBOs*^+)
z@m&}!w1O^b1vu=Y{$U02L|-~Tr@Pdg0ot?>IgGG-lITU{**_~agcjii3HC{95^~tY
zmq}>T($W%CSKZDp#>0j(HXV?rjerB23Q9^!`&C7E+j*}6#*zg}%~K*bfwbMlqDP=!
z->QxzY1JWC(=@Q^Y`~#aS4FD07gDmDS=6%)z
zV|qy%cUdQct&A}rNxB^1z?jK@uqK@1d-3okp7;=|%yyA~fVAB$qG#Ze;+xWiBu$ZE
z>%f#LfJ0LjL&&Qjo|wa{QO-Z5rU110yU5!KyVr}hs)KgU(?#l6ywYSlPiQbbUzzj{
zZ|Q(CX$4jqWx@1-9XJWz@ZvG01VXRQB6*^)I0~;Tq|-J
zVRxG7)8Pa@h_1>UGe1Rgk08Qkc^YX{u}IXF?=mM?BFR9JV_NuxE`EkL_dYFjt)?^+jMXXM)81C*UO3
z;TcqyBn;Z~8%4sUV12-$L6st^-w|J1J8xf28k7k>^Nq;+K;rqQ=!qvlD@Pe~81Xi1
zff1>a#waTUTNxw1k@S6l10&w~l`X<}zEvtmLzTHv^(HQ`#+ny9y!8${B(
z7R4iSamh^w5>J#zn|udsrvf-z-GPT+ujfI|oL3Dw{>@h9^2vh&(W(=2E*4M5s%
z9RX*-^vsJ;1#_6ViB-YGOv!by^Y`MHmNF*pqJ!KmfCCd-(S7clK(JUQol_VdwcV$M
zXH¬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