RadonMetrics/MaintainabilityIndexCalculator.py

Wed, 30 Dec 2020 11:02:04 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 30 Dec 2020 11:02:04 +0100
changeset 75
e7ed383ac6a7
parent 69
cdf51e6abaee
child 87
6ae91562f0a7
permissions
-rw-r--r--

Updated copyright for 2021.

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:
diff changeset
1 # -*- coding: utf-8 -*-
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:
diff changeset
2
75
e7ed383ac6a7 Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 69
diff changeset
3 # Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
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:
diff changeset
4 #
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:
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 maintainability index 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
69
cdf51e6abaee Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 68
diff changeset
10 import queue
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:
diff changeset
11 import multiprocessing
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:
diff changeset
12
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:
diff changeset
13
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:
diff changeset
14 def initService():
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:
diff changeset
15 """
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:
diff changeset
16 Initialize the service and return the entry point.
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:
diff changeset
17
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:
diff changeset
18 @return the entry point for the background client (function)
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:
diff changeset
19 """
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:
diff changeset
20 return maintainabilityIndex
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:
diff changeset
21
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:
diff changeset
22
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:
diff changeset
23 def initBatchService():
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:
diff changeset
24 """
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:
diff changeset
25 Initialize the batch service and return the entry point.
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:
diff changeset
26
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:
diff changeset
27 @return the entry point for the background client (function)
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:
diff changeset
28 """
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:
diff changeset
29 return batchMaintainabilityIndex
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:
diff changeset
30
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:
diff changeset
31
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:
diff changeset
32 def maintainabilityIndex(file, text=""):
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:
diff changeset
33 """
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:
diff changeset
34 Private function to calculate the maintainability index of one file.
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:
diff changeset
35
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:
diff changeset
36 @param file source filename
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:
diff changeset
37 @type str
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:
diff changeset
38 @param text source text
13
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
39 @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:
diff changeset
40 @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:
diff changeset
41 @rtype (tuple of dict)
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:
diff changeset
42 """
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:
diff changeset
43 return __maintainabilityIndex(file, text)
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:
diff changeset
44
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:
diff changeset
45
49
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
46 def batchMaintainabilityIndex(argumentsList, send, fx, cancelled,
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
47 maxProcesses=0):
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:
diff changeset
48 """
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:
diff changeset
49 Module function to calculate the maintainability index for a batch of
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:
diff changeset
50 files.
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:
diff changeset
51
13
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
52 @param argumentsList list of arguments tuples as given for
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
53 maintainabilityIndex
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:
diff changeset
54 @type list
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:
diff changeset
55 @param send reference to send function
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:
diff changeset
56 @type function
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:
diff changeset
57 @param fx registered service name
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:
diff changeset
58 @type str
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:
diff changeset
59 @param cancelled reference to function checking for a cancellation
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:
diff changeset
60 @type function
49
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
61 @param maxProcesses number of processes to be used
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
62 @type int
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:
diff changeset
63 """
49
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
64 if maxProcesses == 0:
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
65 # determine based on CPU count
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
66 try:
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
67 NumberOfProcesses = multiprocessing.cpu_count()
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
68 if NumberOfProcesses >= 1:
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
69 NumberOfProcesses -= 1
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
70 except NotImplementedError:
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
71 NumberOfProcesses = 1
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
72 else:
ab84f5a5edd8 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
73 NumberOfProcesses = maxProcesses
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:
diff changeset
74
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:
diff changeset
75 # Create queues
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:
diff changeset
76 taskQueue = multiprocessing.Queue()
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:
diff changeset
77 doneQueue = multiprocessing.Queue()
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:
diff changeset
78
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:
diff changeset
79 # Submit tasks (initially two time number of processes
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:
diff changeset
80 initialTasks = 2 * NumberOfProcesses
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:
diff changeset
81 for task in argumentsList[:initialTasks]:
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:
diff changeset
82 taskQueue.put(task)
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:
diff changeset
83
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:
diff changeset
84 # Start worker processes
54
f7a462d6ec26 Adjusted the code style checking parameters and fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 53
diff changeset
85 for _ in range(NumberOfProcesses):
69
cdf51e6abaee Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 68
diff changeset
86 multiprocessing.Process(
cdf51e6abaee Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 68
diff changeset
87 target=worker, args=(taskQueue, doneQueue)).start()
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:
diff changeset
88
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:
diff changeset
89 # Get and send results
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:
diff changeset
90 endIndex = len(argumentsList) - initialTasks
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:
diff changeset
91 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
92 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
93 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
94
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 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
96 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
97 # 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
98 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
99 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
100 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
101 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
102 # 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
103 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
104 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
105 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
106
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
107 if wasCancelled or cancelled():
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:
diff changeset
108 # just exit the loop ignoring the results of queued tasks
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:
diff changeset
109 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
110
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:
diff changeset
111 if i < endIndex:
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:
diff changeset
112 taskQueue.put(argumentsList[i + initialTasks])
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:
diff changeset
113
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:
diff changeset
114 # Tell child processes to stop
54
f7a462d6ec26 Adjusted the code style checking parameters and fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 53
diff changeset
115 for _ in range(NumberOfProcesses):
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:
diff changeset
116 taskQueue.put('STOP')
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:
diff changeset
117
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:
diff changeset
118
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
119 def worker(inputQueue, outputQueue):
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:
diff changeset
120 """
13
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
121 Module function acting as the parallel worker for the maintainability
22bc345844e7 Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
122 index calculation.
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:
diff changeset
123
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
124 @param inputQueue input queue
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:
diff changeset
125 @type multiprocessing.Queue
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
126 @param outputQueue output queue
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:
diff changeset
127 @type multiprocessing.Queue
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:
diff changeset
128 """
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
129 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:
diff changeset
130 result = __maintainabilityIndex(filename, source)
43
53dbd4f4d6c2 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
131 outputQueue.put((filename, result))
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:
diff changeset
132
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:
diff changeset
133
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:
diff changeset
134 def __maintainabilityIndex(file, text=""):
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:
diff changeset
135 """
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:
diff changeset
136 Private function to calculate the maintainability index for one Python
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:
diff changeset
137 file.
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:
diff changeset
138
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:
diff changeset
139 @param file source filename
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:
diff changeset
140 @type str
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:
diff changeset
141 @param text source text
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:
diff changeset
142 @type str
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:
diff changeset
143 @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:
diff changeset
144 @rtype (tuple of dict)
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:
diff changeset
145 """
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:
diff changeset
146 from radon.metrics import mi_visit, mi_rank
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:
diff changeset
147
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:
diff changeset
148 try:
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:
diff changeset
149 mi = mi_visit(text, True)
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:
diff changeset
150 rank = mi_rank(mi)
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:
diff changeset
151 res = {"mi": mi, "rank": rank}
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:
diff changeset
152 except Exception as err:
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:
diff changeset
153 res = {"error": str(err)}
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:
diff changeset
154 return (res, )

eric ide

mercurial