summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert JW Regeer <xistence@0x58.com>2018-08-28 22:43:53 -0600
committerGitHub <noreply@github.com>2018-08-28 22:43:53 -0600
commitd85145a202cfa110db414e97cd437e014b2fc479 (patch)
treefe65e12d98379c38da1b4357da702c1f111e5ce3
parentd1e8418fe6b426c3ac62af5b73ba1d3e91497f11 (diff)
parent702bc67a63baf859cba926df4f7c04618ff6d57f (diff)
downloadwaitress-d85145a202cfa110db414e97cd437e014b2fc479.tar.gz
Merge branch 'master' into feature.vendor-asyncore-180feature.vendor-asyncore-180
-rw-r--r--CHANGES.txt13
-rw-r--r--CONTRIBUTORS.txt2
-rw-r--r--waitress/adjustments.py5
-rw-r--r--waitress/task.py6
-rw-r--r--waitress/tests/test_adjustments.py11
-rw-r--r--waitress/tests/test_init.py1
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):