[IMP] home controller
bzr revid: chs@openerp.com-20120808114110-b7x8b3e4pfn20ie5
This commit is contained in:
parent
d34fec4471
commit
1d75045294
|
@ -455,7 +455,6 @@ class Root(object):
|
||||||
by the server, will be filtered by this pattern
|
by the server, will be filtered by this pattern
|
||||||
"""
|
"""
|
||||||
def __init__(self, options, openerp_addons_namespace=True):
|
def __init__(self, options, openerp_addons_namespace=True):
|
||||||
self.root = '/web/webclient/home'
|
|
||||||
self.config = options
|
self.config = options
|
||||||
|
|
||||||
if not hasattr(self.config, 'connector'):
|
if not hasattr(self.config, 'connector'):
|
||||||
|
@ -495,11 +494,7 @@ class Root(object):
|
||||||
request.parameter_storage_class = werkzeug.datastructures.ImmutableDict
|
request.parameter_storage_class = werkzeug.datastructures.ImmutableDict
|
||||||
request.app = self
|
request.app = self
|
||||||
|
|
||||||
if request.path == '/':
|
if request.path == '/mobile': # FIXME move to web_mobile module
|
||||||
params = urllib.urlencode(request.args)
|
|
||||||
return werkzeug.utils.redirect(self.root + '?' + params, 301)(
|
|
||||||
environ, start_response)
|
|
||||||
elif request.path == '/mobile':
|
|
||||||
return werkzeug.utils.redirect(
|
return werkzeug.utils.redirect(
|
||||||
'/web_mobile/static/src/web_mobile.html', 301)(environ, start_response)
|
'/web_mobile/static/src/web_mobile.html', 301)(environ, start_response)
|
||||||
|
|
||||||
|
|
|
@ -163,16 +163,13 @@ def sass2scss(src):
|
||||||
return out
|
return out
|
||||||
return write(sass)
|
return write(sass)
|
||||||
|
|
||||||
class WebClient(openerpweb.Controller):
|
def server_wide_modules(req):
|
||||||
_cp_path = "/web/webclient"
|
|
||||||
|
|
||||||
def server_wide_modules(self, req):
|
|
||||||
addons = [i for i in req.config.server_wide_modules if i in openerpweb.addons_manifest]
|
addons = [i for i in req.config.server_wide_modules if i in openerpweb.addons_manifest]
|
||||||
return addons
|
return addons
|
||||||
|
|
||||||
def manifest_glob(self, req, addons, key):
|
def manifest_glob(req, addons, key):
|
||||||
if addons is None:
|
if addons is None:
|
||||||
addons = self.server_wide_modules(req)
|
addons = server_wide_modules(req)
|
||||||
else:
|
else:
|
||||||
addons = addons.split(',')
|
addons = addons.split(',')
|
||||||
r = []
|
r = []
|
||||||
|
@ -188,32 +185,21 @@ class WebClient(openerpweb.Controller):
|
||||||
r.append((path, path[len(addons_path):]))
|
r.append((path, path[len(addons_path):]))
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def manifest_list(self, req, mods, extension):
|
def manifest_list(req, mods, extension):
|
||||||
if not req.debug:
|
if not req.debug:
|
||||||
path = '/web/webclient/' + extension
|
path = '/web/webclient/' + extension
|
||||||
if mods is not None:
|
if mods is not None:
|
||||||
path += '?mods=' + mods
|
path += '?mods=' + mods
|
||||||
return [path]
|
return [path]
|
||||||
no_sugar = req.httprequest.environ["QUERY_STRING"].count("no_sugar") >= 1
|
files = manifest_glob(req, mods, extension)
|
||||||
no_sugar = no_sugar or req.httprequest.environ.get('HTTP_REFERER', '').count("no_sugar") >= 1
|
i_am_diabetic = req.httprequest.environ["QUERY_STRING"].count("no_sugar") >= 1 or \
|
||||||
if not no_sugar:
|
req.httprequest.environ.get('HTTP_REFERER', '').count("no_sugar") >= 1
|
||||||
return ['%s?debug=%s' % (wp, os.path.getmtime(fp)) for fp, wp in self.manifest_glob(req, mods, extension)]
|
if i_am_diabetic:
|
||||||
|
return [wp for _fp, wp in files]
|
||||||
else:
|
else:
|
||||||
return [el[1] for el in self.manifest_glob(req, mods, extension)]
|
return ['%s?debug=%s' % (wp, os.path.getmtime(fp)) for fp, wp in files]
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
def get_last_modified(files):
|
||||||
def csslist(self, req, mods=None):
|
|
||||||
return self.manifest_list(req, mods, 'css')
|
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
|
||||||
def jslist(self, req, mods=None):
|
|
||||||
return self.manifest_list(req, mods, 'js')
|
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
|
||||||
def qweblist(self, req, mods=None):
|
|
||||||
return self.manifest_list(req, mods, 'qweb')
|
|
||||||
|
|
||||||
def get_last_modified(self, files):
|
|
||||||
""" Returns the modification time of the most recently modified
|
""" Returns the modification time of the most recently modified
|
||||||
file provided
|
file provided
|
||||||
|
|
||||||
|
@ -227,7 +213,7 @@ class WebClient(openerpweb.Controller):
|
||||||
for f in files)
|
for f in files)
|
||||||
return datetime.datetime(1970, 1, 1)
|
return datetime.datetime(1970, 1, 1)
|
||||||
|
|
||||||
def make_conditional(self, req, response, last_modified=None, etag=None):
|
def make_conditional(req, response, last_modified=None, etag=None):
|
||||||
""" Makes the provided response conditional based upon the request,
|
""" Makes the provided response conditional based upon the request,
|
||||||
and mandates revalidation from clients
|
and mandates revalidation from clients
|
||||||
|
|
||||||
|
@ -251,10 +237,52 @@ class WebClient(openerpweb.Controller):
|
||||||
response.set_etag(etag)
|
response.set_etag(etag)
|
||||||
return response.make_conditional(req.httprequest)
|
return response.make_conditional(req.httprequest)
|
||||||
|
|
||||||
|
class Home(openerpweb.Controller):
|
||||||
|
_cp_path = '/'
|
||||||
|
|
||||||
|
@openerpweb.httprequest
|
||||||
|
def index(self, req, s_action=None, **kw):
|
||||||
|
js = "\n ".join('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list(req, None, 'js'))
|
||||||
|
css = "\n ".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list(req, None, 'css'))
|
||||||
|
|
||||||
|
r = html_template % {
|
||||||
|
'js': js,
|
||||||
|
'css': css,
|
||||||
|
'modules': simplejson.dumps(server_wide_modules(req)),
|
||||||
|
'init': 'var wc = new s.web.WebClient();wc.appendTo($(document.body));'
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
|
||||||
|
@openerpweb.httprequest
|
||||||
|
def login(self, req, db, login, key):
|
||||||
|
return self._login(req, db, login, key)
|
||||||
|
|
||||||
|
def _login(self, req, db, login, key, redirect_url='/'):
|
||||||
|
req.session.authenticate(db, login, key, {})
|
||||||
|
redirect = werkzeug.utils.redirect(redirect_url, 303)
|
||||||
|
cookie_val = urllib2.quote(simplejson.dumps(req.session_id))
|
||||||
|
redirect.set_cookie('instance0|session_id', cookie_val)
|
||||||
|
return redirect
|
||||||
|
|
||||||
|
class WebClient(openerpweb.Controller):
|
||||||
|
_cp_path = "/web/webclient"
|
||||||
|
|
||||||
|
@openerpweb.jsonrequest
|
||||||
|
def csslist(self, req, mods=None):
|
||||||
|
return manifest_list(req, mods, 'css')
|
||||||
|
|
||||||
|
@openerpweb.jsonrequest
|
||||||
|
def jslist(self, req, mods=None):
|
||||||
|
return manifest_list(req, mods, 'js')
|
||||||
|
|
||||||
|
@openerpweb.jsonrequest
|
||||||
|
def qweblist(self, req, mods=None):
|
||||||
|
return manifest_list(req, mods, 'qweb')
|
||||||
|
|
||||||
@openerpweb.httprequest
|
@openerpweb.httprequest
|
||||||
def css(self, req, mods=None):
|
def css(self, req, mods=None):
|
||||||
files = list(self.manifest_glob(req, mods, 'css'))
|
files = list(manifest_glob(req, mods, 'css'))
|
||||||
last_modified = self.get_last_modified(f[0] for f in files)
|
last_modified = get_last_modified(f[0] for f in files)
|
||||||
if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
|
if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
|
||||||
return werkzeug.wrappers.Response(status=304)
|
return werkzeug.wrappers.Response(status=304)
|
||||||
|
|
||||||
|
@ -287,57 +315,36 @@ class WebClient(openerpweb.Controller):
|
||||||
|
|
||||||
content, checksum = concat_files((f[0] for f in files), reader)
|
content, checksum = concat_files((f[0] for f in files), reader)
|
||||||
|
|
||||||
return self.make_conditional(
|
return make_conditional(
|
||||||
req, req.make_response(content, [('Content-Type', 'text/css')]),
|
req, req.make_response(content, [('Content-Type', 'text/css')]),
|
||||||
last_modified, checksum)
|
last_modified, checksum)
|
||||||
|
|
||||||
@openerpweb.httprequest
|
@openerpweb.httprequest
|
||||||
def js(self, req, mods=None):
|
def js(self, req, mods=None):
|
||||||
files = [f[0] for f in self.manifest_glob(req, mods, 'js')]
|
files = [f[0] for f in manifest_glob(req, mods, 'js')]
|
||||||
last_modified = self.get_last_modified(files)
|
last_modified = get_last_modified(files)
|
||||||
if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
|
if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
|
||||||
return werkzeug.wrappers.Response(status=304)
|
return werkzeug.wrappers.Response(status=304)
|
||||||
|
|
||||||
content, checksum = concat_files(files, intersperse=';')
|
content, checksum = concat_files(files, intersperse=';')
|
||||||
|
|
||||||
return self.make_conditional(
|
return make_conditional(
|
||||||
req, req.make_response(content, [('Content-Type', 'application/javascript')]),
|
req, req.make_response(content, [('Content-Type', 'application/javascript')]),
|
||||||
last_modified, checksum)
|
last_modified, checksum)
|
||||||
|
|
||||||
@openerpweb.httprequest
|
@openerpweb.httprequest
|
||||||
def qweb(self, req, mods=None):
|
def qweb(self, req, mods=None):
|
||||||
files = [f[0] for f in self.manifest_glob(req, mods, 'qweb')]
|
files = [f[0] for f in manifest_glob(req, mods, 'qweb')]
|
||||||
last_modified = self.get_last_modified(files)
|
last_modified = get_last_modified(files)
|
||||||
if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
|
if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
|
||||||
return werkzeug.wrappers.Response(status=304)
|
return werkzeug.wrappers.Response(status=304)
|
||||||
|
|
||||||
content, checksum = concat_xml(files)
|
content, checksum = concat_xml(files)
|
||||||
|
|
||||||
return self.make_conditional(
|
return make_conditional(
|
||||||
req, req.make_response(content, [('Content-Type', 'text/xml')]),
|
req, req.make_response(content, [('Content-Type', 'text/xml')]),
|
||||||
last_modified, checksum)
|
last_modified, checksum)
|
||||||
|
|
||||||
@openerpweb.httprequest
|
|
||||||
def home(self, req, s_action=None, **kw):
|
|
||||||
js = "\n ".join('<script type="text/javascript" src="%s"></script>'%i for i in self.manifest_list(req, None, 'js'))
|
|
||||||
css = "\n ".join('<link rel="stylesheet" href="%s">'%i for i in self.manifest_list(req, None, 'css'))
|
|
||||||
|
|
||||||
r = html_template % {
|
|
||||||
'js': js,
|
|
||||||
'css': css,
|
|
||||||
'modules': simplejson.dumps(self.server_wide_modules(req)),
|
|
||||||
'init': 'var wc = new s.web.WebClient();wc.appendTo($(document.body));'
|
|
||||||
}
|
|
||||||
return r
|
|
||||||
|
|
||||||
@openerpweb.httprequest
|
|
||||||
def login(self, req, db, login, key):
|
|
||||||
req.session.authenticate(db, login, key, {})
|
|
||||||
redirect = werkzeug.utils.redirect('/web/webclient/home', 303)
|
|
||||||
cookie_val = urllib2.quote(simplejson.dumps(req.session_id))
|
|
||||||
redirect.set_cookie('instance0|session_id', cookie_val)
|
|
||||||
return redirect
|
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
@openerpweb.jsonrequest
|
||||||
def translations(self, req, mods, lang):
|
def translations(self, req, mods, lang):
|
||||||
lang_model = req.session.model('res.lang')
|
lang_model = req.session.model('res.lang')
|
||||||
|
|
Loading…
Reference in New Issue