From 49b10f03cc28c81113f1f51fc730f93c582cff5c Mon Sep 17 00:00:00 2001 From: Frank Fischer <frank.fischer@student.kit.edu> Date: Fri, 22 Jul 2016 15:31:47 +0200 Subject: [PATCH] Code cleanup --- classes/JDLCreator.py | 122 ++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 64 deletions(-) diff --git a/classes/JDLCreator.py b/classes/JDLCreator.py index 9508a11..7c3b22f 100755 --- a/classes/JDLCreator.py +++ b/classes/JDLCreator.py @@ -1,7 +1,11 @@ from __future__ import unicode_literals, print_function import os +import shutil +import stat import subprocess + + # TODO GUI # import PyQt4 @@ -9,55 +13,54 @@ import subprocess class CloudSite(object): def __init__(self, name=''): self.name = name - self.universe ='' + self.universe = '' self.docker_image = '' - self.requirements ='' + self.requirements = '' if name == 'condocker': - self.universe = "docker" - self.docker_image = "mschnepf/slc6-condocker" + self.universe = 'docker' + self.docker_image = 'mschnepf/slc6-condocker' self.requirements = '(TARGET.CLOUD_SITE == "condocker")' elif name == 'ekpcloud': - self.universe = "vanilla" + self.universe = 'vanilla' self.requirements = '(TARGET.CLOUD_SITE == "ekpcloud")' elif name == 'ekpsupermachines': - self.universe = "docker" - self.docker_image = "mschnepf/slc6-condocker" + self.universe = 'docker' + self.docker_image = 'mschnepf/slc6-condocker' self.requirements = '(TARGET.CLOUD_SITE == "ekpsupermachines")' elif name == 'bwforcluster': - self.universe = "vanilla" + self.universe = 'vanilla' self.requirements = '(TARGET.CLOUD_SITE == "bwforcluster")' elif name == 'gridka': - self.universe = "vanilla" + self.universe = 'vanilla' self.requirements = '(TARGET.CLOUD_SITE == "gridka")' elif name == 'oneandone': - self.universe = "vanilla" + self.universe = 'vanilla' self.requirements = '(TARGET.CLOUD_SITE == "oneandone")' else: - self.universe = "docker" - self.docker_image = "mschnepf/slc6-condocker" - self.requirements = "" + self.universe = 'docker' + self.docker_image = 'mschnepf/slc6-condocker' + self.requirements = '' class JDLCreator(object): """Class to create JDL files for EKP HTCondor system.""" """Lines for output, log and errors.""" - LINE_OUTPUT = "output = out/$(Process).out" - LINE_ERROR = "error = error/$(Process).err" - LINE_LOG = "log = log/$(Process).log" + LINE_OUTPUT = 'output = out/$(Process).out' + LINE_ERROR = 'error = error/$(Process).err' + LINE_LOG = 'log = log/$(Process).log' - def __init__(self, site_name="", executable="", wall_time=0, job_folder="", - extra_lines="", output_files="", arguments=""): + def __init__(self, site_name='', executable='', wall_time=0, job_folder='.', + extra_lines='', output_files='', arguments=''): # types (str, str, int, str, list, str, list) -> None + ### # public attributes - user is allowed to change these values ### - - print("asdfasdghrgasgoqhiohioht90!!!!!") self.executable = executable ### @@ -77,6 +80,7 @@ class JDLCreator(object): self._arguments = arguments else: self._arguments = [] + ### # private attributes - only we need them ### @@ -117,7 +121,6 @@ class JDLCreator(object): """Defines executable""" self.executable = exe - @property def extra_lines(self): """List of extra lines.""" @@ -135,7 +138,7 @@ class JDLCreator(object): # type: (str) -> None self._extra_lines.append(str(line)) - def ClearExtraLines(self, line): + def ClearExtraLines(self): # type: (str) -> None self._extra_lines = [] @@ -156,11 +159,11 @@ class JDLCreator(object): # check data-type elif isinstance(requirement_, str): if len(self.requirements) > 0: - self._cloud_site.requirements += " && ( " + requirement_ + " ) " + self._cloud_site.requirements += ' && ( %s )' % requirement_ else: - self._cloud_site.requirements += " ( " + requirement_ + " ) " + self._cloud_site.requirements += ' ( %s ) ' % requirement_ else: - raise TypeError("Argument is not a string") + raise TypeError('Argument is not a string') @property def wall_time(self): @@ -179,7 +182,6 @@ class JDLCreator(object): # type: (int) -> None self._wall_time = time - @property def memory(self): """Requested momory in MB""" @@ -196,8 +198,6 @@ class JDLCreator(object): """Expected maximum memory (upper limit) in MB""" self._memory = memory_ - - @property def arguments(self): # type: () -> list @@ -213,7 +213,7 @@ class JDLCreator(object): elif isinstance(argument, (str, int, float)): self._arguments.append(str(argument)) else: - raise TypeError("Argument is not a string or a number") + raise TypeError('Argument is not a string or a number') @arguments.deleter def arguments(self): @@ -229,8 +229,7 @@ class JDLCreator(object): elif isinstance(argument, (str, int, float)): self._arguments.append(str(argument)) else: - raise TypeError("Argument is not a string or a number") - + raise TypeError('Argument is not a string or a number') @property def image(self): @@ -240,22 +239,19 @@ class JDLCreator(object): @image.setter def image(self, image_name): # type: (str) -> None - if self._cloud_site.universe == "docker": + if self._cloud_site.universe == 'docker': self._cloud_site.docker_image = image_name else: - raise AttributeError("You are not in a docker universe. :-(") + raise AttributeError('You are not in a docker universe. :-(') def ChangeImage(self, image_name): # type: (str) -> None print(self._cloud_site.docker_image) print(str(self._cloud_site.universe)) - if self._cloud_site.universe == "docker": + if self._cloud_site.universe == 'docker': self._cloud_site.docker_image = image_name else: - raise AttributeError("You are not in a docker universe. :-(") - - - + raise AttributeError('You are not in a docker universe. :-(') @property def output_files(self): @@ -292,7 +288,7 @@ class JDLCreator(object): # type: () -> None """Print current attribute values to screen.""" print(self._cloud_site.universe) - if self._cloud_site.universe == "docker": + if self._cloud_site.universe == 'docker': print(self._cloud_site.docker_image) if len(self.executable) > 0: print(self.executable) @@ -309,25 +305,25 @@ class JDLCreator(object): def __get_JDL_content(self): # type: () -> list """Create JDL content(!). This does NOT create the JDL file. - - Put all attributes in a list of lines for the JDL file. - """ + + Put all attributes in a list of lines for the JDL file. + """ jdl_content = list() if len(self.executable) is 0: - raise ValueError("No executable set!") + raise ValueError('No executable set!') exe = self.executable.split('/')[-1] # remove path to executable - jdl_content.append("universe = " + self._cloud_site.universe) + jdl_content.append('universe = %s' % self._cloud_site.universe) - if self._cloud_site.universe == "docker": - jdl_content.append("docker_image = " + str(self._cloud_site.docker_image)) + if self._cloud_site.universe == 'docker': + jdl_content.append('docker_image = %s' % self._cloud_site.docker_image) # do docker stuff for exe - jdl_content.append("executable = ./" + exe) - jdl_content.append("should_transfer_files = YES") - jdl_content.append("transfer_input_files = " + self.executable) + jdl_content.append('executable = ./%s' % exe) + jdl_content.append('should_transfer_files = YES') + jdl_content.append('transfer_input_files = %s' % self.executable) else: - jdl_content.append("executable = " + exe) + jdl_content.append('executable = %s' % exe) # add log files jdl_content.append(self.LINE_OUTPUT) @@ -335,41 +331,39 @@ class JDLCreator(object): jdl_content.append(self.LINE_LOG) # add line to transfer files back - jdl_content.append('transfer_output_files = "' + self.output_files + '"') + jdl_content.append('transfer_output_files = "%s"' % self.output_files) - # add environments + # add environment variables jdl_content.append('getenv = True') # add remote job if self._remote_job is True: - jdl_content.append("remote_job = true") - + jdl_content.append('remote_job = true') # add requirements if len(self._cloud_site.requirements) > 0: - jdl_content.append("requirements = " + self._cloud_site.requirements) + jdl_content.append('requirements = %s' % self._cloud_site.requirements) else: - print("Warning: You didn't set requirements! Please add '.requirements = str'") + print('Warning: You did not set requirements! Please add ".requirements = str"') # add wall_time, if set if self._wall_time > 0: - jdl_content.append("+RequestWalltime = " + str(self._wall_time)) + jdl_content.append('+RequestWalltime = %d' % self._wall_time) else: - print("Warning: You didn't set a walltime! Please add ' .wall_time = int' in seconds") + print('Warning: You did not set a walltime! Please add ".wall_time = int" in seconds') # add memeory, if set if self._memory > 0: - jdl_content.append("RequestMemory = " + str(self._memory)) + jdl_content.append('RequestMemory = %d' % self._memory) else: - print("Warning: You didn't set the requested memory! Please add '.memory = int' in MB") - + print('Warning: You did not set the requested memory! Please add ".memory = int" in MB') # add extra lines to JDL if len(self.extra_lines) > 0: for line in self.extra_lines: jdl_content.append(line) - jdl_content.append("queue arguments from arguments.txt") + jdl_content.append('queue arguments from arguments.txt') return jdl_content @@ -463,10 +457,10 @@ class JDLCreator(object): main_path = os.getcwd() os.chdir(self.job_folder) - command = "condor_submit " + self.__JDLFilename.split('/')[-1] + command = 'condor_submit %s' % self.__JDLFilename.split('/')[-1] print(command) if subprocess.call(command.split(), shell=False): - raise RuntimeError("submit failed! Check your configuration") + raise RuntimeError('submit failed! Check your configuration') # jump back if len(main_path) > 0: -- GitLab