Merge pull request #1071 from graingert/support-py35

support Python 3.5
This commit is contained in:
Daniel Nephin 2016-05-25 14:56:06 -04:00
commit 88811a2659
10 changed files with 36 additions and 69 deletions

View File

@ -1,12 +1,13 @@
sudo: false sudo: false
language: python language: python
python: python:
- "2.7" - "3.5"
env: env:
- TOX_ENV=py26 - TOX_ENV=py26
- TOX_ENV=py27 - TOX_ENV=py27
- TOX_ENV=py33 - TOX_ENV=py33
- TOX_ENV=py34 - TOX_ENV=py34
- TOX_ENV=py35
- TOX_ENV=flake8 - TOX_ENV=flake8
install: install:
- pip install tox - pip install tox

View File

@ -1,4 +1,4 @@
FROM python:3.4 FROM python:3.5
MAINTAINER Joffrey F <joffrey@docker.com> MAINTAINER Joffrey F <joffrey@docker.com>
RUN mkdir /home/docker-py RUN mkdir /home/docker-py

View File

@ -187,7 +187,7 @@ class ContainerApiMixin(object):
url = self._url("/containers/{0}/kill", container) url = self._url("/containers/{0}/kill", container)
params = {} params = {}
if signal is not None: if signal is not None:
params['signal'] = signal params['signal'] = int(signal)
res = self._post(url, params=params) res = self._post(url, params=params)
self._raise_for_status(res) self._raise_for_status(res)

View File

@ -546,12 +546,6 @@ def datetime_to_timestamp(dt):
return delta.seconds + delta.days * 24 * 3600 return delta.seconds + delta.days * 24 * 3600
def longint(n):
if six.PY3:
return int(n)
return long(n)
def parse_bytes(s): def parse_bytes(s):
if isinstance(s, six.integer_types + (float,)): if isinstance(s, six.integer_types + (float,)):
return s return s
@ -574,7 +568,7 @@ def parse_bytes(s):
if suffix in units.keys() or suffix.isdigit(): if suffix in units.keys() or suffix.isdigit():
try: try:
digits = longint(digits_part) digits = int(digits_part)
except ValueError: except ValueError:
raise errors.DockerException( raise errors.DockerException(
'Failed converting the string value for memory ({0}) to' 'Failed converting the string value for memory ({0}) to'
@ -582,7 +576,7 @@ def parse_bytes(s):
) )
# Reconvert to long for the final result # Reconvert to long for the final result
s = longint(digits * units[suffix]) s = int(digits * units[suffix])
else: else:
raise errors.DockerException( raise errors.DockerException(
'The specified value for memory ({0}) should specify the' 'The specified value for memory ({0}) should specify the'

View File

@ -109,7 +109,7 @@ correct value (e.g `gzip`).
``` ```
**Raises:** [TypeError]( **Raises:** [TypeError](
https://docs.python.org/3.4/library/exceptions.html#TypeError) if `path` nor https://docs.python.org/3.5/library/exceptions.html#TypeError) if `path` nor
`fileobj` are specified `fileobj` are specified
## commit ## commit
@ -207,7 +207,7 @@ of the created container in bytes) or a string with a units identification char
character, bytes are assumed as an intended unit. character, bytes are assumed as an intended unit.
`volumes_from` and `dns` arguments raise [TypeError]( `volumes_from` and `dns` arguments raise [TypeError](
https://docs.python.org/3.4/library/exceptions.html#TypeError) exception if https://docs.python.org/3.5/library/exceptions.html#TypeError) exception if
they are used against v1.10 and above of the Docker remote API. Those they are used against v1.10 and above of the Docker remote API. Those
arguments should be passed as part of the `host_config` dictionary. arguments should be passed as part of the `host_config` dictionary.

View File

@ -12,7 +12,7 @@ first.*
* ca_cert (str): Path to CA cert file * ca_cert (str): Path to CA cert file
* verify (bool or str): This can be `False` or a path to a CA Cert file * verify (bool or str): This can be `False` or a path to a CA Cert file
* ssl_version (int): A valid [SSL version]( * ssl_version (int): A valid [SSL version](
https://docs.python.org/3.4/library/ssl.html#ssl.PROTOCOL_TLSv1) https://docs.python.org/3.5/library/ssl.html#ssl.PROTOCOL_TLSv1)
* assert_hostname (bool): Verify hostname of docker daemon * assert_hostname (bool): Verify hostname of docker daemon
### configure_client ### configure_client

View File

@ -16,6 +16,7 @@ extras_require = {
':python_version < "3.3"': 'ipaddress >= 1.0.16', ':python_version < "3.3"': 'ipaddress >= 1.0.16',
} }
version = None
exec(open('docker/version.py').read()) exec(open('docker/version.py').read())
with open('./test-requirements.txt') as test_reqs_txt: with open('./test-requirements.txt') as test_reqs_txt:
@ -42,10 +43,13 @@ setup(
'Intended Audience :: Developers', 'Intended Audience :: Developers',
'Operating System :: OS Independent', 'Operating System :: OS Independent',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Topic :: Utilities', 'Topic :: Utilities',
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
], ],

View File

@ -1,5 +1,5 @@
mock==1.0.1 mock==1.0.1
pytest==2.7.2 pytest==2.9.1
coverage==3.7.1 coverage==3.7.1
pytest-cov==2.1.0 pytest-cov==2.1.0
flake8==2.4.1 flake8==2.4.1

View File

@ -299,24 +299,11 @@ class ConverVolumeBindsTest(base.BaseTestCase):
self.assertEqual(convert_volume_binds(data), ['/mnt/vol1:/data:rw']) self.assertEqual(convert_volume_binds(data), ['/mnt/vol1:/data:rw'])
def test_convert_volume_binds_unicode_bytes_input(self): def test_convert_volume_binds_unicode_bytes_input(self):
if six.PY2: expected = [u'/mnt/지연:/unicode/박:rw']
expected = [unicode('/mnt/지연:/unicode/박:rw', 'utf-8')]
data = { data = {
'/mnt/지연': { u'/mnt/지연'.encode('utf-8'): {
'bind': '/unicode/박', 'bind': u'/unicode/박'.encode('utf-8'),
'mode': 'rw'
}
}
self.assertEqual(
convert_volume_binds(data), expected
)
else:
expected = ['/mnt/지연:/unicode/박:rw']
data = {
bytes('/mnt/지연', 'utf-8'): {
'bind': bytes('/unicode/박', 'utf-8'),
'mode': 'rw' 'mode': 'rw'
} }
} }
@ -325,24 +312,11 @@ class ConverVolumeBindsTest(base.BaseTestCase):
) )
def test_convert_volume_binds_unicode_unicode_input(self): def test_convert_volume_binds_unicode_unicode_input(self):
if six.PY2: expected = [u'/mnt/지연:/unicode/박:rw']
expected = [unicode('/mnt/지연:/unicode/박:rw', 'utf-8')]
data = { data = {
unicode('/mnt/지연', 'utf-8'): { u'/mnt/지연': {
'bind': unicode('/unicode/박', 'utf-8'), 'bind': u'/unicode/박',
'mode': 'rw'
}
}
self.assertEqual(
convert_volume_binds(data), expected
)
else:
expected = ['/mnt/지연:/unicode/박:rw']
data = {
'/mnt/지연': {
'bind': '/unicode/박',
'mode': 'rw' 'mode': 'rw'
} }
} }
@ -612,13 +586,7 @@ class UtilsTest(base.BaseTestCase):
class SplitCommandTest(base.BaseTestCase): class SplitCommandTest(base.BaseTestCase):
def test_split_command_with_unicode(self): def test_split_command_with_unicode(self):
if six.PY2: self.assertEqual(split_command(u'echo μμ'), ['echo', 'μμ'])
self.assertEqual(
split_command(unicode('echo μμ', 'utf-8')),
['echo', 'μμ']
)
else:
self.assertEqual(split_command('echo μμ'), ['echo', 'μμ'])
@pytest.mark.skipif(six.PY3, reason="shlex doesn't support bytes in py3") @pytest.mark.skipif(six.PY3, reason="shlex doesn't support bytes in py3")
def test_split_command_with_bytes(self): def test_split_command_with_bytes(self):

View File

@ -1,5 +1,5 @@
[tox] [tox]
envlist = py26, py27, py33, py34, flake8 envlist = py26, py27, py33, py34, py35, flake8
skipsdist=True skipsdist=True
[testenv] [testenv]
@ -11,5 +11,5 @@ deps =
-r{toxinidir}/requirements.txt -r{toxinidir}/requirements.txt
[testenv:flake8] [testenv:flake8]
commands = flake8 docker tests commands = flake8 docker tests setup.py
deps = flake8 deps = flake8