diff options
author | Bert JW Regeer <xistence@0x58.com> | 2018-08-28 22:43:53 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-28 22:43:53 -0600 |
commit | d85145a202cfa110db414e97cd437e014b2fc479 (patch) | |
tree | fe65e12d98379c38da1b4357da702c1f111e5ce3 | |
parent | d1e8418fe6b426c3ac62af5b73ba1d3e91497f11 (diff) | |
parent | 702bc67a63baf859cba926df4f7c04618ff6d57f (diff) | |
download | waitress-d85145a202cfa110db414e97cd437e014b2fc479.tar.gz |
Merge branch 'master' into feature.vendor-asyncore-180feature.vendor-asyncore-180
-rw-r--r-- | CHANGES.txt | 13 | ||||
-rw-r--r-- | CONTRIBUTORS.txt | 2 | ||||
-rw-r--r-- | waitress/adjustments.py | 5 | ||||
-rw-r--r-- | waitress/task.py | 6 | ||||
-rw-r--r-- | waitress/tests/test_adjustments.py | 11 | ||||
-rw-r--r-- | waitress/tests/test_init.py | 1 |
6 files changed, 33 insertions, 5 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index a9a0ba8..e9e5fdb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,14 @@ -Next release ------------- +Unreleased (2018-05-21) +----------------------- + +Features +~~~~~~~~ + +- Server header can be omitted by specifying `ident=None` or `ident=''`. + See https://github.com/Pylons/waitress/pull/187 + +Compatibility +~~~~~~~~~~~~~ - Waitress has now "vendored" asyncore into itself as ``waitress.wasyncore``. This is to cope with the eventuality that asyncore will be removed from diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 3f309fc..2c77512 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -140,3 +140,5 @@ Contributors - Atsushi Odagiri, 2017-02-12 - David D Lowe, 2017-06-02 + +- Jack Wearden, 2018-05-18 diff --git a/waitress/adjustments.py b/waitress/adjustments.py index 1a56621..c55823a 100644 --- a/waitress/adjustments.py +++ b/waitress/adjustments.py @@ -66,6 +66,9 @@ def slash_fixed_str(s): s = '/' + s.lstrip('/').rstrip('/') return s +def str_iftruthy(s): + return str(s) if s else None + class _str_marker(str): pass @@ -98,7 +101,7 @@ class Adjustments(object): ('max_request_header_size', int), ('max_request_body_size', int), ('expose_tracebacks', asbool), - ('ident', str), + ('ident', str_iftruthy), ('asyncore_loop_timeout', int), ('asyncore_use_poll', asbool), ('unix_socket', str), diff --git a/waitress/task.py b/waitress/task.py index 76c4d2d..8b0856a 100644 --- a/waitress/task.py +++ b/waitress/task.py @@ -251,9 +251,11 @@ class Task(object): # if the server is used as a proxy. ident = self.channel.server.adj.ident if not server_header: - response_headers.append(('Server', ident)) + if ident: + response_headers.append(('Server', ident)) else: - response_headers.append(('Via', ident)) + response_headers.append(('Via', ident or 'waitress')) + if not date_header: response_headers.append(('Date', build_http_date(self.start_time))) diff --git a/waitress/tests/test_adjustments.py b/waitress/tests/test_adjustments.py index 9446705..09c60ef 100644 --- a/waitress/tests/test_adjustments.py +++ b/waitress/tests/test_adjustments.py @@ -219,6 +219,17 @@ class TestAdjustments(unittest.TestCase): def test_ipv6_disabled(self): self.assertRaises(ValueError, self._makeOne, ipv6=False, listen="[::]:8080") + def test_server_header_removable(self): + inst = self._makeOne(ident=None) + self.assertEqual(inst.ident, None) + + inst = self._makeOne(ident='') + self.assertEqual(inst.ident, None) + + inst = self._makeOne(ident='specific_header') + self.assertEqual(inst.ident, 'specific_header') + + class TestCLI(unittest.TestCase): def parse(self, argv): diff --git a/waitress/tests/test_init.py b/waitress/tests/test_init.py index 66c34ce..9fbd31a 100644 --- a/waitress/tests/test_init.py +++ b/waitress/tests/test_init.py @@ -14,6 +14,7 @@ class Test_serve(unittest.TestCase): self.assertEqual(result, None) self.assertEqual(server.ran, True) + class Test_serve_paste(unittest.TestCase): def _callFUT(self, app, **kw): |