PCART  v1.4
Automated Repair of Python API Parameter Compatibility Issues
LibApi.py
Go to the documentation of this file.
1 
10 
11 
12 
13 import copy
14 import re
15 from Tool.tool import getParameter
16 
17 
18 
19 
24 class Parameter():
25 
26 
28  def __init__(self):
29 
30 
32  self.fullItemfullItem=""
33 
34 
36  self.namename=""
37 
38 
40  self.positionposition=""
41 
42 
44  self.valuevalue=""
45 
46 
48  self.typetype=""
49 
50 
52  self.star_positionstar_position=-1 #记录'*'的位置,便于拆分位置参数和关键字参数
53 
54 
57  def __hash__(self):
58  return hash(self.fullItemfullItem)
59 
60 
64  def __eq__(self,other):
65  return self.fullItemfullItem==other.fullItem
66 
67 
70  def __repr__(self):
71  return self.fullItemfullItem
72 
73 
74 
75 
80 class Api:
81 
83  def __init__(self):
84 
86  self.full_itemfull_item=""
87 
89  self.namename=""
90 
92  self.parametersparameters=[]
93 
95  self.parameters_stringparameters_string=""
96 
98  self.rTyperType=""
99 
101  self.versionversion=""
102 
103 
106  def __hash__(self):
107  return hash(self.parameters_stringparameters_string)
108 
109 
115  def __eq__(self,other):
116  return self.parameters_stringparameters_string==other.parameters_string
117 
118 
124  def __repr__(self):
125  return self.full_itemfull_item
126 
127 
128 
129 
131 class APIOBJ:
132 
134  def __init__(self):
135  self.objLstobjLst=[]
136 
137 
143  def toAPIObj(self,version,APIStringLst):
144  patternP=r'.*?\‍((.*)\‍)' #匹配函数参数
145  objP=re.compile(patternP)
146  Lst=copy.copy(APIStringLst)
147  for item in Lst:
148  api=Api()
149  #获取api的完整形式
150  api.full_item=item
151 
152  #获取函数名
153  api.name=item.split('(')[0]
154 
155  #当前Api所对应的版本
156  api.version=version
157 
158  #获取返回值类型,如果有的话
159  if '->' in item:
160  api.rType=item.split('->')[1]
161 
162  pString=objP.findall(item) #获取函数参数
163  api.parameters_string=''.join(pString) #保存参数整体的字符串
164  if len(pString)>0:
165  lst=getParameter(pString[0]) #拆分参数
166  #把self和cls去掉
167  if 'self' in lst:
168  lst.remove('self')
169  if 'cls' in lst:
170  lst.remove('cls')
171  for para in lst:
172  parameter=Parameter()
173  parameter.fullItem=para #记录参数的完整名字
174  parameter.position=lst.index(para) #获取参数的位置
175  if ':' in para:
176  l=para.split(':')
177  parameter.name=l[0]
178  #若参数的默认值存在于类型注释中
179  if '=' in l[1]:
180  ll=l[1].split('=')
181  parameter.type=ll[0]
182  parameter.value=ll[1]
183  else:
184  parameter.type=l[1]
185 
186  elif '=' in para:
187  l=para.split('=')
188  parameter.name=l[0]
189  parameter.value=l[1]
190  else:
191  parameter.name=para
192  api.parameters.append(parameter)
193 
194  self.objLstobjLst.append(api)
API list container for converting string definitions to API objects API列表容器,将字符串形式的API定义转换为API对象
Definition: LibApi.py:131
def toAPIObj(self, version, APIStringLst)
Convert API string definitions to API objects 将API字符串定义转换为API对象
Definition: LibApi.py:143
def __init__(self)
Initialize the API object list 初始化API对象列表
Definition: LibApi.py:134
API class for storing a single API definition API类,用于存储单个API的定义
Definition: LibApi.py:80
def __hash__(self)
Return the hash value based on the parameters string 基于参数字符串返回哈希值
Definition: LibApi.py:106
parameters_string
All parameters stored as a single string 所有参数保存为单个字符串
Definition: LibApi.py:95
version
The library version 库版本
Definition: LibApi.py:101
rType
The return type annotation (if any) 返回值类型注释(如有)
Definition: LibApi.py:98
full_item
The full API string including name and parameters API完整字符串,包含名称和参数
Definition: LibApi.py:86
def __repr__(self)
Return the full API string as the representation 返回完整API字符串作为对象表示形式
Definition: LibApi.py:124
name
The API name without parameters API名称(不含参数)
Definition: LibApi.py:89
def __eq__(self, other)
Determine equality based on the parameters string 基于参数字符串判断两个API是否相同
Definition: LibApi.py:115
parameters
List of Parameter objects 参数对象列表
Definition: LibApi.py:92
def __init__(self)
Initialize the API fields 初始化API字段
Definition: LibApi.py:83
Parameter class for Library APIs API参数类
Definition: LibApi.py:24
def __hash__(self)
Return the hash value of the parameter 返回参数哈希值
Definition: LibApi.py:57
fullItem
The full string of the parameter 参数字符串
Definition: LibApi.py:32
position
The parameter position 参数位置
Definition: LibApi.py:40
type
The parameter type 参数类型
Definition: LibApi.py:48
def __repr__(self)
Return the string representation of the parameter 返回参数的字符串表示形式
Definition: LibApi.py:70
star_position
The star symbol position 星号位置
Definition: LibApi.py:52
name
The parameter name 参数名称
Definition: LibApi.py:36
def __eq__(self, other)
Determine whether two parameter objects are equal 判断两个参数对象是否相等
Definition: LibApi.py:64
def __init__(self)
The constructor 构造函数
Definition: LibApi.py:28
value
The parameter default value 参数默认值
Definition: LibApi.py:44
def getParameter(p_string, separator=',', space=1)
Split parameter string into list of separated parameters 将参数字符串拆分成单个的参数
Definition: tool.py:85