Thu, 22 Jun 2017 18:38:10 +0200
Added functionality to limit the number of processes used for background services.
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 | |
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> |
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 | |
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
|
10 | from __future__ import unicode_literals |
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 | |
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 | 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__ |
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
|
14 | except NameError: |
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 | pass |
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 | |
47
fa1024e1dfc9
Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
45
diff
changeset
|
17 | try: |
fa1024e1dfc9
Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
45
diff
changeset
|
18 | import Queue as queue # Py2 |
fa1024e1dfc9
Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
45
diff
changeset
|
19 | except ImportError: |
fa1024e1dfc9
Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
45
diff
changeset
|
20 | import queue |
fa1024e1dfc9
Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
45
diff
changeset
|
21 | |
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
|
22 | import sys |
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
|
23 | 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
|
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 | |
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 | 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
|
27 | """ |
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 | 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
|
29 | |
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 | @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
|
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 | 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
|
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 | |
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 | 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
|
36 | """ |
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 | 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
|
38 | |
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
|
39 | @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
|
40 | """ |
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 | 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
|
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 | |
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 | 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
|
45 | """ |
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
|
46 | 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
|
47 | |
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 | @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
|
49 | @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
|
50 | @param text source text |
13
22bc345844e7
Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10
diff
changeset
|
51 | @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
|
52 | @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
|
53 | @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
|
54 | """ |
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 | 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
|
56 | |
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 | |
49
ab84f5a5edd8
Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
47
diff
changeset
|
58 | 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
|
59 | 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
|
60 | """ |
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
|
61 | 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
|
62 | 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
|
63 | |
13
22bc345844e7
Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10
diff
changeset
|
64 | @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
|
65 | 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
|
66 | @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
|
67 | @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
|
68 | @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
|
69 | @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
|
70 | @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
|
71 | @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
|
72 | @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
|
73 | @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
|
74 | @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
|
75 | """ |
49
ab84f5a5edd8
Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
47
diff
changeset
|
76 | 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
|
77 | # 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
|
78 | try: |
ab84f5a5edd8
Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
47
diff
changeset
|
79 | 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
|
80 | 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
|
81 | 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
|
82 | 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
|
83 | 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
|
84 | else: |
ab84f5a5edd8
Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
47
diff
changeset
|
85 | 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
|
86 | |
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
|
87 | # 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
|
88 | 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
|
89 | 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
|
90 | |
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 | # 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
|
92 | 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
|
93 | 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
|
94 | 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
|
95 | |
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
|
96 | # Start worker 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
|
97 | for i in range(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
|
98 | multiprocessing.Process(target=worker, args=(taskQueue, doneQueue))\ |
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
|
99 | .start() |
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
|
100 | |
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
|
101 | # 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
|
102 | 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
|
103 | 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
|
104 | 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
|
105 | 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
|
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 | 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
|
108 | 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
|
109 | # 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
|
110 | 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
|
111 | 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
|
112 | 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
|
113 | 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
|
114 | # 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
|
115 | 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
|
116 | 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
|
117 | 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
|
118 | |
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
|
119 | 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
|
120 | # 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
|
121 | 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
|
122 | |
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 | 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
|
124 | 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
|
125 | |
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
|
126 | # Tell child processes to 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
|
127 | for i in range(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
|
128 | 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
|
129 | |
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 | |
43
53dbd4f4d6c2
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
42
diff
changeset
|
131 | 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
|
132 | """ |
13
22bc345844e7
Implemented the cyclomatic complexity stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10
diff
changeset
|
133 | 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
|
134 | 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
|
135 | |
43
53dbd4f4d6c2
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
42
diff
changeset
|
136 | @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
|
137 | @type multiprocessing.Queue |
43
53dbd4f4d6c2
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
42
diff
changeset
|
138 | @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
|
139 | @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
|
140 | """ |
43
53dbd4f4d6c2
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
42
diff
changeset
|
141 | 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
|
142 | result = __maintainabilityIndex(filename, source) |
43
53dbd4f4d6c2
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
42
diff
changeset
|
143 | 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
|
144 | |
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 | 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
|
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 | 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
|
149 | 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
|
150 | |
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 | @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
|
152 | @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
|
153 | @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
|
154 | @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
|
155 | @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
|
156 | @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
|
157 | """ |
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
|
158 | 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
|
159 | |
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
|
160 | # Check type for py2: if not str it's unicode |
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
|
161 | if sys.version_info[0] == 2: |
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
|
162 | 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
|
163 | text = text.encode('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
|
164 | except UnicodeError: |
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
|
165 | pass |
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
|
166 | |
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
|
167 | 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
|
168 | 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
|
169 | 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
|
170 | 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
|
171 | 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
|
172 | 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
|
173 | return (res, ) |