VultureChecker/VultureCheckerService.py

Thu, 22 Jun 2017 18:24:40 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 22 Jun 2017 18:24:40 +0200
changeset 51
cf5c3ddc1de3
parent 49
7b55dc5d09d2
child 53
4eb2ec8fff7c
permissions
-rw-r--r--

Added functionality to limit the number of processes used for background services.

2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
44
9be43ed02aaa Updated copyright for 2017.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
3 # Copyright (c) 2015 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the cyclomatic complexity service.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from __future__ import unicode_literals
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 try:
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 str = unicode # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 except NameError:
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 pass
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
49
7b55dc5d09d2 Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
17 try:
7b55dc5d09d2 Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
18 import Queue as queue # Py2
7b55dc5d09d2 Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
19 except ImportError:
7b55dc5d09d2 Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
20 import queue
7b55dc5d09d2 Fixed a serious bug related to the queue module being called Queue in Python 2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
21
47
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
22 import sys
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 import multiprocessing
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 from vulture import Vulture
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 def initService():
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 Initialize the service and return the entry point.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @return the entry point for the background client (function)
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 return vultureCheck
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 def initBatchService():
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Initialize the batch service and return the entry point.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @return the entry point for the background client (function)
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 return batchVultureCheck
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 def vultureCheck(file, text=""):
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 Private function to analyze one file.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @param file source filename
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @type str
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 @param text source text
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 @type str
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @return tuple containing the result dictionary
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @rtype (tuple of dict)
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 return __analyze(file, text)
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59
51
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
60 def batchVultureCheck(argumentsList, send, fx, cancelled, maxProcesses=0):
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 Module function to analyze a batch of files.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @param argumentsList list of arguments tuples as given for vultureCheck
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @type list
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @param send reference to send function
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @type function
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @param fx registered service name
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @type str
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 @param cancelled reference to function checking for a cancellation
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 @type function
51
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
72 @param maxProcesses number of processes to be used
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
73 @type int
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 """
51
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
75 if maxProcesses == 0:
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
76 # determine based on CPU count
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
77 try:
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
78 NumberOfProcesses = multiprocessing.cpu_count()
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
79 if NumberOfProcesses >= 1:
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
80 NumberOfProcesses -= 1
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
81 except NotImplementedError:
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
82 NumberOfProcesses = 1
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
83 else:
cf5c3ddc1de3 Added functionality to limit the number of processes used for background services.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 49
diff changeset
84 NumberOfProcesses = maxProcesses
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 # Create queues
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 taskQueue = multiprocessing.Queue()
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 doneQueue = multiprocessing.Queue()
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 # Submit tasks (initially two time number of processes
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 initialTasks = 2 * NumberOfProcesses
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 for task in argumentsList[:initialTasks]:
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 taskQueue.put(task)
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 # Start worker processes
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 for i in range(NumberOfProcesses):
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 multiprocessing.Process(target=worker, args=(taskQueue, doneQueue))\
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 .start()
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 # Get and send results
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 endIndex = len(argumentsList) - initialTasks
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 for i in range(len(argumentsList)):
47
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
103 resultSent = False
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
104 wasCancelled = False
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
105
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
106 while not resultSent:
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
107 try:
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
108 # get result (waiting max. 3 seconds and send it to frontend
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
109 filename, result = doneQueue.get()
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
110 send(fx, filename, result)
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
111 resultSent = True
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
112 except queue.Empty:
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
113 # ignore empty queue, just carry on
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
114 if cancelled():
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
115 wasCancelled = True
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
116 break
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
117
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
118 if wasCancelled or cancelled():
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 # just exit the loop ignoring the results of queued tasks
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 break
47
4e19b213fc3f Corrected an issue in the checker services that caused it to block, if an exception was thrown in the checker class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 45
diff changeset
121
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 if i < endIndex:
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 taskQueue.put(argumentsList[i + initialTasks])
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 # Tell child processes to stop
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 for i in range(NumberOfProcesses):
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 taskQueue.put('STOP')
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
45
232ed15782bb Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
130 def worker(inputQueue, outputQueue):
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 Module function acting as the parallel worker for the cyclomatic
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 complexity calculation.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
45
232ed15782bb Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
135 @param inputQueue input queue
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 @type multiprocessing.Queue
45
232ed15782bb Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
137 @param outputQueue output queue
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 @type multiprocessing.Queue
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 """
45
232ed15782bb Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
140 for filename, source in iter(inputQueue.get, 'STOP'):
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 result = __analyze(filename, source)
45
232ed15782bb Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
142 outputQueue.put((filename, result))
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144
18
e19e7622a428 Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
145 def __analyze(filename, text=""):
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 Private function to analyze one Python file.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
18
e19e7622a428 Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
149 @param filename source file name
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 @type str
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 @param text source text
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 @type str
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 @return tuple containing the result dictionary
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 @rtype (tuple of dict)
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 # Check type for py2: if not str it's unicode
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 if sys.version_info[0] == 2:
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 try:
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 text = text.encode('utf-8')
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 except UnicodeError:
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 pass
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 try:
18
e19e7622a428 Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
164 v = EricVulture()
e19e7622a428 Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
165 v.scan(text, filename=filename)
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 res = v.getResults()
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 except Exception as err:
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 res = {"error": str(err)}
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 return (res, )
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 class EricVulture(Vulture):
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 Class to adopt the Vulture class to the eric plug-in functionality.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 def __item2Dict(self, item):
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 Private method to convert a vulture item to a dictionary.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 @param item vulture item
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 @type vulture.Item
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 @return item dictionary
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 @rtype dict
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 d = {
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 "name": str(item),
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 "type": getattr(item, "typ", ""),
18
e19e7622a428 Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
188 "file": getattr(item, "filename", ""),
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
189 "line": getattr(item, "lineno", ""),
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 }
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 return d
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 def getResults(self):
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 Public method to get the scan results.
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 @return scan results
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 @rtype dict
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 """
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 return {
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
201 "DefinedAttributes":
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 [self.__item2Dict(i) for i in self.defined_attrs],
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
203 "DefinedFunctions":
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 [self.__item2Dict(i) for i in self.defined_funcs],
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
205 "DefinedSlots":
7
a1a6ff3e5486 Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
206 [self.__item2Dict(i) for i in self.defined_slots],
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
207 "DefinedProperties":
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 [self.__item2Dict(i) for i in self.defined_props],
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
209 "DefinedVariables":
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 [self.__item2Dict(i) for i in self.defined_vars],
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
211 "UsedAttributes":
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 [self.__item2Dict(i) for i in self.used_attrs],
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
213 "UsedVariables":
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 [self.__item2Dict(i) for i in self.used_vars],
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
215 "TupleVariables":
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 [self.__item2Dict(i) for i in self.tuple_assign_vars],
9
1ce891a2b3ae Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
217 "Aliases":
2
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 [self.__item2Dict(i) for i in self.names_imported_as_aliases],
b517a1c5d5de Continued implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 }

eric ide

mercurial