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, ) |