39
40
from StringIO import StringIO # NOQA
43
import openerp.exceptions
42
44
from openerp import modules, pooler, tools, addons
43
45
from openerp.modules.db import create_categories
44
46
from openerp.tools.parse_version import parse_version
621
623
def download(self, cr, uid, ids, download=True, context=None):
623
default_version = modules.adapt_version('1.0')
624
for mod in self.browse(cr, uid, ids, context=context):
627
match = re.search('-([a-zA-Z0-9\._-]+)(\.zip)', mod.url, re.I)
628
version = default_version
630
version = match.group(1)
631
if parse_version(mod.installed_version) >= parse_version(version):
636
zip_content = urllib.urlopen(mod.url).read()
637
fname = modules.get_module_path(str(mod.name) + '.zip', downloaded=True)
639
with open(fname, 'wb') as fp:
640
fp.write(zip_content)
642
_logger.exception('Error when trying to create module '
644
raise orm.except_orm(_('Error'), _('Can not create the module file:\n %s') % (fname,))
645
terp = self.get_module_info(mod.name)
646
self.write(cr, uid, mod.id, self.get_values_from_terp(terp))
647
cr.execute('DELETE FROM ir_module_module_dependency WHERE module_id = %s', (mod.id,))
648
self._update_dependencies(cr, uid, mod, terp.get('depends', []))
649
self._update_category(cr, uid, mod, terp.get('category', 'Uncategorized'))
651
zimp = zipimport.zipimporter(fname)
652
zimp.load_module(mod.name)
655
626
def install_from_urls(self, cr, uid, urls, context=None):
627
if not self.pool['res.users'].has_group(cr, uid, 'base.group_system'):
628
raise openerp.exceptions.AccessDenied()
630
apps_server = urlparse.urlparse(self.get_apps_server(cr, uid, context=context))
656
632
OPENERP = 'openerp'
657
633
tmp = tempfile.mkdtemp()
658
634
_logger.debug('Install from url: %r', urls)
661
637
for module_name, url in urls.items():
663
639
continue # nothing to download, local version is already the last one
641
up = urlparse.urlparse(url)
642
if up.scheme != apps_server.scheme or up.netloc != apps_server.netloc:
643
raise openerp.exceptions.AccessDenied()
665
646
_logger.info('Downloading module `%s` from OpenERP Apps', module_name)
666
647
content = urllib2.urlopen(url).read()
726
707
shutil.rmtree(tmp)
728
def install_by_names(self, cr, uid, names, context=None):
729
raise NotImplementedError('# TODO')
709
def get_apps_server(self, cr, uid, context=None):
710
return tools.config.get('apps_server', 'https://apps.openerp.com/apps')
731
712
def _update_dependencies(self, cr, uid, mod_browse, depends=None):
732
713
if depends is None: