summaryrefslogtreecommitdiff
path: root/addons/base/controllers
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2011-08-22 14:32:58 +0200
committerXavier Morel <xmo@openerp.com>2011-08-22 14:32:58 +0200
commit2fad2d1f80a2162d7523d8ef5d2eee5c4c76ff10 (patch)
treeae3afa6d1d63d4e83aee952307abfab918981876 /addons/base/controllers
parentc76bb492f20f00de2a05b10f7b1c30b1dca57c49 (diff)
parenteebd0ccfd246c4e9a88574100844e606c18b0683 (diff)
[MERGE] from trunk
bzr revid: xmo@openerp.com-20110822123258-thxewwdvbysap4jt
Diffstat (limited to 'addons/base/controllers')
-rw-r--r--addons/base/controllers/main.py101
1 files changed, 48 insertions, 53 deletions
diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py
index 3caa07c6197..d5eaafaecee 100644
--- a/addons/base/controllers/main.py
+++ b/addons/base/controllers/main.py
@@ -67,7 +67,6 @@ def manifest_glob(addons, key):
files = []
for addon in addons:
globlist = openerpweb.addons_manifest.get(addon, {}).get(key, [])
- print globlist
for pattern in globlist:
for path in glob.glob(os.path.join(openerpweb.path_addons, addon, pattern)):
files.append(path[len(openerpweb.path_addons):])
@@ -79,35 +78,36 @@ def concat_files(file_list):
concat: concatenation of file content
timestamp: max(os.path.getmtime of file_list)
"""
- root = openerpweb.path_root
files_content = []
files_timestamp = 0
for i in file_list:
- fname = os.path.join(root, i)
+ fname = os.path.join(openerpweb.path_addons, i[1:])
ftime = os.path.getmtime(fname)
if ftime > files_timestamp:
files_timestamp = ftime
- files_content = open(fname).read()
+ files_content.append(open(fname).read())
files_concat = "".join(files_content)
- return files_concat
+ return (files_concat,files_timestamp)
home_template = textwrap.dedent("""<!DOCTYPE html>
<html style="height: 100%%">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>OpenERP</title>
+ <link rel="shortcut icon" href="/base/static/src/img/favicon.ico" type="image/x-icon"/>
+ %(css)s
+ <!--[if lte IE 7]>
+ <link rel="stylesheet" href="/base/static/src/css/base-ie7.css" type="text/css"/>
+ <![endif]-->
%(javascript)s
<script type="text/javascript">
$(function() {
QWeb = new QWeb2.Engine();
- openerp.init().base.webclient("oe");
+ var c = new openerp.init();
+ var wc = new c.base.WebClient("oe");
+ wc.start();
});
</script>
- <link rel="shortcut icon" href="/base/static/src/img/favicon.ico" type="image/x-icon"/>
- %(css)s
- <!--[if lte IE 7]>
- <link rel="stylesheet" href="/base/static/src/css/base-ie7.css" type="text/css"/>
- <![endif]-->
</head>
<body id="oe" class="openerp"></body>
</html>
@@ -125,31 +125,31 @@ class WebClient(openerpweb.Controller):
@openerpweb.httprequest
def css(self, req, mods='base'):
- cherrypy.response.headers['Content-Type'] = 'text/css'
+ req.httpresponse.headers['Content-Type'] = 'text/css'
files = manifest_glob(mods.split(','), 'css')
- concat = concat_files(files)[0]
+ content,timestamp = concat_files(files)
# TODO request set the Date of last modif and Etag
- return concat
+ return content
@openerpweb.httprequest
def js(self, req, mods='base'):
- cherrypy.response.headers['Content-Type'] = 'application/javascript'
+ req.httpresponse.headers['Content-Type'] = 'application/javascript'
files = manifest_glob(mods.split(','), 'js')
- concat = concat_files(files)[0]
+ content,timestamp = concat_files(files)
# TODO request set the Date of last modif and Etag
- return concat
+ return content
@openerpweb.httprequest
def home(self, req, s_action=None):
# script tags
jslist = ['/base/webclient/js']
- if 1: # debug == 1
+ if req.debug:
jslist = manifest_glob(['base'], 'js')
js = "\n ".join(['<script type="text/javascript" src="%s"></script>'%i for i in jslist])
# css tags
csslist = ['/base/webclient/css']
- if 1: # debug == 1
+ if req.debug:
csslist = manifest_glob(['base'], 'css')
css = "\n ".join(['<link rel="stylesheet" href="%s">'%i for i in csslist])
r = home_template % {
@@ -157,7 +157,7 @@ class WebClient(openerpweb.Controller):
'css': css
}
return r
-
+
@openerpweb.jsonrequest
def translations(self, req, mods, lang):
lang_model = req.session.model('res.lang')
@@ -193,7 +193,6 @@ class WebClient(openerpweb.Controller):
transl["messages"].append({'id': x.id, 'string': x.string})
return {"modules": transs,
"lang_parameters": lang_obj}
-
class Database(openerpweb.Controller):
_cp_path = "/base/database"
@@ -249,16 +248,16 @@ class Database(openerpweb.Controller):
try:
db_dump = base64.decodestring(
req.session.proxy("db").dump(backup_pwd, backup_db))
- cherrypy.response.headers['Content-Type'] = "application/octet-stream; charset=binary"
- cherrypy.response.headers['Content-Disposition'] = 'attachment; filename="' + backup_db + '.dump"'
- cherrypy.response.cookie['fileToken'] = token
- cherrypy.response.cookie['fileToken']['path'] = '/'
+ req.httpresponse.headers['Content-Type'] = "application/octet-stream; charset=binary"
+ req.httpresponse.headers['Content-Disposition'] = 'attachment; filename="' + backup_db + '.dump"'
+ req.httpresponse.cookie['fileToken'] = token
+ req.httpresponse.cookie['fileToken']['path'] = '/'
return db_dump
except xmlrpclib.Fault, e:
if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied':
return 'Backup Database|' + e.faultCode
return 'Backup Database|Could not generate database backup'
-
+
@openerpweb.httprequest
def restore(self, req, db_file, restore_pwd, new_db):
try:
@@ -267,9 +266,7 @@ class Database(openerpweb.Controller):
return ''
except xmlrpclib.Fault, e:
if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied':
- raise cherrypy.HTTPError(403)
-
- raise cherrypy.HTTPError()
+ raise Exception("AccessDenied")
@openerpweb.jsonrequest
def change_password(self, req, fields):
@@ -386,10 +383,10 @@ class Session(openerpweb.Controller):
:return: A key identifying the saved action.
:rtype: integer
"""
- saved_actions = cherrypy.session.get('saved_actions')
+ saved_actions = req.httpsession.get('saved_actions')
if not saved_actions:
saved_actions = {"next":0, "actions":{}}
- cherrypy.session['saved_actions'] = saved_actions
+ req.httpsession['saved_actions'] = saved_actions
# we don't allow more than 10 stored actions
if len(saved_actions["actions"]) >= 10:
del saved_actions["actions"][min(saved_actions["actions"].keys())]
@@ -409,7 +406,7 @@ class Session(openerpweb.Controller):
:return: The saved action or None.
:rtype: anything
"""
- saved_actions = cherrypy.session.get('saved_actions')
+ saved_actions = req.httpsession.get('saved_actions')
if not saved_actions:
return None
return saved_actions["actions"].get(key)
@@ -439,18 +436,16 @@ def clean_action(action, session, context=None):
return action
# values come from the server, we can just eval them
if isinstance(action.get('context'), basestring):
- action['context'] = eval(
- action['context'],
- session.evaluation_context(context=context)) or {}
+ localvars = session.evaluation_context(context=context)
+ action['context'] = eval( action['context'], localvars ) or {}
if isinstance(action.get('domain'), basestring):
- action['domain'] = eval(
- action['domain'],
- session.evaluation_context(
- action.get('context', {}))) or []
+ localvars = session.evaluation_context( action.get('context', {}))
+ action['domain'] = eval( action['domain'], localvars ) or []
return fix_view_modes(action)
+# I think generate_views,fix_view_modes should go into js ActionManager
def generate_views(action):
"""
While the server generates a sequence called "views" computing dependencies
@@ -947,10 +942,10 @@ class Binary(openerpweb.Controller):
_cp_path = "/base/binary"
@openerpweb.httprequest
- def image(self, request, session_id, model, id, field, **kw):
- cherrypy.response.headers['Content-Type'] = 'image/png'
- Model = request.session.model(model)
- context = request.session.eval_context(request.context)
+ def image(self, req, model, id, field, **kw):
+ req.httpresponse.headers['Content-Type'] = 'image/png'
+ Model = req.session.model(model)
+ context = req.session.eval_context(req.context)
try:
if not id:
res = Model.default_get([field], context).get(field, '')
@@ -963,26 +958,26 @@ class Binary(openerpweb.Controller):
return open(os.path.join(openerpweb.path_addons, 'base', 'static', 'src', 'img', 'placeholder.png'), 'rb').read()
@openerpweb.httprequest
- def saveas(self, request, session_id, model, id, field, fieldname, **kw):
- Model = request.session.model(model)
- context = request.session.eval_context(request.context)
+ def saveas(self, req, model, id, field, fieldname, **kw):
+ Model = req.session.model(model)
+ context = req.session.eval_context(req.context)
res = Model.read([int(id)], [field, fieldname], context)[0]
filecontent = res.get(field, '')
if not filecontent:
raise cherrypy.NotFound
else:
- cherrypy.response.headers['Content-Type'] = 'application/octet-stream'
+ req.httpresponse.headers['Content-Type'] = 'application/octet-stream'
filename = '%s_%s' % (model.replace('.', '_'), id)
if fieldname:
filename = res.get(fieldname, '') or filename
- cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=' + filename
+ req.httpresponse.headers['Content-Disposition'] = 'attachment; filename=' + filename
return base64.decodestring(filecontent)
@openerpweb.httprequest
- def upload(self, request, session_id, callback, ufile=None):
+ def upload(self, req, callback, ufile=None):
cherrypy.response.timeout = 500
headers = {}
- for key, val in cherrypy.request.headers.iteritems():
+ for key, val in req.httprequest.headers.iteritems():
headers[key.lower()] = val
size = int(headers.get('content-length', 0))
# TODO: might be useful to have a configuration flag for max-length file uploads
@@ -1006,10 +1001,10 @@ class Binary(openerpweb.Controller):
return out % (simplejson.dumps(callback), simplejson.dumps(args))
@openerpweb.httprequest
- def upload_attachment(self, request, session_id, callback, model, id, ufile=None):
+ def upload_attachment(self, req, callback, model, id, ufile=None):
cherrypy.response.timeout = 500
- context = request.session.eval_context(request.context)
- Model = request.session.model('ir.attachment')
+ context = req.session.eval_context(req.context)
+ Model = req.session.model('ir.attachment')
try:
out = """<script language="javascript" type="text/javascript">
var win = window.top.window,