Откройте контекст
Выберите папку проекта и обозначьте нужные файлы или поведение.
Разверните поле минут до 128 символов в отсортированные уникальные значения от нуля до 59. Проверьте списки, включительные диапазоны и шаги для диапазонов или звёздочек, отклоняя обратные границы, нулевые шаги и лишний синтаксис без запуска заданий.
Выберите папку проекта и обозначьте нужные файлы или поведение.
Укажите входные данные, ожидаемый результат и границы, которые нужно сохранить.
Проверьте предлагаемые изменения и команды, прежде чем полагаться на результат.
Сравните фактическое поведение с ожидаемым. Если проверка не проходит, разберитесь в причине перед следующими изменениями.
import re
def minute_values(field):
if type(field) is not str or not 1 <= len(field) <= 128:
raise ValueError("minute.input")
result = set()
for item in field.split(","):
match = re.fullmatch(r"(\*|[0-9]+(?:-[0-9]+)?)(?:/([0-9]+))?", item)
if match is None:
raise ValueError("minute.syntax")
base, step_text = match.groups()
step = int(step_text) if step_text else 1
if not 1 <= step <= 59 or (step_text and base != "*" and "-" not in base):
raise ValueError("minute.step")
bounds = [int(x) for x in base.split("-")] if base != "*" else [0, 59]
low, high = (bounds[0], bounds[-1])
if not 0 <= low <= high <= 59:
raise ValueError("minute.bounds")
result.update(range(low, high+1, step))
return sorted(result)
Пример — отправная точка для реального проекта, а не утверждение, что сгенерированный код уже протестирован. Адаптируйте пути, зависимости и ожидаемое поведение к своему приложению.