def get_process_priority_args(self, job_spec): """Constructs a list of arguments to be prepended to process args in order to assign CPU/IO priority. """ cron_job_class = cron_job_registry.get(parse_job_spec(job_spec)[0]) if (app_settings.CRONMAN_NICE_CMD and cron_job_class.worker_cpu_priority is not None): cpu_priority_args = [ app_settings.CRONMAN_NICE_CMD, "-n", str(cron_job_class.worker_cpu_priority), ] else: cpu_priority_args = [] if (app_settings.CRONMAN_IONICE_CMD and cron_job_class.worker_io_priority is not None): io_class, io_class_data = cron_job_class.worker_io_priority io_priority_args = [ app_settings.CRONMAN_IONICE_CMD, "-c", str(io_class), ] if io_class_data is not None: io_priority_args += ["-n", str(io_class_data)] else: io_priority_args = [] return cpu_priority_args + io_priority_args
def test_parse_job_spec_valid_params(self): """Test for `parse_job_spec` function - case: valid params""" self.assertEqual( utils.parse_job_spec('CronJob:42,a=1, b="a: b c"'), ("CronJob", ["42"], { "a": "1", "b": "a: b c" }), )
def parse_job_spec_with_class(job_spec=None): """Converts a string (job spec) into quadruple (name, args, kwargs, cron_job_class). Raises CronWorkerInvalidParams if string cannot be parsed or there is no cron job class for given specification. """ if job_spec: try: name, args, kwargs = parse_job_spec(job_spec) cron_job_class = cron_job_registry.get(name) except (ValueError, CronJobNotRegistered) as error: raise CronWorkerInvalidParams(format_exception(error)) else: name = args = kwargs = cron_job_class = None return name, args, kwargs, cron_job_class
def parse_job_spec_or_pid(job_spec_or_pid=None): """Converts a string (job spec or integer - PID) into quadruple (name, args, kwargs, pid). Raises CronWorkerInvalidParams if string cannot be parsed. """ if job_spec_or_pid: if re.match(r"\d+", job_spec_or_pid): pid = int(job_spec_or_pid) name = args = kwargs = None else: pid = None try: name, args, kwargs = parse_job_spec(job_spec_or_pid) except ValueError as error: raise CronWorkerInvalidParams(format_exception(error)) else: name = args = kwargs = pid = None return name, args, kwargs, pid
def __init__( self, data_dir, job_spec=None, name=None, args=None, kwargs=None, pid=None, ): if pid: file_by_pid = self.file_class.by_pid(data_dir, pid) files = [file_by_pid] if file_by_pid else [] else: if job_spec: name, args, kwargs = parse_job_spec(job_spec) # Files sorted by name: files = sorted( self.file_class.all(data_dir, name, args, kwargs), key=lambda pf: pf.name, ) self.data_dir = data_dir self.files = files self.logger = logger
def test_parse_job_spec_invalid_params(self): """Test for `parse_job_spec` function - case: invalid params""" with self.assertRaisesMessage( ValueError, "Positional argument after named arguments."): utils.parse_job_spec('CronJob:a=1,"test"'),
def test_parse_job_spec_no_params(self): """Test for `parse_job_spec` function - case: no params""" self.assertEqual(utils.parse_job_spec("CronJob"), ("CronJob", [], {}))