summaryrefslogtreecommitdiff
path: root/addons/pad/models
diff options
context:
space:
mode:
authorJigar Patel <jat@openerp.com>2016-05-23 15:32:24 +0530
committerYannick Tivisse <yti@odoo.com>2016-07-05 14:37:05 +0200
commitd5752d814e93580e02057acbc06bba65dbbd2695 (patch)
treedb19298ff640eea82bd58f8bc2cf6364ca528a49 /addons/pad/models
parent7e72de3f2e8473539cf6290bcbcb955ccd10e8b0 (diff)
[MOV] pad: Re-organized file structure
Diffstat (limited to 'addons/pad/models')
-rw-r--r--addons/pad/models/__init__.py5
-rw-r--r--addons/pad/models/pad.py110
-rw-r--r--addons/pad/models/res_company.py9
3 files changed, 124 insertions, 0 deletions
diff --git a/addons/pad/models/__init__.py b/addons/pad/models/__init__.py
new file mode 100644
index 00000000000..53c307d5e75
--- /dev/null
+++ b/addons/pad/models/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import pad
+import res_company
diff --git a/addons/pad/models/pad.py b/addons/pad/models/pad.py
new file mode 100644
index 00000000000..80191a2e5cc
--- /dev/null
+++ b/addons/pad/models/pad.py
@@ -0,0 +1,110 @@
+# -*- coding: utf-8 -*-
+import random
+import re
+import string
+import urllib2
+import logging
+
+from openerp import models, SUPERUSER_ID
+from openerp.tools.translate import _
+from openerp.tools import html2plaintext
+from ..py_etherpad import EtherpadLiteClient
+from openerp.exceptions import UserError
+
+_logger = logging.getLogger(__name__)
+
+class pad_common(models.AbstractModel):
+ _name = 'pad.common'
+
+ def pad_is_configured(self, cr, uid, context=None):
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ return bool(user.company_id.pad_server)
+
+ def pad_generate_url(self, cr, uid, context=None):
+ company = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context).company_id
+
+ pad = {
+ "server" : company.pad_server,
+ "key" : company.pad_key,
+ }
+
+ # make sure pad server in the form of http://hostname
+ if not pad["server"]:
+ return pad
+ 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.SystemRandom().randint(0, len(s) - 1)] for i in range(10)])
+ #path
+ # etherpad hardcodes pad id length limit to 50
+ path = '-%s-%s' % (self._name, salt)
+ path = '%s%s' % (cr.dbname.replace('_','-')[0:50 - len(path)], path)
+ # contruct the url
+ url = '%s/p/%s' % (pad["server"], path)
+
+ #if create with content
+ if "field_name" in context and "model" in context and "object_id" in context:
+ myPad = EtherpadLiteClient( pad["key"], pad["server"]+'/api')
+ try:
+ myPad.createPad(path)
+ except urllib2.URLError:
+ raise UserError(_("Pad creation failed, either there is a problem with your pad server URL or with your connection."))
+
+ #get attr on the field model
+ model = self.pool[context["model"]]
+ field = model._fields[context['field_name']]
+ real_field = field.pad_content_field
+
+ #get content of the real field
+ for record in model.browse(cr, uid, [context["object_id"]]):
+ if record[real_field]:
+ myPad.setText(path, (html2plaintext(record[real_field]).encode('utf-8')))
+ #Etherpad for html not functional
+ #myPad.setHTML(path, record[real_field])
+
+ return {
+ "server": pad["server"],
+ "path": path,
+ "url": url,
+ }
+
+ def pad_get_content(self, cr, uid, url, context=None):
+ content = ''
+ if url:
+ try:
+ page = urllib2.urlopen('%s/export/html'%url).read()
+ mo = re.search('<body>(.*)</body>',page)
+ if mo:
+ content = mo.group(1)
+ except:
+ _logger.warning("No url found '%s'.", url)
+ return content
+
+ # TODO
+ # reverse engineer protocol to be setHtml without using the api key
+
+ def write(self, cr, uid, ids, vals, context=None):
+ self._set_pad_value(cr, uid, vals, context)
+ return super(pad_common, self).write(cr, uid, ids, vals, context=context)
+
+ def create(self, cr, uid, vals, context=None):
+ self._set_pad_value(cr, uid, vals, context)
+ return super(pad_common, self).create(cr, uid, vals, context=context)
+
+ # Set the pad content in vals
+ def _set_pad_value(self, cr, uid, vals, context=None):
+ for k,v in vals.items():
+ field = self._fields[k]
+ if hasattr(field,'pad_content_field'):
+ vals[field.pad_content_field] = self.pad_get_content(cr, uid, v, context=context)
+
+ def copy(self, cr, uid, id, default=None, context=None):
+ if not default:
+ default = {}
+ for k, field in self._fields.iteritems():
+ if hasattr(field,'pad_content_field'):
+ pad = self.pad_generate_url(cr, uid, context)
+ default[k] = pad.get('url')
+ return super(pad_common, self).copy(cr, uid, id, default, context)
diff --git a/addons/pad/models/res_company.py b/addons/pad/models/res_company.py
new file mode 100644
index 00000000000..3776079e0b0
--- /dev/null
+++ b/addons/pad/models/res_company.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+from openerp.osv import fields, osv
+
+class company_pad(osv.osv):
+ _inherit = 'res.company'
+ _columns = {
+ '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.", groups="base.group_system"),
+ }