summaryrefslogtreecommitdiff
path: root/bin/addons/base/module/module.py
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2010-09-28 09:52:57 +0200
committerXavier Morel <xmo@openerp.com>2010-09-28 09:52:57 +0200
commitc153c2d46b8a75b823a63981b5963ef1fb5adb3c (patch)
treed4ceeb424fbe63f2fcc089a27ab08ec86bfbbccf /bin/addons/base/module/module.py
parent3eac92fc4a15892bced13c48bd16d31f8e479764 (diff)
[ADD] server-side web addons
bzr revid: xmo@openerp.com-20100928075257-06f2b3o6kvdb9f6y
Diffstat (limited to 'bin/addons/base/module/module.py')
-rw-r--r--bin/addons/base/module/module.py38
1 files changed, 36 insertions, 2 deletions
diff --git a/bin/addons/base/module/module.py b/bin/addons/base/module/module.py
index 7eeb3abf758..55a5c867264 100644
--- a/bin/addons/base/module/module.py
+++ b/bin/addons/base/module/module.py
@@ -173,12 +173,14 @@ class module(osv.osv):
'reports_by_module': fields.function(_get_views, method=True, string='Reports', type='text', multi="meta", store=True),
'views_by_module': fields.function(_get_views, method=True, string='Views', type='text', multi="meta", store=True),
'certificate' : fields.char('Quality Certificate', size=64, readonly=True),
+ 'web': fields.boolean('Has a web component', readonly=True),
}
_defaults = {
'state': lambda *a: 'uninstalled',
'demo': lambda *a: False,
'license': lambda *a: 'AGPL-3',
+ 'web': False,
}
_order = 'name'
@@ -332,6 +334,7 @@ class module(osv.osv):
'website': terp.get('website', ''),
'license': terp.get('license', 'GPL-2'),
'certificate': terp.get('certificate') or None,
+ 'web': terp.get('web') or False,
}
# update the list of available packages
@@ -470,6 +473,39 @@ class module(osv.osv):
logger.critical('module %s: invalid quality certificate: %s', mod.name, mod.certificate)
raise osv.except_osv(_('Error'), _('Module %s: Invalid Quality Certificate') % (mod.name,))
+ def list_web(self, cr, uid, context=False):
+ """ list_web(cr, uid, context) -> [module_name]
+ Lists all the currently installed modules with a web component.
+
+ Returns a list of addon names.
+ """
+ return [
+ module['name']
+ for module in self.browse(cr, uid,
+ self.search(cr, uid,
+ [('web', '=', True),
+ ('state', 'in', ['installed','to upgrade','to remove'])],
+ context=context),
+ context=context)]
+ def get_web(self, cr, uid, names, context=False):
+ """ get_web(cr, uid, [module_name], context) -> [{name, depends, content}]
+
+ Returns the web content of all the named addons.
+
+ The toplevel directory of the zipped content is called 'web',
+ its final naming has to be managed by the client
+ """
+ modules = self.browse(cr, uid,
+ self.search(cr, uid, [('name', 'in', names)], context=context),
+ context=context)
+ return [
+ {'name': module.name,
+ 'depends': [dep.name for dep in module.dependencies_id],
+ 'content': addons.zip_directory(
+ addons.get_module_resource(module.name, 'web'))}
+ for module in modules
+ ]
+
module()
class module_dependency(osv.osv):
@@ -501,5 +537,3 @@ class module_dependency(osv.osv):
], string='State', readonly=True, select=True),
}
module_dependency()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-