summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Wearden <jack@jackwearden.co.uk>2018-05-21 10:26:33 -0700
committerJack Wearden <jack@jackwearden.co.uk>2018-05-21 10:26:39 -0700
commita3aafa58111631a4b04a28f671b8bd7e57533e48 (patch)
tree836a6b17fb8a77af744cfa4b8123b7ab7fe120cb
parent66e256b042226e63378f32a9dbe5dcfd1dad52d3 (diff)
downloadwaitress-a3aafa58111631a4b04a28f671b8bd7e57533e48.tar.gz
Add more cases of removed server header & tests
-rw-r--r--CHANGES.txt10
-rw-r--r--waitress/adjustments.py8
-rw-r--r--waitress/task.py8
-rw-r--r--waitress/tests/test_adjustments.py11
-rw-r--r--waitress/tests/test_init.py6
5 files changed, 28 insertions, 15 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index e1726c6..184473a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,13 @@
+Unreleased (2018-05-21)
+-----------------------
+
+Features
+~~~~~~~~
+
+- Server header can be omitted by specifying `ident=None` or `ident=''`.
+ See https://github.com/Pylons/waitress/pull/187
+
+
1.1.0 (2017-10-10)
------------------
diff --git a/waitress/adjustments.py b/waitress/adjustments.py
index db6291b..9b8ac1a 100644
--- a/waitress/adjustments.py
+++ b/waitress/adjustments.py
@@ -66,10 +66,8 @@ def slash_fixed_str(s):
s = '/' + s.lstrip('/').rstrip('/')
return s
-def str_ifnotnone(s):
- if s is None:
- return None
- return str(s)
+def str_iftruthy(s):
+ return str(s) if s else s
class _str_marker(str):
pass
@@ -103,7 +101,7 @@ class Adjustments(object):
('max_request_header_size', int),
('max_request_body_size', int),
('expose_tracebacks', asbool),
- ('ident', str_ifnotnone),
+ ('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 eaeba56..17483a0 100644
--- a/waitress/task.py
+++ b/waitress/task.py
@@ -250,11 +250,11 @@ class Task(object):
# Set the Server and Date field, if not yet specified. This is needed
# if the server is used as a proxy.
ident = self.channel.server.adj.ident
- if ident is not None:
- if not server_header:
+ if not server_header:
+ if ident:
response_headers.append(('Server', ident))
- else:
- response_headers.append(('Via', ident))
+ else:
+ response_headers.append(('Via', ident))
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..9aa2c2b 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, '')
+
+ inst = self._makeOne(ident='specific_headaer')
+ 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 56adf0d..9fbd31a 100644
--- a/waitress/tests/test_init.py
+++ b/waitress/tests/test_init.py
@@ -14,12 +14,6 @@ class Test_serve(unittest.TestCase):
self.assertEqual(result, None)
self.assertEqual(server.ran, True)
- def test_empty_server_header(self):
- server = DummyServerFactory()
- app = object()
- result = self._callFUT(app, _server=server, _quiet=True, ident=None)
- self.assertIsNone(server.adj.ident)
-
class Test_serve_paste(unittest.TestCase):