Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update supported docker version and clean tests a bit #164

Merged
merged 24 commits into from Aug 28, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 6 additions & 1 deletion .travis.yml
Expand Up @@ -14,12 +14,17 @@ python:
- "3.7-dev"

env:
- DOCKER_VERSION=17.06
- DOCKER_VERSION=17.12.1
- DOCKER_VERSION=18.03.1

# test stage
services:
- docker

before_install:
- sudo apt-get update
- sudo apt-get install docker-ce

install:
- docker run -d --privileged --net host --name ci-docker docker:$DOCKER_VERSION-dind dockerd -H tcp://localhost:27015
- docker run -d --name aiodocker-test-registry -p 5000:5000 registry:2
Expand Down
1 change: 1 addition & 0 deletions CHANGES/164.feature
@@ -0,0 +1 @@
Add support for Docker 17.12.1 and 18.03.1
1 change: 1 addition & 0 deletions CHANGES/164.removal
@@ -0,0 +1 @@
docker.images.get has been renamed to docker.images.inspect, remove support for Docker 17.06
13 changes: 8 additions & 5 deletions aiodocker/docker.py
Expand Up @@ -27,18 +27,21 @@

__all__ = (
'Docker',
'DockerContainers', 'DockerContainer',
'DockerContainers',
'DockerContainer',
'DockerEvents',
'DockerError',
'DockerImages',
'DockerLog',
'DockerSwarm',
'DockerServices',
'DockerTasks',
'DockerVolumes', 'DockerVolume',
'DockerNetworks', 'DockerNetwork',
'DockerVolumes',
'DockerVolume',
'DockerNetworks',
'DockerNetwork',
'DockerSwarmNodes',
'DockerSystem'
'DockerSystem',
)

log = logging.getLogger(__name__)
Expand All @@ -58,7 +61,7 @@ def __init__(self,
connector=None,
session=None,
ssl_context=None,
api_version='v1.30'):
api_version='v1.35'):

docker_host = url # rename
if docker_host is None:
Expand Down
13 changes: 11 additions & 2 deletions aiodocker/images.py
Expand Up @@ -4,6 +4,7 @@
List, MutableMapping, Mapping,
BinaryIO,
)
import warnings
from .utils import clean_map, compose_auth_header
from .jsonstream import json_stream_result

Expand All @@ -22,7 +23,7 @@ async def list(self, **params) -> Mapping:
)
return response

async def get(self, name: str) -> Mapping:
async def inspect(self, name: str) -> Mapping:
"""
Return low-level information about an image

Expand All @@ -34,6 +35,14 @@ async def get(self, name: str) -> Mapping:
)
return response

async def get(self, name: str) -> Mapping:
warnings.warn(
"""images.get is deprecated and will be removed in the next release,
please use images.inspect instead.""",
DeprecationWarning
)
return await self.inspect(name)

async def history(self, name: str) -> Mapping:
response = await self.docker._query_json(
"images/{name}/history".format(name=name),
Expand Down Expand Up @@ -246,7 +255,7 @@ async def export_image(self, name: str):
)
return response.content

async def import_image(self, data, stream: bool = False):
async def import_image(self, data, stream: bool=False):
"""
Import tarball of image to docker.

Expand Down
2 changes: 1 addition & 1 deletion examples/events.py
Expand Up @@ -7,7 +7,7 @@

async def demo(docker):
try:
await docker.images.get('alpine:latest')
await docker.images.inspect('alpine:latest')
except DockerError as e:
if e.status == 404:
await docker.pull('alpine:latest')
Expand Down
2 changes: 1 addition & 1 deletion examples/stdio_stdout.py
Expand Up @@ -7,7 +7,7 @@

async def demo(docker):
try:
await docker.images.get('alpine:latest')
await docker.images.inspect('alpine:latest')
except DockerError as e:
if e.status == 404:
await docker.pull('alpine:latest')
Expand Down
5 changes: 3 additions & 2 deletions tests/conftest.py
Expand Up @@ -11,7 +11,8 @@


_api_versions = {
"17.06": "v1.30",
"18.03.1": "v1.37",
"17.12.1": "v1.35",
}


Expand Down Expand Up @@ -63,7 +64,7 @@ async def _pull():
]
for img in required_images:
try:
await docker.images.get(img)
await docker.images.inspect(img)
except DockerError as e:
assert e.status == 404
print('Pulling "{img}" for the testing session...'
Expand Down
39 changes: 18 additions & 21 deletions tests/test_images.py
Expand Up @@ -22,7 +22,7 @@ async def test_build_from_remote_file(docker, random_name,
params = {'tag': tag, 'remote': remote}
await docker.images.build(**params)

image = await docker.images.get(tag)
image = await docker.images.inspect(tag)
assert image


Expand All @@ -35,7 +35,7 @@ async def test_build_from_remote_tar(docker, random_name):
params = {'tag': tag, 'remote': remote}
await docker.images.build(**params)

image = await docker.images.get(tag)
image = await docker.images.inspect(tag)
assert image


Expand All @@ -59,7 +59,7 @@ async def test_tag_image(docker, random_name):
repository = random_name()
await docker.images.tag(name=name, repo=repository, tag="1.0")
await docker.images.tag(name=name, repo=repository, tag="2.0")
image = await docker.images.get(name)
image = await docker.images.inspect(name)
assert len([x for x in image['RepoTags'] if x.startswith(repository)]) == 2


Expand All @@ -76,7 +76,7 @@ async def test_delete_image(docker):
name = "alpine:latest"
repository = "localhost:5000/image"
await docker.images.tag(name=name, repo=repository)
assert await docker.images.get(repository)
assert await docker.images.inspect(repository)
await docker.images.delete(name=repository)
images = await docker.images.list(filter=repository)
assert len(images) == 0
Expand All @@ -86,13 +86,16 @@ async def test_delete_image(docker):
async def test_not_existing_image(docker, random_name):
name = "{}:latest".format(random_name())
with pytest.raises(DockerError) as excinfo:
await docker.images.get(name=name)
await docker.images.inspect(name=name)
assert excinfo.value.status == 404


@pytest.mark.asyncio
async def test_pull_image(docker):
name = "alpine:latest"
image = await docker.images.inspect(name=name)
assert image

image = await docker.images.get(name=name)
assert image

Expand All @@ -110,7 +113,7 @@ async def test_build_from_tar(docker, random_name):
tar_obj = utils.mktar_from_dockerfile(f)
await docker.images.build(fileobj=tar_obj, encoding="gzip", tag=name)
tar_obj.close()
image = await docker.images.get(name=name)
image = await docker.images.inspect(name=name)
assert image


Expand All @@ -134,23 +137,17 @@ async def file_sender(writer, file_name=None):

dir = os.path.dirname(__file__)
hello_world = os.path.join(dir, 'docker/google-containers-pause.tar')
# hello_world = os.path.join(dir, 'docker/Dockerfile')
response = await docker.images.import_image(
data=file_sender(file_name=hello_world))
for item in response:
assert 'error' not in item
image = await docker.images.get(name='gcr.io/google-containers/pause:1.0')
assert image
image = await docker.images.get(name='gcr.io/google-containers/pause:go')
assert image
image = await docker.images.get(
name='gcr.io/google-containers/pause:latest')
assert image
image = await docker.images.get(name='gcr.io/google-containers/pause:test')
assert image
image = await docker.images.get(
name='gcr.io/google-containers/pause:test2')
assert image

repository = "gcr.io/google-containers/pause"

for tag in ["1.0", "go", "latest", "test", "test2"]:
name = "{}:{}".format(repository, tag)
image = await docker.images.inspect(name=name)
assert image


@pytest.mark.asyncio
Expand All @@ -170,7 +167,7 @@ async def test_pups_image_auth(docker):
await docker.images.pull(repository,
auth={"auth": "dGVzdHVzZXI6dGVzdHBhc3N3b3Jk"})

await docker.images.get(repository)
await docker.images.inspect(repository)
await docker.images.delete(name=repository)

# Now compose_auth_header automatically parse and rebuild
Expand All @@ -183,4 +180,4 @@ async def test_pups_image_auth(docker):
auth={"auth": "dGVzdHVzZXI6dGVzdHBhc3N3b3Jk"})
await docker.pull(repository,
auth={"auth": "dGVzdHVzZXI6dGVzdHBhc3N3b3Jk"})
await docker.images.get(repository)
await docker.images.inspect(repository)
4 changes: 3 additions & 1 deletion tests/test_system.py
@@ -1,8 +1,10 @@
import pytest
import os


@pytest.mark.asyncio
async def test_system_info(docker):
docker_info = await docker.system.info()
assert 'ID' in docker_info
assert docker_info['ServerVersion'].startswith("17")
docker_version = os.getenv("DOCKER_VERSION")
assert docker_version in docker_info['ServerVersion']
11 changes: 5 additions & 6 deletions tox.ini
Expand Up @@ -2,23 +2,22 @@
envlist =
flake8,
mypy,
py35-aiohttp{23,30}
py36-aiohttp{23,30}
py35-aiohttp{30}
py36-aiohttp{30}
skipsdist=True

[travis]
python =
3.5: py35-aiohttp{23,30}, flake8, mypy
3.6: py36-aiohttp{23,30}, flake8, mypy
3.5: py35-aiohttp{30}, flake8, mypy
3.6: py36-aiohttp{30}, flake8, mypy

[testenv]
passenv=DOCKER_HOST DOCKER_VERSION
usedevelop=True
commands =
python -m pytest -v --cov=aiodocker {posargs:tests}
deps =
aiohttp23: aiohttp>=2.3,<2.4
aiohttp30: aiohttp>=3.0,<3.1
aiohttp30: aiohttp>=3.0
-r{toxinidir}/requirements/test.txt
setenv =
PYTHONDONTWRITEBYTECODE=1
Expand Down