X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2F__init__.py;h=d7e1a91ada0ce29df8c2f0dca23d93a8e4d43acc;hb=2a298b72eb42ae6b7d8968e508e0978cf59d7145;hp=bf0ce14ecb2781d40936830fa25067a5c1af691b;hpb=9e8056d5a7b6b366874088cd30d23ba4a52d3861;p=youtube-dl diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index bf0ce14ec..d7e1a91ad 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -23,12 +23,6 @@ __authors__ = ( ) __license__ = 'Public Domain' -__version__ = '2012.11.29' - -UPDATE_URL = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl' -UPDATE_URL_VERSION = 'https://raw.github.com/rg3/youtube-dl/master/LATEST_VERSION' -UPDATE_URL_EXE = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl.exe' - import getpass import optparse @@ -41,34 +35,46 @@ import sys import warnings from .utils import * +from .version import __version__ from .FileDownloader import * from .InfoExtractors import * from .PostProcessor import * def updateSelf(downloader, filename): - ''' Update the program file with the latest version from the repository ''' - # Note: downloader only used for options + """Update the program file with the latest version from the repository""" - if not os.access(filename, os.W_OK): - sys.exit('ERROR: no write permissions on %s' % filename) + # TODO: at least, check https certificates - downloader.to_screen(u'Updating to latest version...') + from zipimport import zipimporter - urlv = compat_urllib_request.urlopen(UPDATE_URL_VERSION) - newversion = urlv.read().strip() - if newversion == __version__: - downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')') - return - urlv.close() + API_URL = "https://api.github.com/repos/rg3/youtube-dl/downloads" + BIN_URL = "https://github.com/downloads/rg3/youtube-dl/youtube-dl" + EXE_URL = "https://github.com/downloads/rg3/youtube-dl/youtube-dl.exe" + + if hasattr(sys, "frozen"): # PY2EXE + if not os.access(filename, os.W_OK): + sys.exit('ERROR: no write permissions on %s' % filename) + + downloader.to_screen(u'Updating to latest version...') + + urla = compat_urllib_request.urlopen(API_URL) + download = filter(lambda x: x["name"] == "youtube-dl.exe", json.loads(urla.read())) + if not download: + downloader.to_screen(u'ERROR: can\'t find the current version. Please try again later.') + return + newversion = download[0]["description"].strip() + if newversion == __version__: + downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')') + return + urla.close() - if hasattr(sys, "frozen"): #py2exe exe = os.path.abspath(filename) directory = os.path.dirname(exe) if not os.access(directory, os.W_OK): sys.exit('ERROR: no write permissions on %s' % directory) try: - urlh = compat_urllib_request.urlopen(UPDATE_URL_EXE) + urlh = compat_urllib_request.urlopen(EXE_URL) newcontent = urlh.read() urlh.close() with open(exe + '.new', 'wb') as outf: @@ -91,9 +97,25 @@ del "%s" except (IOError, OSError) as err: sys.exit('ERROR: unable to overwrite current version') - else: + elif isinstance(globals().get('__loader__'), zipimporter): # UNIX ZIP + if not os.access(filename, os.W_OK): + sys.exit('ERROR: no write permissions on %s' % filename) + + downloader.to_screen(u'Updating to latest version...') + + urla = compat_urllib_request.urlopen(API_URL) + download = [x for x in json.loads(urla.read().decode('utf8')) if x["name"] == "youtube-dl"] + if not download: + downloader.to_screen(u'ERROR: can\'t find the current version. Please try again later.') + return + newversion = download[0]["description"].strip() + if newversion == __version__: + downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')') + return + urla.close() + try: - urlh = compat_urllib_request.urlopen(UPDATE_URL) + urlh = compat_urllib_request.urlopen(BIN_URL) newcontent = urlh.read() urlh.close() except (IOError, OSError) as err: @@ -105,6 +127,10 @@ del "%s" except (IOError, OSError) as err: sys.exit('ERROR: unable to overwrite current version') + else: + downloader.to_screen(u'It looks like you installed youtube-dl with pip or setup.py. Please use that to update.') + return + downloader.to_screen(u'Updated youtube-dl. Restart youtube-dl to use the new version.') def parseOpts(): @@ -203,6 +229,7 @@ def parseOpts(): general.add_option('--list-extractors', action='store_true', dest='list_extractors', help='List all supported extractors and the URLs they would handle', default=False) + general.add_option('--test', action='store_true', dest='test', default=False, help=optparse.SUPPRESS_HELP) selection.add_option('--playlist-start', dest='playliststart', metavar='NUMBER', help='playlist video to start at (default is %default)', default=1) @@ -279,7 +306,7 @@ def parseOpts(): action='store_true', dest='autonumber', help='number downloaded files starting from 00000', default=False) filesystem.add_option('-o', '--output', - dest='outtmpl', metavar='TEMPLATE', help='output filename template. Use %(title)s to get the title, %(uploader)s for the uploader name, %(autonumber)s to get an automatically incremented number, %(ext)s for the filename extension, %(upload_date)s for the upload date (YYYYMMDD), %(extractor)s for the provider (youtube, metacafe, etc), %(id)s for the video id and %% for a literal percent. Use - to output to stdout.') + dest='outtmpl', metavar='TEMPLATE', help='output filename template. Use %(title)s to get the title, %(uploader)s for the uploader name, %(autonumber)s to get an automatically incremented number, %(ext)s for the filename extension, %(upload_date)s for the upload date (YYYYMMDD), %(extractor)s for the provider (youtube, metacafe, etc), %(id)s for the video id and %% for a literal percent. Use - to output to stdout. Can also be used to download to a different directory, for example with -o \'/my/downloads/%(uploader)s/%(title)s-%(id)s.%(ext)s\' .') filesystem.add_option('--restrict-filenames', action='store_true', dest='restrictfilenames', help='Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames', default=False) @@ -423,7 +450,7 @@ def _real_main(): if opts.list_extractors: for ie in extractors: - print(ie.IE_NAME) + print(ie.IE_NAME + (' (CURRENTLY BROKEN)' if not ie._WORKING else '')) matchedUrls = filter(lambda url: ie.suitable(url), all_urls) all_urls = filter(lambda url: url not in matchedUrls, all_urls) for mu in matchedUrls: @@ -525,6 +552,7 @@ def _real_main(): 'max_downloads': opts.max_downloads, 'prefer_free_formats': opts.prefer_free_formats, 'verbose': opts.verbose, + 'test': opts.test, }) if opts.verbose: