Source code for incor.EventHandler

import os
import signal
from watchdog.events import FileSystemEventHandler
from subprocess import call
import psutil


[docs]class EventHandler(FileSystemEventHandler): """ The class inherited from watchdog.events.FileSystemEventHandler, overrides the functions on_modified() and on_created() from the base class. """ def __init__(self, path, compilers): self.path = path self.TemplateName = '' self.newCmd = False self.parentPid = None self.cmd = None self.lastCall = '' self.compilers = compilers
[docs] def on_modified(self, event): """ Overrides the function on_modified() from the base class :param watchdog.events.FileModifiedEvent event: Specifies the type of event """ if not event.is_directory: # Checks whether the created event is not a directory event cur_path = event.src_path file_extension = cur_path.split('.')[-1] if file_extension == 'py': # python files parent = '' try: parent = psutil.Process(self.parentPid) except psutil.NoSuchProcess: print('No such process') children = parent.children(recursive=True) for process in children: process.send_signal(signal.SIGKILL) call('clear', shell=True) if children: print('Previously executing processes terminated') self.cmd = self.compilers[2] + ' ' + cur_path print('issuing system call - ' + self.cmd) self.newCmd = True elif file_extension == 'jl': # julia files parent = '' try: parent = psutil.Process(self.parentPid) except psutil.NoSuchProcess: print('No such process') children = parent.children(recursive=True) for process in children: process.send_signal(signal.SIGKILL) call('clear', shell=True) if children: print('Previously executing processes terminated') self.cmd = self.compilers[3] + ' ' + cur_path print('issuing system call - ' + self.cmd) self.newCmd = True elif file_extension == "cpp": # cpp files parent = '' try: parent = psutil.Process(self.parentPid) except psutil.NoSuchProcess: print('No such process') children = parent.children(recursive=True) for process in children: process.send_signal(signal.SIGKILL) call('clear', shell=True) if children: print('Previously executing processes terminated') out_path = cur_path[:-3] + 'out' if os.path.isfile(out_path): # removes the existing output file self.cmd = 'rm ' + out_path print('issuing system call - ' + self.cmd) call(self.cmd, shell=True) # compiles the cpp program self.cmd = self.compilers[0] + \ ' ' + cur_path + ' -o ' + out_path print('issuing system call - ' + self.cmd) call(self.cmd, shell=True) if os.path.isfile(out_path): # if the output file has been created if out_path[:2] != './': out_path = './' + out_path self.cmd = out_path print('issuing system call - ' + self.cmd) self.newCmd = True elif file_extension == "c": # c files parent = '' try: parent = psutil.Process(self.parentPid) except psutil.NoSuchProcess: print('No such process') children = parent.children(recursive=True) for process in children: process.send_signal(signal.SIGKILL) call('clear', shell=True) if children: print('Previously executing processes terminated') out_path = cur_path[:-3] + 'out' if os.path.isfile(out_path): # removes the existing output file self.cmd = 'rm ' + out_path print('issuing system call - ' + self.cmd) call(self.cmd, shell=True) # compiles the c program self.cmd = self.compilers[1] + \ ' ' + cur_path + ' -o ' + out_path print('issuing system call - ' + self.cmd) call(self.cmd, shell=True) if os.path.isfile(out_path): # if the output file has been created out_path = './' + out_path self.cmd = out_path print('issuing system call - ' + self.cmd) self.newCmd = True
[docs] def on_created(self, event): """ Overrides the function on_created() from the base class :param watchdog.events.FileModifiedEvent event: Specifies the type of event """ if not event.is_directory: cur_path = event.src_path file_extension = cur_path.split('.')[-1] if file_extension in ['py', 'cpp', 'c', 'jl']: name = self.TemplateName + '.' + file_extension f_created = open(cur_path, 'r+') if f_created.read() == '': for root, dirs, files in os.walk(self.path): if name in files: f = open(os.path.join(root, name)) f_created.write(f.read()) f.close() break f_created.close()