[MERGE] Refactorings for new server-side web framework

bzr revid: nicolas.vanhoren@openerp.com-20130621155338-ws85li51lrbkrsmx
This commit is contained in:
niv-openerp 2013-06-21 17:53:38 +02:00
commit 82b26775b6
3 changed files with 49 additions and 52 deletions

View File

@ -23,14 +23,15 @@ import logging
import openerp
from openerp.modules.registry import RegistryManager
from ..res_users import SignupError
import openerp.addons.web.http as http
from openerp.addons.web.http import request
_logger = logging.getLogger(__name__)
class Controller(openerp.addons.web.http.Controller):
_cp_path = '/auth_signup'
class Controller(http.Controller):
@openerp.addons.web.http.jsonrequest
def get_config(self, req, dbname):
@http.route('/auth_signup/get_config', type='json', auth="none")
def get_config(self, dbname):
""" retrieve the module config (which features are enabled) for the login page """
registry = RegistryManager.get(dbname)
with registry.cursor() as cr:
@ -41,8 +42,8 @@ class Controller(openerp.addons.web.http.Controller):
}
return config
@openerp.addons.web.http.jsonrequest
def retrieve(self, req, dbname, token):
@http.route('/auth_signup/retrieve', type='json', auth="user")
def retrieve(self, dbname, token):
""" retrieve the user info (name, login or email) corresponding to a signup token """
registry = RegistryManager.get(dbname)
with registry.cursor() as cr:
@ -50,23 +51,23 @@ class Controller(openerp.addons.web.http.Controller):
user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token)
return user_info
@openerp.addons.web.http.jsonrequest
def signup(self, req, dbname, token, **values):
@http.route('/auth_signup/signup', type='json', auth="user")
def signup(self, dbname, token, **values):
""" sign up a user (new or existing)"""
try:
self._signup_with_values(req, dbname, token, values)
self._signup_with_values(dbname, token, values)
except SignupError, e:
return {'error': openerp.tools.exception_to_unicode(e)}
return {}
def _signup_with_values(self, req, dbname, token, values):
def _signup_with_values(self, dbname, token, values):
registry = RegistryManager.get(dbname)
with registry.cursor() as cr:
res_users = registry.get('res.users')
res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
@openerp.addons.web.http.jsonrequest
def reset_password(self, req, dbname, login):
@http.route('/auth_signup/reset_password', type='json', auth="user")
def reset_password(self, dbname, login):
""" retrieve user, and perform reset password """
registry = RegistryManager.get(dbname)
with registry.cursor() as cr:

View File

@ -22,6 +22,8 @@
import openerp
import openerp.tools.config
import openerp.modules.registry
import openerp.addons.web.http as http
from openerp.addons.web.http import request
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
import datetime
from openerp.osv import osv, fields
@ -90,36 +92,38 @@ POLL_TIMER = 30
DISCONNECTION_TIMER = POLL_TIMER + 5
WATCHER_ERROR_DELAY = 10
class LongPollingController(openerp.addons.web.http.Controller):
_cp_path = '/longpolling/im'
class LongPollingController(http.Controller):
@openerp.addons.web.http.jsonrequest
def poll(self, req, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None):
@http.route('/longpolling/im/poll', type="json", auth="none")
def poll(self, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None):
assert_uuid(uuid)
if not openerp.evented:
raise Exception("Not usable in a server not running gevent")
from openerp.addons.im.watcher import ImWatcher
if db is not None:
req.session._db = db
req.session._uid = uid
req.session._password = password
req.session.model('im.user').im_connect(uuid=uuid, context=req.context)
my_id = req.session.model('im.user').get_by_user_id(uuid or req.session._uid, req.context)["id"]
request.session.authenticate(db=db, uid=uid, password=password)
else:
request.session.authenticate(db=request.session._db, uid=request.session._uid, password=request.session._password)
with request.registry.cursor() as cr:
request.registry.get('im.user').im_connect(cr, request.uid, uuid=uuid, context=request.context)
my_id = request.registry.get('im.user').get_by_user_id(cr, request.uid, uuid or request.session._uid, request.context)["id"]
num = 0
while True:
res = req.session.model('im.message').get_messages(last, users_watch, uuid=uuid, context=req.context)
with request.registry.cursor() as cr:
res = request.registry.get('im.message').get_messages(cr, request.uid, last, users_watch, uuid=uuid, context=request.context)
if num >= 1 or len(res["res"]) > 0:
return res
last = res["last"]
num += 1
ImWatcher.get_watcher(res["dbname"]).stop(my_id, users_watch or [], POLL_TIMER)
@openerp.addons.web.http.jsonrequest
def activated(self, req):
@http.route('/longpolling/im/activated', type="json", auth="none")
def activated(self):
return not not openerp.evented
@openerp.addons.web.http.jsonrequest
def gen_uuid(self, req):
@http.route('/longpolling/im/gen_uuid', type="json", auth="none")
def gen_uuid(self):
import uuid
return "%s" % uuid.uuid1()

View File

@ -26,6 +26,8 @@ import random
import jinja2
from openerp.osv import osv, fields
from openerp import tools
import openerp.addons.web.http as http
from openerp.addons.web.http import request
env = jinja2.Environment(
loader=jinja2.PackageLoader('openerp.addons.im_livechat', "."),
@ -33,48 +35,38 @@ env = jinja2.Environment(
)
env.filters["json"] = json.dumps
class LiveChatController(openerp.addons.web.http.Controller):
_cp_path = '/im_livechat'
class LiveChatController(http.Controller):
@openerp.addons.web.http.httprequest
def loader(self, req, **kwargs):
@http.route('/im_livechat/loader')
def loader(self, **kwargs):
p = json.loads(kwargs["p"])
db = p["db"]
channel = p["channel"]
user_name = p.get("user_name", None)
req.session._db = db
req.session._uid = None
req.session._login = "anonymous"
req.session._password = "anonymous"
info = req.session.model('im_livechat.channel').get_info_for_chat_src(channel)
request.session.authenticate(db=db, login="anonymous", password="anonymous")
info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel)
info["db"] = db
info["channel"] = channel
info["userName"] = user_name
return req.make_response(env.get_template("loader.js").render(info),
return request.make_response(env.get_template("loader.js").render(info),
headers=[('Content-Type', "text/javascript")])
@openerp.addons.web.http.httprequest
def web_page(self, req, **kwargs):
@http.route('/im_livechat/web_page')
def web_page(self, **kwargs):
p = json.loads(kwargs["p"])
db = p["db"]
channel = p["channel"]
req.session._db = db
req.session._uid = None
req.session._login = "anonymous"
req.session._password = "anonymous"
script = req.session.model('im_livechat.channel').read(channel, ["script"])["script"]
info = req.session.model('im_livechat.channel').get_info_for_chat_src(channel)
request.session.authenticate(db=db, login="anonymous", password="anonymous")
script = request.session.model('im_livechat.channel').read(channel, ["script"])["script"]
info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel)
info["script"] = script
return req.make_response(env.get_template("web_page.html").render(info),
return request.make_response(env.get_template("web_page.html").render(info),
headers=[('Content-Type', "text/html")])
@openerp.addons.web.http.jsonrequest
def available(self, req, db, channel):
req.session._db = db
req.session._uid = None
req.session._login = "anonymous"
req.session._password = "anonymous"
return req.session.model('im_livechat.channel').get_available_user(channel) > 0
@http.route('/im_livechat/available', type='json')
def available(self, db, channel):
request.session.authenticate(db=db, login="anonymous", password="anonymous")
return request.session.model('im_livechat.channel').get_available_user(channel) > 0
class im_livechat_channel(osv.osv):
_name = 'im_livechat.channel'