Mercurial > public > mercurial-scm > hg-stable
diff mercurial/hgweb/hgweb_mod.py @ 36889:061635d4221c
hgweb: add a sendtemplate() helper function
This pattern is common. Let's make a helper function to reduce
boilerplate.
We store the "global" template on the requestcontext instance and
use it. The templater used by the helper function is the same
templater that's passed in as an argument to the @webcommand
functions. It needs to be this way because various commands are
accessing and mutating the defaults on the templater instance.
Differential Revision: https://phab.mercurial-scm.org/D2799
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 10 Mar 2018 19:41:18 -0800 |
parents | 96a93625a824 |
children | 4daa22071d5d |
line wrap: on
line diff
--- a/mercurial/hgweb/hgweb_mod.py Sat Mar 10 19:11:41 2018 -0800 +++ b/mercurial/hgweb/hgweb_mod.py Sat Mar 10 19:41:18 2018 -0800 @@ -196,6 +196,10 @@ resources=tres) return tmpl + def sendtemplate(self, name, **kwargs): + """Helper function to send a response generated from a template.""" + self.res.setbodygen(self.tmpl(name, **kwargs)) + return self.res.sendresponse() class hgweb(object): """HTTP server for individual repositories. @@ -368,8 +372,8 @@ # process the web interface request try: - tmpl = rctx.templater(req) - ctype = tmpl('mimetype', encoding=encoding.encoding) + rctx.tmpl = rctx.templater(req) + ctype = rctx.tmpl('mimetype', encoding=encoding.encoding) ctype = templater.stringify(ctype) # check read permissions non-static content @@ -377,7 +381,7 @@ self.check_perm(rctx, req, None) if cmd == '': - req.qsparams['cmd'] = tmpl.cache['default'] + req.qsparams['cmd'] = rctx.tmpl.cache['default'] cmd = req.qsparams['cmd'] # Don't enable caching if using a CSP nonce because then it wouldn't @@ -400,7 +404,7 @@ # override easily enough. res.status = '200 Script output follows' res.headers['Content-Type'] = ctype - return getattr(webcommands, cmd)(rctx, wsgireq, tmpl) + return getattr(webcommands, cmd)(rctx, wsgireq, rctx.tmpl) except (error.LookupError, error.RepoLookupError) as err: msg = pycompat.bytestr(err) @@ -410,18 +414,15 @@ res.status = '404 Not Found' res.headers['Content-Type'] = ctype - res.setbodygen(tmpl('error', error=msg)) - return res.sendresponse() + return rctx.sendtemplate('error', error=msg) except (error.RepoError, error.RevlogError) as e: res.status = '500 Internal Server Error' res.headers['Content-Type'] = ctype - res.setbodygen(tmpl('error', error=pycompat.bytestr(e))) - return res.sendresponse() + return rctx.sendtemplate('error', error=pycompat.bytestr(e)) except ErrorResponse as e: res.status = statusmessage(e.code, pycompat.bytestr(e)) res.headers['Content-Type'] = ctype - res.setbodygen(tmpl('error', error=pycompat.bytestr(e))) - return res.sendresponse() + return rctx.sendtemplate('error', error=pycompat.bytestr(e)) def check_perm(self, rctx, req, op): for permhook in permhooks: