diff options
| author | Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com> | 2013-04-27 14:01:55 +0200 | 
|---|---|---|
| committer | Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com> | 2013-04-27 14:01:55 +0200 | 
| commit | bd55852517a40d011b303559f4cd78773a2f3de5 (patch) | |
| tree | 9531a89c70f57cf06c23f39725e084858acb9c81 /youtube_dl/utils.py | |
| parent | 4c9f7a9988f296eeedd0843cded5cbcec3392adb (diff) | |
Allow to select videos to download by their upload dates (related #137)
Only absolute dates.
Diffstat (limited to 'youtube_dl/utils.py')
| -rw-r--r-- | youtube_dl/utils.py | 30 | 
1 files changed, 30 insertions, 0 deletions
| diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 017f06c42..e5d756b8b 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -12,6 +12,7 @@ import traceback  import zlib  import email.utils  import json +import datetime  try:      import urllib.request as compat_urllib_request @@ -568,3 +569,32 @@ class YoutubeDLHandler(compat_urllib_request.HTTPHandler):      https_request = http_request      https_response = http_response +     +def date_from_str(date_str): +    """Return a datetime object from a string in the format YYYYMMDD""" +    return datetime.datetime.strptime(date_str, "%Y%m%d").date() +     +class DateRange(object): +    """Represents a time interval between two dates""" +    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) +        else: +            self.start = datetime.datetime.min.date() +        if end is not None: +            self.end = date_from_str(end) +        else: +            self.end = datetime.datetime.max.date() +        if self.start >= self.end: +            raise ValueError('Date range: "%s" , the start date must be before the end date' % self) +    @classmethod +    def day(cls, day): +        """Returns a range that only contains the given day""" +        return cls(day,day) +    def __contains__(self, date): +        """Check if the date is in the range""" +        date = date_from_str(date) +        return self.start <= date and date <= self.end +    def __str__(self): +        return '%s - %s' % ( self.start.isoformat(), self.end.isoformat()) | 
