summaryrefslogtreecommitdiff
path: root/src/projManagement/Worker.py
blob: 4cfeefe93f5bcce43a75c9deb0d715696973e124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# =========================================================================
#
#          FILE: WorkerThread.py
#
#         USAGE: ---
#
#   DESCRIPTION: This class open all third party application using QT Thread
#
#       OPTIONS: ---
#  REQUIREMENTS: ---
#          BUGS: ---
#         NOTES: ---
#        AUTHOR: Fahim Khan, fahim.elex@gmail.com
#  ORGANIZATION: eSim team at FOSSEE, IIT Bombay.
#       CREATED: Tuesday 24 Feb 2015
#      REVISION:  ---
# =========================================================================
from PyQt4 import QtCore
import subprocess
from configuration.Appconfig import Appconfig

"""
WorkerThread uses QThread to support threading operations for
other PyQT windows
This is a helper functions, used to create threads for various commands
"""


class WorkerThread(QtCore.QThread):
    """
    Initialise a QThread with the passed arguments

    @params
        :args   => takes a space separated string of comamnds to be execute
                   in different child processes (see subproces.Popen())

    @return
        None
    """

    def __init__(self, args):
        QtCore.QThread.__init__(self)
        self.args = args

    """
    __del__ is a called whenever garbage collection is initialised
    Here, it waits (self.wait()) for the thread to finish executing
    before garbage collecting it

    @params

    @return
        None
    """
    def __del__(self):
        self.wait()

    """
    run is the function that is called, when we start the thread as
    thisThread.start()
    Here, it makes system calls for all args passed (self.args)

    @params

    @return
        None
    """
    def run(self):
        print("Worker Thread Calling Command :", self.args)
        self.call_system(self.args)

    """
    call_system is used to create childprocess for the passed arguments
    (self.args) and also pass the process created and its id to config file
    Apponfig() object contains procThread and proc_dist used to
    track processes called

    @params
        :command    => (self.args) takes space separated string of comamnds to
                       be executed in different child processes
                       (see subproces.Popen())
    """
    def call_system(self, command):
        procThread = Appconfig()
        proc = subprocess.Popen(command.split())
        procThread.procThread_list.append(proc)
        procThread.proc_dict[procThread.current_project['ProjectName']].append(
            proc.pid)