def test_parse_runtime_limit_days_only_3(self): """dateutils - parse runtime using just at the end of a week range""" limit = 'Mon-Fri' now = datetime.datetime(year=2000, month=1, day=7) present_from = now present_to = now + datetime.timedelta(days=1) future_from = now + datetime.timedelta(days=3) future_to = now + datetime.timedelta(days=4) expected = ( (present_from, present_to), (future_from, future_to), ) result = dateutils.parse_runtime_limit(limit, now=now) self.assertEqual(expected, result)
def test_parse_runtime_limit_days_times(self): """dateutils - parse runtime using just a week range""" limit = 'Mon-Fri 06:00-18:00' now = datetime.datetime(year=2000, month=1, day=3) day = now.date() t = now.time() present_from = datetime.datetime.combine(day, t.replace(hour=6)) present_to = datetime.datetime.combine(day, t.replace(hour=18)) future_from = present_from + datetime.timedelta(days=1) future_to = present_to + datetime.timedelta(days=1) expected = ( (present_from, present_to), (future_from, future_to), ) result = dateutils.parse_runtime_limit(limit, now=now) self.assertEqual(expected, result)
def test_parse_runtime_limit_times_only(self): """dateutils - parse runtime using just a time range""" limit = '06:00-18:00' day = datetime.date.today() now = datetime.time() present_from = datetime.datetime.combine(day, now.replace(hour=6)) present_to = datetime.datetime.combine(day, now.replace(hour=18)) if present_to <= datetime.datetime.now(): present_from += datetime.timedelta(days=1) present_to += datetime.timedelta(days=1) future_from = present_from + datetime.timedelta(days=1) future_to = present_to + datetime.timedelta(days=1) expected = ( (present_from, present_to), (future_from, future_to), ) result = dateutils.parse_runtime_limit(limit) self.assertEqual(expected, result)
def test_parse_runtime_limit_day_abbr_only(self): """dateutils - parse runtime using just a weekday abbreviation""" limit = 'Tue' day = datetime.date.today() now = datetime.time() while day.weekday() != calendar.TUESDAY: day += datetime.timedelta(1) present_from = datetime.datetime.combine(day, now.replace(hour=0)) present_to = present_from + datetime.timedelta(days=1) if datetime.datetime.now() >= present_to: present_from += datetime.timedelta(days=7) present_to += datetime.timedelta(days=7) future_from = present_from + datetime.timedelta(days=7) future_to = present_to + datetime.timedelta(days=7) expected = ( (present_from, present_to), (future_from, future_to), ) result = dateutils.parse_runtime_limit(limit) self.assertEqual(expected, result)
def test_parse_runtime_limit_day_plus_times(self): """dateutils - parse runtime using a weekday plus a time range""" limit = 'Thursday 18:00-22:00' day = datetime.date.today() now = datetime.time() while day.weekday() != calendar.THURSDAY: day += datetime.timedelta(1) present_from = datetime.datetime.combine(day, now.replace(hour=18)) present_to = datetime.datetime.combine(day, now.replace(hour=22)) if datetime.datetime.now() >= present_to: present_from += datetime.timedelta(days=7) present_to += datetime.timedelta(days=7) future_from = present_from + datetime.timedelta(days=7) future_to = present_to + datetime.timedelta(days=7) expected = ( (present_from, present_to), (future_from, future_to), ) result = dateutils.parse_runtime_limit(limit) self.assertEqual(expected, result)
def _task_build_params( task_name, argv, description="", help_specific_usage="", version=__revision__, specific_params=("", []), task_submit_elaborate_specific_parameter_fnc=None, task_submit_check_options_fnc=None): """ Build the BibTask params. @param argv: a list of string as in sys.argv @param description: is the generic description printed in the usage page; @param help_specific_usage: is the specific parameter help @param task_submit_elaborate_specific_parameter_fnc: will be called passing a key and a value, for parsing specific cli parameters. Must return True if it has recognized the parameter. Must eventually update the options with bibtask_set_option; @param task_submit_check_options: must check the validity of options (via bibtask_get_option) once all the options where parsed; """ global _OPTIONS _OPTIONS = {} if task_name in CFG_BIBTASK_DEFAULT_TASK_SETTINGS: _OPTIONS.update(CFG_BIBTASK_DEFAULT_TASK_SETTINGS[task_name]) # set user-defined options: try: (short_params, long_params) = specific_params opts, args = getopt.gnu_getopt(argv[1:], "hVv:u:s:t:P:N:L:I:" + short_params, [ "help", "version", "verbose=", "user="******"sleep=", "runtime=", "priority=", "name=", "limit=", "profile=", "post-process=", "sequence-id=", "stop-on-error", "continue-on-error", "fixed-time", "email-logs-to=" ] + long_params) except getopt.GetoptError as err: _usage(1, err, help_specific_usage=help_specific_usage, description=description) try: for opt in opts: if opt[0] in ("-h", "--help"): _usage(0, help_specific_usage=help_specific_usage, description=description) elif opt[0] in ("-V", "--version"): print(_TASK_PARAMS["version"]) sys.exit(0) elif opt[0] in ("-u", "--user"): _TASK_PARAMS["user"] = opt[1] elif opt[0] in ("-v", "--verbose"): _TASK_PARAMS["verbose"] = int(opt[1]) elif opt[0] in ("-s", "--sleeptime"): if task_name not in CFG_TASK_IS_NOT_A_DEAMON: get_datetime(opt[1]) # see if it is a valid shift _TASK_PARAMS["sleeptime"] = opt[1] elif opt[0] in ("-t", "--runtime"): _TASK_PARAMS["runtime"] = get_datetime(opt[1]) elif opt[0] in ("-P", "--priority"): _TASK_PARAMS["priority"] = int(opt[1]) elif opt[0] in ("-N", "--name"): _TASK_PARAMS["task_specific_name"] = opt[1] elif opt[0] in ("-L", "--limit"): _TASK_PARAMS["runtime_limit"] = parse_runtime_limit(opt[1]) elif opt[0] in ("--profile", ): _TASK_PARAMS["profile"] += opt[1].split(',') elif opt[0] in ("--post-process", ): _TASK_PARAMS["post-process"] += [opt[1]] elif opt[0] in ("-I","--sequence-id"): _TASK_PARAMS["sequence-id"] = opt[1] elif opt[0] in ("--stop-on-error", ): _TASK_PARAMS["stop_queue_on_error"] = True elif opt[0] in ("--continue-on-error", ): _TASK_PARAMS["stop_queue_on_error"] = False elif opt[0] in ("--fixed-time", ): _TASK_PARAMS["fixed_time"] = True elif opt[0] in ("--email-logs-to",): _TASK_PARAMS["email_logs_to"] = opt[1].split(',') elif not callable(task_submit_elaborate_specific_parameter_fnc) or \ not task_submit_elaborate_specific_parameter_fnc(opt[0], opt[1], opts, args): _usage(1, help_specific_usage=help_specific_usage, description=description) except StandardError as e: _usage(e, help_specific_usage=help_specific_usage, description=description) if callable(task_submit_check_options_fnc): if not task_submit_check_options_fnc(): _usage(1, help_specific_usage=help_specific_usage, description=description)