RadonMetrics/CodeMetricsCalculator.py

Fri, 31 Mar 2017 17:56:43 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 31 Mar 2017 17:56:43 +0200
changeset 45
0f2eabfd5834
parent 43
53dbd4f4d6c2
child 47
fa1024e1dfc9
permissions
-rw-r--r--

Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.

3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
42
04457b4ceda5 Updated copyright for 2017.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 37
diff changeset
3 # Copyright (c) 2015 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
13
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
6 """
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
7 Module implementing the raw code metrics service.
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
8 """
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
9
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from __future__ import unicode_literals
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
4
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
12 try:
13
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
13 str = unicode # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
4
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
14 except NameError:
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
15 pass
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
16
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 import multiprocessing
45
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
18 import queue
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 def initService():
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Initialize the service and return the entry point.
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 @return the entry point for the background client (function)
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
27 return rawCodeMetrics
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 def initBatchService():
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 Initialize the batch service and return the entry point.
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @return the entry point for the background client (function)
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 """
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
36 return batchRawCodeMetrics
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
39 def rawCodeMetrics(file, text=""):
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
41 Private function to calculate the raw code metrics of one file.
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @param file source filename
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @type str
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @param text source text
13
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
46 @type str
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
47 @return tuple containing the result dictionary
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
48 @rtype (tuple of dict)
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 """
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
50 return __rawCodeMetrics(file, text)
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
53 def batchRawCodeMetrics(argumentsList, send, fx, cancelled):
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 """
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
55 Module function to calculate the raw code metrics for a batch of files.
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
13
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
57 @param argumentsList list of arguments tuples as given for rawCodeMetrics
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @type list
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @param send reference to send function
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 @type function
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 @param fx registered service name
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @type str
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @param cancelled reference to function checking for a cancellation
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @type function
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 """
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 try:
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 NumberOfProcesses = multiprocessing.cpu_count()
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 if NumberOfProcesses >= 1:
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 NumberOfProcesses -= 1
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 except NotImplementedError:
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 NumberOfProcesses = 1
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 # Create queues
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 taskQueue = multiprocessing.Queue()
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 doneQueue = multiprocessing.Queue()
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 # Submit tasks (initially two time number of processes
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 initialTasks = 2 * NumberOfProcesses
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 for task in argumentsList[:initialTasks]:
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 taskQueue.put(task)
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 # Start worker processes
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 for i in range(NumberOfProcesses):
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 multiprocessing.Process(target=worker, args=(taskQueue, doneQueue))\
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 .start()
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 # Get and send results
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 endIndex = len(argumentsList) - initialTasks
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 for i in range(len(argumentsList)):
45
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
90 resultSent = False
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
91 wasCancelled = False
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
92
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
93 while not resultSent:
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
94 try:
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
95 # get result (waiting max. 3 seconds and send it to frontend
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
96 filename, result = doneQueue.get()
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
97 send(fx, filename, result)
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
98 resultSent = True
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
99 except queue.Empty:
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
100 # ignore empty queue, just carry on
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
101 if cancelled():
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
102 wasCancelled = True
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
103 break
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
104
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
105 if wasCancelled or cancelled():
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 # just exit the loop ignoring the results of queued tasks
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 break
45
0f2eabfd5834 Corrected an issue in various checker services that caused them to block, if an exception was thrown in a checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 43
diff changeset
108
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 if i < endIndex:
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 taskQueue.put(argumentsList[i + initialTasks])
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 # Tell child processes to stop
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 for i in range(NumberOfProcesses):
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 taskQueue.put('STOP')
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
117 def worker(inputQueue, outputQueue):
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 """
13
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
119 Module function acting as the parallel worker for the raw code metrics
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
120 calculation.
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
122 @param inputQueue input queue
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 @type multiprocessing.Queue
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
124 @param outputQueue output queue
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @type multiprocessing.Queue
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
127 for filename, source in iter(inputQueue.get, 'STOP'):
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
128 result = __rawCodeMetrics(filename, source)
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
129 outputQueue.put((filename, result))
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 def __rawCodeMetrics(file, text=""):
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 """
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 Private function to calculate the raw code metrics for one Python file.
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 @param file source filename
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 @type str
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 @param text source text
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 @type str
6
13e9698a9981 Started implementing the maintainability index stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
140 @return tuple containing the result dictionary
13e9698a9981 Started implementing the maintainability index stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
141 @rtype (tuple of dict)
3
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 """
7150ed890fd5 Started implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 from radon.raw import analyze
4
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
144 try:
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
145 res = __raw2Dict(analyze(text))
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
146 except Exception as err:
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
147 res = {"error": str(err)}
10
8b1920a22df3 Changed the logic for the various code metrics calculations to be separate services and fine tuned the dialogs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
148 return (res, )
4
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
149
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
150
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
151 def __raw2Dict(obj):
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
152 """
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
153 Private function to convert an object holding raw analysis results into a
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
154 dictionary.
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
155
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
156 @param obj object as returned from analyze()
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
157 @type radon.raw.Module
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
158 @return conversion result
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
159 @rtype dict
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
160 """
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
161 result = {}
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
162 for a in obj._fields:
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
163 v = getattr(obj, a, None)
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
164 if v is not None:
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
165 result[a] = v
9ac53bf21182 Continued implementing the raw code metrics stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
166 return result

eric ide

mercurial