Remove longs (int does the right thing since Python 2.2, see PEP 237)
[youtube-dl] / youtube_dl / FileDownloader.py
index 14e872a98a922606b8a3f3ea15a9d3d61ef87274..ff6963262c92a04532984aec305d7c18ae356939 100644 (file)
@@ -13,7 +13,7 @@ import urllib2
 
 if os.name == 'nt':
        import ctypes
-       
+
 from utils import *
 
 
@@ -139,23 +139,23 @@ class FileDownloader(object):
                new_min = max(bytes / 2.0, 1.0)
                new_max = min(max(bytes * 2.0, 1.0), 4194304) # Do not surpass 4 MB
                if elapsed_time < 0.001:
-                       return long(new_max)
+                       return int(new_max)
                rate = bytes / elapsed_time
                if rate > new_max:
-                       return long(new_max)
+                       return int(new_max)
                if rate < new_min:
-                       return long(new_min)
-               return long(rate)
+                       return int(new_min)
+               return int(rate)
 
        @staticmethod
        def parse_bytes(bytestr):
-               """Parse a string indicating a byte quantity into a long integer."""
+               """Parse a string indicating a byte quantity into an integer."""
                matchobj = re.match(r'(?i)^(\d+(?:\.\d+)?)([kMGTPEZY]?)$', bytestr)
                if matchobj is None:
                        return None
                number = float(matchobj.group(1))
                multiplier = 1024.0 ** 'bkmgtpezy'.index(matchobj.group(2).lower())
-               return long(round(number * multiplier))
+               return int(round(number * multiplier))
 
        def add_info_extractor(self, ie):
                """Add an InfoExtractor object to the end of the list."""
@@ -173,7 +173,6 @@ class FileDownloader(object):
                if not self.params.get('quiet', False):
                        terminator = [u'\n', u''][skip_eol]
                        output = message + terminator
-
                        if 'b' not in self._screen_file.mode or sys.version_info[0] < 3: # Python 2 lies about the mode of sys.stdout/sys.stderr
                                output = output.encode(preferredencoding(), 'ignore')
                        self._screen_file.write(output)
@@ -323,6 +322,7 @@ class FileDownloader(object):
                        template_dict = dict(info_dict)
                        template_dict['epoch'] = unicode(long(time.time()))
                        template_dict['autonumber'] = unicode('%05d' % self._num_downloads)
+                       template_dict['title'] = template_dict['stitle'] # Keep both for backwards compatibility
                        filename = self.params['outtmpl'] % template_dict
                        return filename
                except (ValueError, KeyError), err:
@@ -334,11 +334,15 @@ class FileDownloader(object):
 
                title = info_dict['title']
                matchtitle = self.params.get('matchtitle', False)
-               if matchtitle and not re.search(matchtitle, title, re.IGNORECASE):
-                       return u'[download] "' + title + '" title did not match pattern "' + matchtitle + '"'
+               if matchtitle:
+                       matchtitle = matchtitle.decode('utf8')
+                       if not re.search(matchtitle, title, re.IGNORECASE):
+                               return u'[download] "' + title + '" title did not match pattern "' + matchtitle + '"'
                rejecttitle = self.params.get('rejecttitle', False)
-               if rejecttitle and re.search(rejecttitle, title, re.IGNORECASE):
-                       return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"'
+               if rejecttitle:
+                       rejecttitle = rejecttitle.decode('utf8')
+                       if re.search(rejecttitle, title, re.IGNORECASE):
+                               return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"'
                return None
 
        def process_info(self, info_dict):
@@ -357,20 +361,20 @@ class FileDownloader(object):
                                raise MaxDownloadsReached()
 
                filename = self.prepare_filename(info_dict)
-               
+
                # Forced printings
                if self.params.get('forcetitle', False):
-                       print info_dict['title'].encode(preferredencoding(), 'xmlcharrefreplace')
+                       print(info_dict['title'].encode(preferredencoding(), 'xmlcharrefreplace'))
                if self.params.get('forceurl', False):
-                       print info_dict['url'].encode(preferredencoding(), 'xmlcharrefreplace')
+                       print(info_dict['url'].encode(preferredencoding(), 'xmlcharrefreplace'))
                if self.params.get('forcethumbnail', False) and 'thumbnail' in info_dict:
-                       print info_dict['thumbnail'].encode(preferredencoding(), 'xmlcharrefreplace')
+                       print(info_dict['thumbnail'].encode(preferredencoding(), 'xmlcharrefreplace'))
                if self.params.get('forcedescription', False) and 'description' in info_dict:
-                       print info_dict['description'].encode(preferredencoding(), 'xmlcharrefreplace')
+                       print(info_dict['description'].encode(preferredencoding(), 'xmlcharrefreplace'))
                if self.params.get('forcefilename', False) and filename is not None:
-                       print filename.encode(preferredencoding(), 'xmlcharrefreplace')
+                       print(filename.encode(preferredencoding(), 'xmlcharrefreplace'))
                if self.params.get('forceformat', False):
-                       print info_dict['format'].encode(preferredencoding(), 'xmlcharrefreplace')
+                       print(info_dict['format'].encode(preferredencoding(), 'xmlcharrefreplace'))
 
                # Do nothing else if in simulate mode
                if self.params.get('simulate', False):
@@ -399,10 +403,10 @@ class FileDownloader(object):
                        except (OSError, IOError):
                                self.trouble(u'ERROR: Cannot write description file ' + descfn)
                                return
-                               
+
                if self.params.get('writesubtitles', False) and 'subtitles' in info_dict and info_dict['subtitles']:
                        # subtitles download errors are already managed as troubles in relevant IE
-                       # that way it will silently go on when used with unsupporting IE 
+                       # that way it will silently go on when used with unsupporting IE
                        try:
                                srtfn = filename.rsplit('.', 1)[0] + u'.srt'
                                self.report_writesubtitles(srtfn)
@@ -448,7 +452,7 @@ class FileDownloader(object):
                                except (ContentTooShortError, ), err:
                                        self.trouble(u'ERROR: content too short (expected %s bytes and served %s)' % (err.expected, err.downloaded))
                                        return
-       
+
                        if success:
                                try:
                                        self.post_process(filename, info_dict)
@@ -474,6 +478,7 @@ class FileDownloader(object):
                                # Extract information from URL and process it
                                videos = ie.extract(url)
                                for video in videos or []:
+                                       video['extractor'] = ie.IE_NAME
                                        try:
                                                self.increment_downloads()
                                                self.process_info(video)