aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2022-02-12 02:40:49 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2022-02-12 02:46:05 +0530
commitd49f8db39fd94a9ec314c43ce31d85facb1b8886 (patch)
tree603badcb390703bfb903984ccbb6924887cf06fa
parentab6df717d16fed9ab5d5f815185ce14559b4309b (diff)
downloadhypervideo-pre-d49f8db39fd94a9ec314c43ce31d85facb1b8886.tar.lz
hypervideo-pre-d49f8db39fd94a9ec314c43ce31d85facb1b8886.tar.xz
hypervideo-pre-d49f8db39fd94a9ec314c43ce31d85facb1b8886.zip
[utils] Validate `DateRange` input
Closes #2641
-rw-r--r--yt_dlp/utils.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index e39a5b29e..bb8d65cad 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -1832,7 +1832,7 @@ def subtitles_filename(filename, sub_lang, sub_format, expected_real_ext=None):
def datetime_from_str(date_str, precision='auto', format='%Y%m%d'):
"""
Return a datetime object from a string in the format YYYYMMDD or
- (now|today|date)[+-][0-9](microsecond|second|minute|hour|day|week|month|year)(s)?
+ (now|today|yesterday|date)[+-][0-9](microsecond|second|minute|hour|day|week|month|year)(s)?
format: string date format used to return datetime object from
precision: round the time portion of a datetime object.
@@ -1871,13 +1871,17 @@ def datetime_from_str(date_str, precision='auto', format='%Y%m%d'):
return datetime_round(datetime.datetime.strptime(date_str, format), precision)
-def date_from_str(date_str, format='%Y%m%d'):
+def date_from_str(date_str, format='%Y%m%d', strict=False):
"""
Return a datetime object from a string in the format YYYYMMDD or
- (now|today|date)[+-][0-9](microsecond|second|minute|hour|day|week|month|year)(s)?
+ (now|today|yesterday|date)[+-][0-9](microsecond|second|minute|hour|day|week|month|year)(s)?
+
+ If "strict", only (now|today)[+-][0-9](day|week|month|year)(s)? is allowed
format: string date format used to return datetime object from
"""
+ if strict and not re.fullmatch(r'\d{8}|(now|today)[+-]\d+(day|week|month|year)(s)?', date_str):
+ raise ValueError(f'Invalid date format {date_str}')
return datetime_from_str(date_str, precision='microsecond', format=format).date()
@@ -1924,11 +1928,11 @@ class DateRange(object):
def __init__(self, start=None, end=None):
"""start and end must be strings in the format accepted by date"""
if start is not None:
- self.start = date_from_str(start)
+ self.start = date_from_str(start, strict=True)
else:
self.start = datetime.datetime.min.date()
if end is not None:
- self.end = date_from_str(end)
+ self.end = date_from_str(end, strict=True)
else:
self.end = datetime.datetime.max.date()
if self.start > self.end: