##// END OF EJS Templates
hgweb: always return iterable from @webcommand functions (API)...
Gregory Szorc -
r36896:67fb0dca default
parent child Browse files
Show More
@@ -88,7 +88,7 b' def generate_css(web, req, tmpl):'
88 88 '/* pygments_style = %s */\n\n' % pg_style,
89 89 fmter.get_style_defs(''),
90 90 ]))
91 return web.res
91 return web.res.sendresponse()
92 92
93 93 def extsetup():
94 94 # monkeypatch in the new version
@@ -621,13 +621,7 b' def kwweb_skip(orig, web, req, tmpl):'
621 621 origmatch = kwt.match
622 622 kwt.match = util.never
623 623 try:
624 res = orig(web, req, tmpl)
625 if res is web.res:
626 res = res.sendresponse()
627 elif res is True:
628 return
629
630 for chunk in res:
624 for chunk in orig(web, req, tmpl):
631 625 yield chunk
632 626 finally:
633 627 if kwt:
@@ -14,7 +14,6 b' import os'
14 14 from .common import (
15 15 ErrorResponse,
16 16 HTTP_BAD_REQUEST,
17 HTTP_OK,
18 17 cspvalues,
19 18 permhooks,
20 19 statusmessage,
@@ -405,15 +404,7 b' class hgweb(object):'
405 404 # override easily enough.
406 405 res.status = '200 Script output follows'
407 406 res.headers['Content-Type'] = ctype
408 content = getattr(webcommands, cmd)(rctx, wsgireq, tmpl)
409
410 if content is res:
411 return res.sendresponse()
412 elif content is True:
413 return []
414 else:
415 wsgireq.respond(HTTP_OK, ctype)
416 return content
407 return getattr(webcommands, cmd)(rctx, wsgireq, tmpl)
417 408
418 409 except (error.LookupError, error.RepoLookupError) as err:
419 410 msg = pycompat.bytestr(err)
@@ -57,12 +57,9 b' class webcommand(object):'
57 57 The functions should populate the ``rctx.res`` object with details
58 58 about the HTTP response.
59 59
60 The function can return the ``requestcontext.res`` instance to signal
61 that it wants to use this object to generate the response. If an iterable
62 is returned, the ``wsgirequest`` instance will be used and the returned
63 content will constitute the response body. ``True`` can be returned to
64 indicate that the function already sent output and the caller doesn't
65 need to do anything more to send the response.
60 The function returns a generator to be consumed by the WSGI application.
61 For most commands, this should be the result from
62 ``web.res.sendresponse()``.
66 63
67 64 Usage:
68 65
@@ -135,7 +132,7 b' def rawfile(web, req, tmpl):'
135 132 .replace('\\', '\\\\').replace('"', '\\"'))
136 133 web.res.headers['Content-Disposition'] = 'inline; filename="%s"' % filename
137 134 web.res.setbodybytes(text)
138 return web.res
135 return web.res.sendresponse()
139 136
140 137 def _filerevision(web, req, tmpl, fctx):
141 138 f = fctx.path()
@@ -165,7 +162,7 b' def _filerevision(web, req, tmpl, fctx):'
165 162 ishead=int(ishead),
166 163 **pycompat.strkwargs(webutil.commonentry(web.repo, fctx))))
167 164
168 return web.res
165 return web.res.sendresponse()
169 166
170 167 @webcommand('file')
171 168 def file(web, req, tmpl):
@@ -355,7 +352,7 b' def _search(web, req, tmpl):'
355 352 showforcekw=showforcekw,
356 353 showunforcekw=showunforcekw))
357 354
358 return web.res
355 return web.res.sendresponse()
359 356
360 357 @webcommand('changelog')
361 358 def changelog(web, req, tmpl, shortlog=False):
@@ -455,7 +452,7 b' def changelog(web, req, tmpl, shortlog=F'
455 452 lessvars=lessvars,
456 453 query=query))
457 454
458 return web.res
455 return web.res.sendresponse()
459 456
460 457 @webcommand('shortlog')
461 458 def shortlog(web, req, tmpl):
@@ -490,7 +487,7 b' def changeset(web, req, tmpl):'
490 487 ctx = webutil.changectx(web.repo, req)
491 488 web.res.setbodygen(tmpl('changeset',
492 489 **webutil.changesetentry(web, req, tmpl, ctx)))
493 return web.res
490 return web.res.sendresponse()
494 491
495 492 rev = webcommand('rev')(changeset)
496 493
@@ -602,7 +599,7 b' def manifest(web, req, tmpl):'
602 599 archives=web.archivelist(hex(node)),
603 600 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx))))
604 601
605 return web.res
602 return web.res.sendresponse()
606 603
607 604 @webcommand('tags')
608 605 def tags(web, req, tmpl):
@@ -638,7 +635,7 b' def tags(web, req, tmpl):'
638 635 entriesnotip=lambda **x: entries(True, False, **x),
639 636 latestentry=lambda **x: entries(True, True, **x)))
640 637
641 return web.res
638 return web.res.sendresponse()
642 639
643 640 @webcommand('bookmarks')
644 641 def bookmarks(web, req, tmpl):
@@ -679,7 +676,7 b' def bookmarks(web, req, tmpl):'
679 676 entries=lambda **x: entries(latestonly=False, **x),
680 677 latestentry=lambda **x: entries(latestonly=True, **x)))
681 678
682 return web.res
679 return web.res.sendresponse()
683 680
684 681 @webcommand('branches')
685 682 def branches(web, req, tmpl):
@@ -704,7 +701,7 b' def branches(web, req, tmpl):'
704 701 entries=entries,
705 702 latestentry=latestentry))
706 703
707 return web.res
704 return web.res.sendresponse()
708 705
709 706 @webcommand('summary')
710 707 def summary(web, req, tmpl):
@@ -789,7 +786,7 b' def summary(web, req, tmpl):'
789 786 archives=web.archivelist('tip'),
790 787 labels=web.configlist('web', 'labels')))
791 788
792 return web.res
789 return web.res.sendresponse()
793 790
794 791 @webcommand('filediff')
795 792 def filediff(web, req, tmpl):
@@ -838,7 +835,7 b' def filediff(web, req, tmpl):'
838 835 diff=diffs,
839 836 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx))))
840 837
841 return web.res
838 return web.res.sendresponse()
842 839
843 840 diff = webcommand('diff')(filediff)
844 841
@@ -917,7 +914,7 b' def comparison(web, req, tmpl):'
917 914 comparison=comparison,
918 915 **pycompat.strkwargs(webutil.commonentry(web.repo, ctx))))
919 916
920 return web.res
917 return web.res.sendresponse()
921 918
922 919 @webcommand('annotate')
923 920 def annotate(web, req, tmpl):
@@ -1011,7 +1008,7 b' def annotate(web, req, tmpl):'
1011 1008 diffopts=diffopts,
1012 1009 **pycompat.strkwargs(webutil.commonentry(web.repo, fctx))))
1013 1010
1014 return web.res
1011 return web.res.sendresponse()
1015 1012
1016 1013 @webcommand('filelog')
1017 1014 def filelog(web, req, tmpl):
@@ -1151,7 +1148,7 b' def filelog(web, req, tmpl):'
1151 1148 lessvars=lessvars,
1152 1149 **pycompat.strkwargs(webutil.commonentry(web.repo, fctx))))
1153 1150
1154 return web.res
1151 return web.res.sendresponse()
1155 1152
1156 1153 @webcommand('archive')
1157 1154 def archive(web, req, tmpl):
@@ -1225,7 +1222,7 b' def archive(web, req, tmpl):'
1225 1222 matchfn=match,
1226 1223 subrepos=web.configbool("web", "archivesubrepos"))
1227 1224
1228 return True
1225 return []
1229 1226
1230 1227 @webcommand('static')
1231 1228 def static(web, req, tmpl):
@@ -1240,7 +1237,7 b' def static(web, req, tmpl):'
1240 1237 static = [os.path.join(p, 'static') for p in tp]
1241 1238
1242 1239 staticfile(static, fname, web.res)
1243 return web.res
1240 return web.res.sendresponse()
1244 1241
1245 1242 @webcommand('graph')
1246 1243 def graph(web, req, tmpl):
@@ -1401,7 +1398,7 b' def graph(web, req, tmpl):'
1401 1398 node=ctx.hex(),
1402 1399 changenav=changenav))
1403 1400
1404 return web.res
1401 return web.res.sendresponse()
1405 1402
1406 1403 def _getdoc(e):
1407 1404 doc = e[0].__doc__
@@ -1463,7 +1460,7 b' def help(web, req, tmpl):'
1463 1460 earlycommands=earlycommands,
1464 1461 othercommands=othercommands,
1465 1462 title='Index'))
1466 return web.res
1463 return web.res.sendresponse()
1467 1464
1468 1465 # Render an index of sub-topics.
1469 1466 if topicname in helpmod.subtopics:
@@ -1480,7 +1477,7 b' def help(web, req, tmpl):'
1480 1477 topics=topics,
1481 1478 title=topicname,
1482 1479 subindex=True))
1483 return web.res
1480 return web.res.sendresponse()
1484 1481
1485 1482 u = webutil.wsgiui.load()
1486 1483 u.verbose = True
@@ -1506,7 +1503,7 b' def help(web, req, tmpl):'
1506 1503 topic=topicname,
1507 1504 doc=doc))
1508 1505
1509 return web.res
1506 return web.res.sendresponse()
1510 1507
1511 1508 # tell hggettext to extract docstrings from these functions:
1512 1509 i18nfunctions = commands.values()
General Comments 0
You need to be logged in to leave comments. Login now