diff options
author | Bert JW Regeer <bertjw@regeer.org> | 2016-10-14 15:15:47 -0600 |
---|---|---|
committer | Bert JW Regeer <bertjw@regeer.org> | 2016-10-14 15:15:47 -0600 |
commit | d10889694304e79ff52a61512e8b16948433be23 (patch) | |
tree | 36a7903e0d4b2b1a82a574fdfa764326181ff444 | |
parent | ed67c43759a2f46104582eceb3913f8e0c9e0978 (diff) | |
parent | 956a1c4de77addbe22c3e718047ab42a600f333c (diff) | |
download | waitress-d10889694304e79ff52a61512e8b16948433be23.tar.gz |
Merge branch 'bugfix/port_integer_windows' into bugfix/socket_flags_windows
-rw-r--r-- | appveyor.yml | 2 | ||||
-rw-r--r-- | waitress/adjustments.py | 15 | ||||
-rw-r--r-- | waitress/compat.py | 5 | ||||
-rw-r--r-- | waitress/tests/test_adjustments.py | 14 |
4 files changed, 35 insertions, 1 deletions
diff --git a/appveyor.yml b/appveyor.yml index 1350507..6505c2b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,7 @@ environment: matrix: + - PYTHON: "C:\\Python27" + TOXENV: "py27" - PYTHON: "C:\\Python35" TOXENV: "py35" diff --git a/waitress/adjustments.py b/waitress/adjustments.py index 97c47e4..2ee4cd5 100644 --- a/waitress/adjustments.py +++ b/waitress/adjustments.py @@ -16,7 +16,11 @@ import getopt import socket -from waitress.compat import string_types +from waitress.compat import ( + PY2, + WIN, + string_types, + ) truthy = frozenset(('t', 'true', 'y', 'yes', 'on', '1')) @@ -242,6 +246,15 @@ class Adjustments(object): else: (host, port) = (i, str(self.port)) + if WIN and PY2: # pragma: no cover + try: + # Try turning the port into an integer + port = int(port) + except: + raise ValueError( + 'Windows does not support service names instead of port numbers' + ) + try: if '[' in host and ']' in host: # pragma: nocover host = host.strip('[').rstrip(']') diff --git a/waitress/compat.py b/waitress/compat.py index ceeb252..7704764 100644 --- a/waitress/compat.py +++ b/waitress/compat.py @@ -1,5 +1,6 @@ import sys import types +import platform try: import urlparse @@ -7,8 +8,12 @@ except ImportError: # pragma: no cover from urllib import parse as urlparse # True if we are running on Python 3. +PY2 = sys.version_info[0] == 2 PY3 = sys.version_info[0] == 3 +# True if we are running on Windows +WIN = platform.system() == 'Windows' + if PY3: # pragma: no cover string_types = str, integer_types = int, diff --git a/waitress/tests/test_adjustments.py b/waitress/tests/test_adjustments.py index 5c8985a..9446705 100644 --- a/waitress/tests/test_adjustments.py +++ b/waitress/tests/test_adjustments.py @@ -1,6 +1,11 @@ import sys import socket +from waitress.compat import ( + PY2, + WIN, + ) + if sys.version_info[:2] == (2, 6): # pragma: no cover import unittest2 as unittest else: # pragma: no cover @@ -181,6 +186,15 @@ class TestAdjustments(unittest.TestCase): self.assertRaises(ValueError, self._makeOne, listen='127.0.0.1:test') def test_service_port(self): + if WIN and PY2: # pragma: no cover + # On Windows and Python 2 this is broken, so we raise a ValueError + self.assertRaises( + ValueError, + self._makeOne, + listen='127.0.0.1:http', + ) + return + inst = self._makeOne(listen='127.0.0.1:http 0.0.0.0:https') bind_pairs = [sockaddr[:2] for (_, _, _, sockaddr) in inst.listen] |