##// END OF EJS Templates
httppeer: expose API descriptor on httpv2peer...
httppeer: expose API descriptor on httpv2peer The API descriptor in wireprotov2 is much more expressive than space-delimited tokens and it will be difficult to define methods to query it in all of the ways we'll want to query it. So let's just declare defeat and expose the API descriptor on the peer instance. As part of this, we define a new interface for version 2 peers, fulfilling a TODO in the process. Differential Revision: https://phab.mercurial-scm.org/D4974

File last commit:

r40190:fe11fc7e default
r40207:dac438b7 default
Show More
get-with-headers.py
113 lines | 3.2 KiB | text/x-python | PythonLexer
/ tests / get-with-headers.py
Eric Hopper
Add a test for getting raw files via the web UI.
r2532 #!/usr/bin/env python
Martin Geisler
tests: fix doc string in get-with-headers.py
r8447 """This does HTTP GET requests given a host:port and path and returns
Eric Hopper
Add a test for getting raw files via the web UI.
r2532 a subset of the headers plus the body of the result."""
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 from __future__ import absolute_import
Gregory Szorc
tests: use absolute_import in /get-with-headers.py...
r27296
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 import argparse
Gregory Szorc
tests: use absolute_import in /get-with-headers.py...
r27296 import json
import os
import sys
Patrick Mezard
get-with-headers: fix stream modes under Windows
r7054
Pulkit Goyal
py3: conditionalize httplib import...
r29455 from mercurial import (
Gregory Szorc
py3: encode JSON str to bytes...
r40190 pycompat,
Pulkit Goyal
py3: conditionalize httplib import...
r29455 util,
)
httplib = util.httplib
Patrick Mezard
get-with-headers: fix stream modes under Windows
r7054 try:
Gregory Szorc
tests: use absolute_import in /get-with-headers.py...
r27296 import msvcrt
Patrick Mezard
get-with-headers: fix stream modes under Windows
r7054 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
except ImportError:
pass
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 stdout = getattr(sys.stdout, 'buffer', sys.stdout)
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 parser = argparse.ArgumentParser()
parser.add_argument('--twice', action='store_true')
parser.add_argument('--headeronly', action='store_true')
parser.add_argument('--json', action='store_true')
parser.add_argument('--hgproto')
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 parser.add_argument('--requestheader', nargs='*', default=[],
help='Send an additional HTTP request header. Argument '
'value is <header>=<value>')
parser.add_argument('--bodyfile',
help='Write HTTP response body to a file')
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 parser.add_argument('host')
parser.add_argument('path')
parser.add_argument('show', nargs='*')
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 args = parser.parse_args()
twice = args.twice
headeronly = args.headeronly
formatjson = args.json
hgproto = args.hgproto
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 requestheaders = args.requestheader
Gregory Szorc
protocol: send application/mercurial-0.2 responses to capable clients...
r30764
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 tag = None
def request(host, path, show):
Mads Kiilerich
tests: prepare get-with-headers.py for MSYS...
r17017 assert not path.startswith('/'), path
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 global tag
headers = {}
if tag:
headers['If-None-Match'] = tag
Gregory Szorc
protocol: send application/mercurial-0.2 responses to capable clients...
r30764 if hgproto:
headers['X-HgProto-1'] = hgproto
Bryan O'Sullivan
hgweb: return meaningful HTTP status codes instead of nonsense
r5561
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 for header in requestheaders:
key, value = header.split('=', 1)
headers[key] = value
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 conn = httplib.HTTPConnection(host)
Mads Kiilerich
tests: prepare get-with-headers.py for MSYS...
r17017 conn.request("GET", '/' + path, None, headers)
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 response = conn.getresponse()
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 stdout.write(b'%d %s\n' % (response.status,
response.reason.encode('ascii')))
Mads Kiilerich
serve: don't send any content headers with 304 responses...
r18380 if show[:1] == ['-']:
Mads Kiilerich
tests: make test-hgweb.t output stable...
r18393 show = sorted(h for h, v in response.getheaders()
if h.lower() not in show)
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 for h in [h.lower() for h in show]:
if response.getheader(h, None) is not None:
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 stdout.write(b"%s: %s\n" % (h.encode('ascii'),
response.getheader(h).encode('ascii')))
Pierre-Yves David
get-with-headers: add a --headeronly switch...
r18400 if not headeronly:
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 stdout.write(b'\n')
Gregory Szorc
hgweb: send proper HTTP response after uncaught exception...
r23409 data = response.read()
Gregory Szorc
get-with-headers: support parsing and pretty printing JSON...
r24543
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 if args.bodyfile:
bodyfh = open(args.bodyfile, 'wb')
else:
Yuya Nishihara
get-with-headers: use bytes stdout thoroughly...
r36594 bodyfh = stdout
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799
Gregory Szorc
get-with-headers: support parsing and pretty printing JSON...
r24543 # Pretty print JSON. This also has the beneficial side-effect
# of verifying emitted JSON is well-formed.
if formatjson:
# json.dumps() will print trailing newlines. Eliminate them
# to make tests easier to write.
data = json.loads(data)
lines = json.dumps(data, sort_keys=True, indent=2).splitlines()
for line in lines:
Gregory Szorc
py3: encode JSON str to bytes...
r40190 bodyfh.write(pycompat.sysbytes(line.rstrip()))
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 bodyfh.write(b'\n')
Gregory Szorc
get-with-headers: support parsing and pretty printing JSON...
r24543 else:
Gregory Szorc
tests: teach get-with-headers.py some new tricks...
r35799 bodyfh.write(data)
if args.bodyfile:
bodyfh.close()
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182
Gregory Szorc
tests: store ETag when using --headeronly...
r31791 if twice and response.getheader('ETag', None):
tag = response.getheader('ETag')
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182
return response.status
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 status = request(args.host, args.path, args.show)
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182 if twice:
Gregory Szorc
tests: use argparse in get-with-headers.py...
r35798 status = request(args.host, args.path, args.show)
Dirkjan Ochtman
tests: extend get-with-headers to support cache testing
r12182
if 200 <= status <= 305:
Bryan O'Sullivan
hgweb: return meaningful HTTP status codes instead of nonsense
r5561 sys.exit(0)
sys.exit(1)