RadonMetrics/CodeMetricsCalculator.py

changeset 6
13e9698a9981
parent 5
db25d1d5cc3a
child 9
7f6e04213998
equal deleted inserted replaced
5:db25d1d5cc3a 6:13e9698a9981
42 @return tuple containing the filename and the result list 42 @return tuple containing the filename and the result list
43 @rtype (str, list) 43 @rtype (str, list)
44 """ 44 """
45 if type_ == "raw": 45 if type_ == "raw":
46 return __rawCodeMetrics(file, text) 46 return __rawCodeMetrics(file, text)
47 elif type_ == "mi":
48 return __maintainabilityIndex(file, text)
47 49
48 res = {"error": "Unknown metrics '{0}'.".format(type_)} 50 res = {"error": "Unknown metrics '{0}'.".format(type_)}
49 return (res, ) 51 return (res, )
50 52
51 53
109 @type multiprocessing.Queue 111 @type multiprocessing.Queue
110 """ 112 """
111 for filename, source, type_ in iter(input.get, 'STOP'): 113 for filename, source, type_ in iter(input.get, 'STOP'):
112 if type_ == "raw": 114 if type_ == "raw":
113 result = __rawCodeMetrics(filename, source) 115 result = __rawCodeMetrics(filename, source)
116 elif type_ == "mi":
117 result = __maintainabilityIndex(filename, source)
114 else: 118 else:
115 result = [] 119 result = {}
116 output.put((filename, result)) 120 output.put((filename, result))
117 121
118 122
119 def __rawCodeMetrics(file, text=""): 123 def __rawCodeMetrics(file, text=""):
120 """ 124 """
122 126
123 @param file source filename 127 @param file source filename
124 @type str 128 @type str
125 @param text source text 129 @param text source text
126 @type str 130 @type str
127 @return tuple containing the result list 131 @return tuple containing the result dictionary
128 @rtype (list) 132 @rtype (tuple of dict)
129 """ 133 """
130 from radon.raw import analyze 134 from radon.raw import analyze
131 try: 135 try:
132 res = __raw2Dict(analyze(text)) 136 res = __raw2Dict(analyze(text))
133 except Exception as err: 137 except Exception as err:
149 for a in obj._fields: 153 for a in obj._fields:
150 v = getattr(obj, a, None) 154 v = getattr(obj, a, None)
151 if v is not None: 155 if v is not None:
152 result[a] = v 156 result[a] = v
153 return result 157 return result
158
159
160 def __maintainabilityIndex(file, text=""):
161 """
162 Private function to calculate the maintainability index for one Python
163 file.
164
165 @param file source filename
166 @type str
167 @param text source text
168 @type str
169 @return tuple containing the result dictionary
170 @rtype (tuple of dict)
171 """
172 from radon.metrics import mi_visit, mi_rank
173 try:
174 mi = mi_visit(text)
175 rank = mi_rank(mi)
176 res = {"mi": mi, "rank": rank}
177 except Exception as err:
178 res = {"error": str(err)}
179 return (res, )

eric ide

mercurial