diff --git a/addons/pad/pad.py b/addons/pad/pad.py index 3431e196b59..6f6b435cf3c 100644 --- a/addons/pad/pad.py +++ b/addons/pad/pad.py @@ -1,42 +1,62 @@ # -*- coding: utf-8 -*- from osv import fields, osv import random +import re import string import urllib2 from tools.translate import _ class pad_common(osv.osv_memory): _name = 'pad.common' - _pad_fields = [] - - def pad_content(self, cr, uid, url ,context=None): - content = urllib2.urlopen('%s/export/html'%url).read() - return content def pad_generate_url(self, cr, uid, context=None): - pad_url_template = self.pool.get('res.users').browse(cr,uid, uid, context).company_id.pad_url_template + pad_server = self.pool.get('res.users').browse(cr, uid, uid, context).company_id.pad_server + # make sure pad server in the form of http://hostname + if not pad_server.startswith('http'): + pad_server = 'http://' + pad_server + pad_server = pad_server.rstrip('/') + # generate a salt s = string.ascii_uppercase + string.digits - salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(8)]) - template_vars = { - 'db' : cr.dbname, - 'model' : self._name, - 'salt' : salt, - } - url = pad_url_template % template_vars + salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(10)]) + # contruct the url + url = '%s/p/%s-%s-%s' % (pad_server, cr.dbname, self._name, salt) return url + def pad_get_content(self, cr, uid, url, context=None): + content = '' + if url: + page = urllib2.urlopen('%s/export/html'%url).read() + mo = re.search('
(.*)',page) + if mo: + content = mo.group(1) + return content + # TODO - # add attribute on columns pad_content_field = - # override default write to load the content at write and store it in the field # reverse engineer protocol to be setHtml without using the api key - # override default get to generate urls - # override read to generate url and store the content if empty + # override read and copy to generate url and store the content if empty + + def default_get(self, cr, uid, fields, context=None): + data = super(pad_common, self).default_get(cr, uid, fields, context) + for k in fields: + field = self._all_columns[k].column + if hasattr(field,'pad_content_field'): + data[k] = self.pad_generate_url(cr, uid, context=context) + return data + + def write(self, cr, uid, ids, vals, context=None): + for k,v in vals.items(): + field = self._all_columns[k].column + if hasattr(field,'pad_content_field'): + vals[field.pad_content_field] = self.pad_get_content(cr, uid, v, context=context) + return super(pad_common, self).write(cr, uid, ids, vals, context=context) def copy(self, cr, uid, id, default=None, context=None): if not default: default = {} - update = [(field,self.pad_generate_url(cr, uid, context)) for field in self._pad_fields] - default.update(update) + for k,v in self._all_columns: + field = v.column + if hasattr(field,'pad_content_field'): + default[k] = self.pad_generate_url(cr, uid, context) return super(pad_common, self).copy(cr, uid, id, default, context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/pad/res_company.py b/addons/pad/res_company.py index 703e655219b..fcf8bc97e91 100644 --- a/addons/pad/res_company.py +++ b/addons/pad/res_company.py @@ -1,16 +1,11 @@ # -*- coding: utf-8 -*- from osv import fields, osv -DEFAULT_PAD_TEMPLATE = 'http://pad.openerp.com/p/%(db)s-%(model)s-%(salt)s' -DEFAULT_PAD_TEMPLATE = '' - class company_pad(osv.osv): _inherit = 'res.company' _columns = { - 'pad_url_template': fields.char('Pad URL Template', size=128, required=True, help="Template used to generate pad URL."), - } - _defaults = { - 'pad_url_template': DEFAULT_PAD_TEMPLATE, + 'pad_server': fields.char('Pad Server', help="Etherpad lite server. Example: beta.primarypad.com"), + 'pad_key': fields.char('Pad Api Key', help="Etherpad lite api key."), } diff --git a/addons/pad/res_company.xml b/addons/pad/res_company.xml index 017561aaec3..5a9164db2f4 100644 --- a/addons/pad/res_company.xml +++ b/addons/pad/res_company.xml @@ -7,7 +7,8 @@- http://pad.openerp.com/p/%(db)s-%(model)s-%(salt)s -+ OpenERP Entreprise customers may safely use pad.openerp.com