little improvements

This commit is contained in:
Romain Bignon 2012-01-30 15:25:49 +01:00
commit 97ef1f4e8c

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright(C) 2010-2012 Romain Bignon # Copyright(C) 2010-2012 Romain Bignon, Laurent Bachelier
# #
# This file is part of weboob. # This file is part of weboob.
# #
@ -561,55 +561,57 @@ class Repositories(object):
else: else:
raise ValueError('"module" parameter might be a ModuleInfo object or a string, not %r' % module) raise ValueError('"module" parameter might be a ModuleInfo object or a string, not %r' % module)
if info.is_local(): module = info
raise ModuleInstallError('%s is available on local.' % info.name)
module_dir = os.path.join(self.modules_dir, info.name) if module.is_local():
installed = self.versions.get(info.name) raise ModuleInstallError('%s is available on local.' % module.name)
module_dir = os.path.join(self.modules_dir, module.name)
installed = self.versions.get(module.name)
if installed is None or not os.path.exists(module_dir): if installed is None or not os.path.exists(module_dir):
progress.progress(0.3, 'Module is not installed yet') progress.progress(0.3, 'Module is not installed yet')
elif info.version > installed: elif module.version > installed:
progress.progress(0.3, 'A new version of this module is available') progress.progress(0.3, 'A new version of this module is available')
else: else:
raise ModuleInstallError('The last version of %s is already installed' % info.name) raise ModuleInstallError('The last version of %s is already installed' % module.name)
browser = StandardBrowser() browser = StandardBrowser()
progress.progress(0.2, 'Downloading module...') progress.progress(0.2, 'Downloading module...')
try: try:
fp = browser.openurl(info.url) fp = browser.openurl(module.url)
except BrowserUnavailable, e: except BrowserUnavailable, e:
raise ModuleInstallError('Unable to fetch module: %s' % e) raise ModuleInstallError('Unable to fetch module: %s' % e)
tardata = fp.read() tardata = fp.read()
# Extract module from tarball.
if os.path.isdir(module_dir): if os.path.isdir(module_dir):
shutil.rmtree(module_dir) shutil.rmtree(module_dir)
if info.signed and Keyring.find_gpgv(): if module.signed and Keyring.find_gpgv():
progress.progress(0.5, 'Checking module authenticity...') progress.progress(0.5, 'Checking module authenticity...')
fpsig = browser.openurl(posixpath.join(info.url + '.sig')) fpsig = browser.openurl(posixpath.join(module.url + '.sig'))
keyring_path = os.path.join(self.keyrings_dir, self.url2filename(info.repo_url)) keyring_path = os.path.join(self.keyrings_dir, self.url2filename(module.repo_url))
keyring = Keyring(keyring_path) keyring = Keyring(keyring_path)
if not keyring.exists(): if not keyring.exists():
raise ModuleInstallError('No keyring found, please update repos.') raise ModuleInstallError('No keyring found, please update repos.')
if not keyring.is_valid(tardata, fpsig.read()): if not keyring.is_valid(tardata, fpsig.read()):
raise ModuleInstallError('Invalid signature for %s.' % info.name) raise ModuleInstallError('Invalid signature for %s.' % module.name)
# Extract module from tarball.
progress.progress(0.7, 'Setting up module...') progress.progress(0.7, 'Setting up module...')
with closing(tarfile.open('', 'r:gz', StringIO(tardata))) as tar: with closing(tarfile.open('', 'r:gz', StringIO(tardata))) as tar:
tar.extractall(self.modules_dir) tar.extractall(self.modules_dir)
if not os.path.isdir(module_dir): if not os.path.isdir(module_dir):
raise ModuleInstallError('The archive for %s looks invalid.' % info.name) raise ModuleInstallError('The archive for %s looks invalid.' % module.name)
# Precompile # Precompile
compile_dir(module_dir, quiet=True) compile_dir(module_dir, quiet=True)
self.versions.set(info.name, info.version) self.versions.set(module.name, module.version)
progress.progress(0.9, 'Downloading icon...') progress.progress(0.9, 'Downloading icon...')
self.retrieve_icon(info) self.retrieve_icon(module)
progress.progress(1.0, 'Module %s has been installed!' % info.name) progress.progress(1.0, 'Module %s has been installed!' % module.name)
@staticmethod @staticmethod
def url2filename(url): def url2filename(url):