@ -63,7 +63,7 @@ def preferredencoding():
"""
try :
pref = locale . getpreferredencoding ( )
u ' TEST ' . encode ( pref )
' TEST ' . encode ( pref )
except :
pref = ' UTF-8 '
@ -215,7 +215,7 @@ def sanitize_open(filename, open_mode):
It returns the tuple ( stream , definitive_file_name ) .
"""
try :
if filename == u ' - ' :
if filename == ' - ' :
if sys . platform == ' win32 ' :
import msvcrt
msvcrt . setmode ( sys . stdout . fileno ( ) , os . O_BINARY )
@ -228,7 +228,7 @@ def sanitize_open(filename, open_mode):
# In case of error, try to remove win32 forbidden chars
alt_filename = os . path . join (
re . sub ( u ' [/<>: " \\ | \\ \\ ? \\ *] ' , u ' # ' , path_part )
re . sub ( ' [/<>: " \\ | \\ \\ ? \\ *] ' , ' # ' , path_part )
for path_part in os . path . split ( filename )
)
if alt_filename == filename :
@ -267,7 +267,7 @@ def sanitize_filename(s, restricted=False, is_id=False):
return ' _ '
return char
result = u ' ' . join ( map ( replace_insane , s ) )
result = ' ' . join ( map ( replace_insane , s ) )
if not is_id :
while ' __ ' in result :
result = result . replace ( ' __ ' , ' _ ' )
@ -297,15 +297,15 @@ def _htmlentity_transform(entity):
mobj = re . match ( r ' #(x?[0-9]+) ' , entity )
if mobj is not None :
numstr = mobj . group ( 1 )
if numstr . startswith ( u ' x ' ) :
if numstr . startswith ( ' x ' ) :
base = 16
numstr = u ' 0 %s ' % numstr
numstr = ' 0 %s ' % numstr
else :
base = 10
return compat_chr ( int ( numstr , base ) )
# Unknown entity in name, return its literal representation
return ( u ' & %s ; ' % entity )
return ( ' & %s ; ' % entity )
def unescapeHTML ( s ) :
@ -329,7 +329,7 @@ def encodeFilename(s, for_subprocess=False):
return s
if sys . platform == ' win32 ' and sys . getwindowsversion ( ) [ 0 ] > = 5 :
# Pass u '' directly to use Unicode APIs on Windows 2000 and up
# Pass '' directly to use Unicode APIs on Windows 2000 and up
# (Detecting Windows NT 4 is tricky because 'major >= 4' would
# match Windows 9x series as well. Besides, NT 4 is obsolete.)
if not for_subprocess :
@ -424,9 +424,9 @@ class ExtractorError(Exception):
if video_id is not None :
msg = video_id + ' : ' + msg
if cause :
msg + = u ' (caused by %r ) ' % cause
msg + = ' (caused by %r ) ' % cause
if not expected :
msg = msg + u ' ; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output. Make sure you are using the latest version; type youtube-dl -U to update. '
msg = msg + ' ; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output. Make sure you are using the latest version; type youtube-dl -U to update. '
super ( ExtractorError , self ) . __init__ ( msg )
self . traceback = tb
@ -437,7 +437,7 @@ class ExtractorError(Exception):
def format_traceback ( self ) :
if self . traceback is None :
return None
return u ' ' . join ( traceback . format_tb ( self . traceback ) )
return ' ' . join ( traceback . format_tb ( self . traceback ) )
class RegexNotFoundError ( ExtractorError ) :
@ -665,17 +665,17 @@ def unified_strdate(date_str):
upload_date = datetime . datetime ( * timetuple [ : 6 ] ) . strftime ( ' % Y % m %d ' )
return upload_date
def determine_ext ( url , default_ext = u ' unknown_video ' ) :
def determine_ext ( url , default_ext = ' unknown_video ' ) :
if url is None :
return default_ext
guess = url . partition ( u ' ? ' ) [ 0 ] . rpartition ( u ' . ' ) [ 2 ]
guess = url . partition ( ' ? ' ) [ 0 ] . rpartition ( ' . ' ) [ 2 ]
if re . match ( r ' ^[A-Za-z0-9]+$ ' , guess ) :
return guess
else :
return default_ext
def subtitles_filename ( filename , sub_lang , sub_format ) :
return filename . rsplit ( ' . ' , 1 ) [ 0 ] + u ' . ' + sub_lang + u ' . ' + sub_format
return filename . rsplit ( ' . ' , 1 ) [ 0 ] + ' . ' + sub_lang + ' . ' + sub_format
def date_from_str ( date_str ) :
"""
@ -967,7 +967,7 @@ def shell_quote(args):
# We may get a filename encoded with 'encodeFilename'
a = a . decode ( encoding )
quoted_args . append ( pipes . quote ( a ) )
return u ' ' . join ( quoted_args )
return ' ' . join ( quoted_args )
def takewhile_inclusive ( pred , seq ) :
@ -983,31 +983,31 @@ def smuggle_url(url, data):
""" Pass additional data in a URL for internal use. """
sdata = compat_urllib_parse . urlencode (
{ u ' __youtubedl_smuggle ' : json . dumps ( data ) } )
return url + u ' # ' + sdata
{ ' __youtubedl_smuggle ' : json . dumps ( data ) } )
return url + ' # ' + sdata
def unsmuggle_url ( smug_url , default = None ) :
if not ' #__youtubedl_smuggle ' in smug_url :
return smug_url , default
url , _ , sdata = smug_url . rpartition ( u ' # ' )
jsond = compat_parse_qs ( sdata ) [ u ' __youtubedl_smuggle ' ] [ 0 ]
url , _ , sdata = smug_url . rpartition ( ' # ' )
jsond = compat_parse_qs ( sdata ) [ ' __youtubedl_smuggle ' ] [ 0 ]
data = json . loads ( jsond )
return url , data
def format_bytes ( bytes ) :
if bytes is None :
return u ' N/A '
return ' N/A '
if type ( bytes ) is str :
bytes = float ( bytes )
if bytes == 0.0 :
exponent = 0
else :
exponent = int ( math . log ( bytes , 1024.0 ) )
suffix = [ u ' B ' , u ' KiB ' , u ' MiB ' , u ' GiB ' , u ' TiB ' , u ' PiB ' , u ' EiB ' , u ' ZiB ' , u ' YiB ' ] [ exponent ]
suffix = [ ' B ' , ' KiB ' , ' MiB ' , ' GiB ' , ' TiB ' , ' PiB ' , ' EiB ' , ' ZiB ' , ' YiB ' ] [ exponent ]
converted = float ( bytes ) / float ( 1024 * * exponent )
return u ' %.2f %s ' % ( converted , suffix )
return ' %.2f %s ' % ( converted , suffix )
def get_term_width ( ) :
@ -1030,8 +1030,8 @@ def month_by_name(name):
""" Return the number of a month by (locale-independently) English name """
ENGLISH_NAMES = [
u ' January ' , u ' February ' , u ' March ' , u ' April ' , u ' May ' , u ' June ' ,
u ' July ' , u ' August ' , u ' September ' , u ' October ' , u ' November ' , u ' December ' ]
' January ' , ' February ' , ' March ' , ' April ' , ' May ' , ' June ' ,
' July ' , ' August ' , ' September ' , ' October ' , ' November ' , ' December ' ]
try :
return ENGLISH_NAMES . index ( name ) + 1
except ValueError :
@ -1042,7 +1042,7 @@ def fix_xml_ampersands(xml_str):
""" Replace all the ' & ' by ' & ' in XML """
return re . sub (
r ' &(?!amp;|lt;|gt;|apos;|quot;|#x[0-9a-fA-F] { ,4};|#[0-9] { ,4};) ' ,
u ' & ' ,
' & ' ,
xml_str )
@ -1075,7 +1075,7 @@ def remove_end(s, end):
def url_basename ( url ) :
path = compat_urlparse . urlparse ( url ) . path
return path . strip ( u ' / ' ) . split ( u ' / ' ) [ - 1 ]
return path . strip ( ' / ' ) . split ( ' / ' ) [ - 1 ]
class HEADRequest ( compat_urllib_request . Request ) :
@ -1100,7 +1100,7 @@ def str_to_int(int_str):
""" A more relaxed version of int_or_none """
if int_str is None :
return None
int_str = re . sub ( r ' [, \ . \ +] ' , u ' ' , int_str )
int_str = re . sub ( r ' [, \ . \ +] ' , ' ' , int_str )
return int ( int_str )
@ -1135,7 +1135,7 @@ def parse_duration(s):
def prepend_extension ( filename , ext ) :
name , real_ext = os . path . splitext ( filename )
return u ' {0} . {1} {2} ' . format ( name , ext , real_ext )
return ' {0} . {1} {2} ' . format ( name , ext , real_ext )
def check_executable ( exe , args = [ ] ) :
@ -1150,7 +1150,7 @@ def check_executable(exe, args=[]):
def get_exe_version ( exe , args = [ ' --version ' ] ,
version_re = r ' version \ s+([0-9._-a-zA-Z]+) ' ,
unrecognized = u ' present ' ) :
unrecognized = ' present ' ) :
""" Returns the version of the specified executable,
or False if the executable is not present """
try :
@ -1271,7 +1271,7 @@ def escape_url(url):
) . geturl ( )
try :
struct . pack ( u ' !I ' , 0 )
struct . pack ( ' !I ' , 0 )
except TypeError :
# In Python 2.6 (and some 2.7 versions), struct requires a bytes argument
def struct_pack ( spec , * args ) :
@ -1292,7 +1292,7 @@ def read_batch_urls(batch_fd):
def fixup ( url ) :
if not isinstance ( url , compat_str ) :
url = url . decode ( ' utf-8 ' , ' replace ' )
BOM_UTF8 = u ' \xef \xbb \xbf '
BOM_UTF8 = ' \xef \xbb \xbf '
if url . startswith ( BOM_UTF8 ) :
url = url [ len ( BOM_UTF8 ) : ]
url = url . strip ( )