1 # -*- coding: utf-8 -*-
2 from openerp.osv import fields, osv
8 from openerp.tools.translate import _
9 from openerp.tools import html2plaintext
10 from py_etherpad import EtherpadLiteClient
12 _logger = logging.getLogger(__name__)
14 class pad_common(osv.osv_memory):
17 def pad_generate_url(self, cr, uid, context=None):
18 company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id;
21 "server" : company.pad_server,
22 "key" : company.pad_key,
25 # make sure pad server in the form of http://hostname
28 if not pad["server"].startswith('http'):
29 pad["server"] = 'http://' + pad["server"]
30 pad["server"] = pad["server"].rstrip('/')
32 s = string.ascii_uppercase + string.digits
33 salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(10)])
35 path = '%s-%s-%s' % (cr.dbname.replace('_','-'), self._name, salt)
37 url = '%s/p/%s' % (pad["server"], path)
39 #if create with content
40 if "field_name" in context and "model" in context and "object_id" in context:
41 myPad = EtherpadLiteClient( pad["key"], pad["server"]+'/api')
44 #get attr on the field model
45 model = self.pool[context["model"]]
46 field = model._all_columns[context['field_name']]
47 real_field = field.column.pad_content_field
49 #get content of the real field
50 for record in model.browse(cr, uid, [context["object_id"]]):
51 if record[real_field]:
52 myPad.setText(path, html2plaintext(record[real_field]))
53 #Etherpad for html not functional
54 #myPad.setHTML(path, record[real_field])
57 "server": pad["server"],
62 def pad_get_content(self, cr, uid, url, context=None):
66 page = urllib2.urlopen('%s/export/html'%url).read()
67 mo = re.search('<body>(.*)</body>',page)
71 _logger.warning("No url found '%s'.", url)
75 # reverse engineer protocol to be setHtml without using the api key
77 def write(self, cr, uid, ids, vals, context=None):
78 self._set_pad_value(cr, uid, vals, context)
79 return super(pad_common, self).write(cr, uid, ids, vals, context=context)
81 def create(self, cr, uid, vals, context=None):
82 self._set_pad_value(cr, uid, vals, context)
83 return super(pad_common, self).create(cr, uid, vals, context=context)
85 # Set the pad content in vals
86 def _set_pad_value(self, cr, uid, vals, context=None):
87 for k,v in vals.items():
88 field = self._all_columns[k].column
89 if hasattr(field,'pad_content_field'):
90 vals[field.pad_content_field] = self.pad_get_content(cr, uid, v, context=context)
92 def copy(self, cr, uid, id, default=None, context=None):
95 for k, v in self._all_columns.iteritems():
97 if hasattr(field,'pad_content_field'):
98 pad = self.pad_generate_url(cr, uid, context)
99 default[k] = pad.get('url')
100 return super(pad_common, self).copy(cr, uid, id, default, context)
102 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: