annotate tests/dumbhttp.py @ 51721:ed28085827ec

typing: explicitly type some `mercurial.util` eol code to avoid @overload Unlike the previous commit, this makes a material difference in the generated stub file- the `pycompat.identity()` aliases generated an @overload like this: @overload def fromnativeeol(a: _T0) -> _T0: ... ... which might fail to detect a bad argument, like str. This drops the @overload for the 3 related methods, so there's a single definition for each. The `typelib.BinaryIO_Proxy` is used for subclassing (the same as was done in 8147abc05794), so that it is a `BinaryIO` type during type checking, but still inherits `object` at runtime. That way, we don't need to implement unused abstract methods.
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 19 Jul 2024 16:49:46 -0400
parents ca7bde5dbafb
children 7332eae326de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47500
23f5ed6dbcb1 run-tests: stop writing a `python3` symlink pointing to python2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45830
diff changeset
1 #!/usr/bin/env python
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
2
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
3
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
4 """
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
5 Small and dumb HTTP server for use in tests.
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
6 """
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
7
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
8 import optparse
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
9 import os
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
10 import signal
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
11 import socket
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
12 import sys
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
13
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
14 from mercurial import (
38593
e46c3b6a47b5 py3: fix dumbhttp.py to convert --daemon-postexec arguments back to bytes
Yuya Nishihara <yuya@tcha.org>
parents: 37672
diff changeset
15 encoding,
37672
8bacc09814ba py3: make values bytes before passing into server.runservice()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34944
diff changeset
16 pycompat,
30506
d9d8d78e6bc9 server: move cmdutil.service() to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29566
diff changeset
17 server,
29566
075146e85bb6 py3: conditionalize BaseHTTPServer, SimpleHTTPServer and CGIHTTPServer import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28771
diff changeset
18 util,
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
19 )
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
20
29566
075146e85bb6 py3: conditionalize BaseHTTPServer, SimpleHTTPServer and CGIHTTPServer import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28771
diff changeset
21 httpserver = util.httpserver
27282
0bb8c405a7c7 tests/dumbhttp: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23136
diff changeset
22 OptionParser = optparse.OptionParser
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
23
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
24 if os.environ.get('HGIPV6', '0') == '1':
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
25
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
26 class simplehttpserver(httpserver.httpserver):
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
27 address_family = socket.AF_INET6
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
28
31004
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
29 else:
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
30 simplehttpserver = httpserver.httpserver
d05fefbb5ab3 dumbhttp: use IPv6 if HGIPV6 is set to 1
Jun Wu <quark@fb.com>
parents: 30506
diff changeset
31
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
32
34944
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
33 class _httprequesthandler(httpserver.simplehttprequesthandler):
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
34 def log_message(self, format, *args):
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
35 httpserver.simplehttprequesthandler.log_message(self, format, *args)
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
36 sys.stderr.flush()
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
37
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
38
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
39 class simplehttpservice:
23136
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
40 def __init__(self, host, port):
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
41 self.address = (host, port)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
42
23136
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
43 def init(self):
34944
bf2db35a6fe7 test-static-http: flush access log per request
Yuya Nishihara <yuya@tcha.org>
parents: 34925
diff changeset
44 self.httpd = simplehttpserver(self.address, _httprequesthandler)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
45
23136
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
46 def run(self):
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
47 self.httpd.serve_forever()
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
48
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
49
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
50 if __name__ == '__main__':
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
51 parser = OptionParser()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
52 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
53 '-p',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
54 '--port',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
55 dest='port',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
56 type='int',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
57 default=8000,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
58 help='TCP port to listen on',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
59 metavar='PORT',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
60 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
61 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
62 '-H',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
63 '--host',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
64 dest='host',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
65 default='localhost',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
66 help='hostname or IP to listen on',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
67 metavar='HOST',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
68 )
34925
8b95e420e248 test-static-http: show all files accessed over HTTP
Yuya Nishihara <yuya@tcha.org>
parents: 31004
diff changeset
69 parser.add_option('--logfile', help='file name of access/error log')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
70 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
71 '--pid',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
72 dest='pid',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
73 help='file name where the PID of the server is stored',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
74 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
75 parser.add_option(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
76 '-f',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
77 '--foreground',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
78 dest='foreground',
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
79 action='store_true',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
80 help='do not start the HTTP server in the background',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
81 )
28451
c90cfe76e024 serve: accept multiple values for --daemon-postexec
Jun Wu <quark@fb.com>
parents: 28194
diff changeset
82 parser.add_option('--daemon-postexec', action='append')
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
83
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
84 (options, args) = parser.parse_args()
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
85
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
86 signal.signal(signal.SIGTERM, lambda x, y: sys.exit(0))
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
87
34925
8b95e420e248 test-static-http: show all files accessed over HTTP
Yuya Nishihara <yuya@tcha.org>
parents: 31004
diff changeset
88 if options.foreground and options.logfile:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
89 parser.error(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
90 "options --logfile and --foreground are mutually " "exclusive"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
91 )
22959
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
92 if options.foreground and options.pid:
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
93 parser.error("options --pid and --foreground are mutually exclusive")
10116463b0b1 tests: pull common http server setup out of individual tests
Mike Hommey <mh@glandium.org>
parents:
diff changeset
94
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
95 opts = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
96 b'pid_file': options.pid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
97 b'daemon': not options.foreground,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
98 b'daemon_postexec': pycompat.rapply(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
99 encoding.strtolocal, options.daemon_postexec
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
100 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
101 }
23136
6eab50a34fed tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org>
parents: 22959
diff changeset
102 service = simplehttpservice(options.host, options.port)
37672
8bacc09814ba py3: make values bytes before passing into server.runservice()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34944
diff changeset
103 runargs = [sys.executable, __file__] + sys.argv[1:]
8bacc09814ba py3: make values bytes before passing into server.runservice()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34944
diff changeset
104 runargs = [pycompat.fsencode(a) for a in runargs]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
105 server.runservice(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
106 opts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
107 initfn=service.init,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
108 runfn=service.run,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
109 logfile=options.logfile,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
110 runargs=runargs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 38593
diff changeset
111 )