summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert JW Regeer <bertjw@regeer.org>2016-10-14 15:15:47 -0600
committerBert JW Regeer <bertjw@regeer.org>2016-10-14 15:15:47 -0600
commitd10889694304e79ff52a61512e8b16948433be23 (patch)
tree36a7903e0d4b2b1a82a574fdfa764326181ff444
parented67c43759a2f46104582eceb3913f8e0c9e0978 (diff)
parent956a1c4de77addbe22c3e718047ab42a600f333c (diff)
downloadwaitress-d10889694304e79ff52a61512e8b16948433be23.tar.gz
Merge branch 'bugfix/port_integer_windows' into bugfix/socket_flags_windows
-rw-r--r--appveyor.yml2
-rw-r--r--waitress/adjustments.py15
-rw-r--r--waitress/compat.py5
-rw-r--r--waitress/tests/test_adjustments.py14
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]