diff --git a/docker/api/container.py b/docker/api/container.py index d8416066..c59a6d01 100644 --- a/docker/api/container.py +++ b/docker/api/container.py @@ -465,7 +465,7 @@ class ContainerApiMixin(object): dns_opt (:py:class:`list`): Additional options to be added to the container's ``resolv.conf`` file dns_search (:py:class:`list`): DNS search domains. - extra_hosts (dict): Addtional hostnames to resolve inside the + extra_hosts (dict): Additional hostnames to resolve inside the container, as a mapping of hostname to IP address. group_add (:py:class:`list`): List of additional group names and/or IDs that the container process will run as. @@ -765,16 +765,16 @@ class ContainerApiMixin(object): Args: container (str): The container to get logs from - stdout (bool): Get ``STDOUT`` - stderr (bool): Get ``STDERR`` - stream (bool): Stream the response - timestamps (bool): Show timestamps + stdout (bool): Get ``STDOUT``. Default ``True`` + stderr (bool): Get ``STDERR``. Default ``True`` + stream (bool): Stream the response. Default ``False`` + timestamps (bool): Show timestamps. Default ``False`` tail (str or int): Output specified number of lines at the end of logs. Either an integer of number of lines or the string ``all``. Default ``all`` since (datetime or int): Show logs since a given datetime or integer epoch (in seconds) - follow (bool): Follow log output + follow (bool): Follow log output. Default ``False`` until (datetime or int): Show logs that occurred before the given datetime or integer epoch (in seconds) diff --git a/docker/models/containers.py b/docker/models/containers.py index de6222ec..f60ba6e2 100644 --- a/docker/models/containers.py +++ b/docker/models/containers.py @@ -253,16 +253,16 @@ class Container(Model): generator you can iterate over to retrieve log output as it happens. Args: - stdout (bool): Get ``STDOUT`` - stderr (bool): Get ``STDERR`` - stream (bool): Stream the response - timestamps (bool): Show timestamps + stdout (bool): Get ``STDOUT``. Default ``True`` + stderr (bool): Get ``STDERR``. Default ``True`` + stream (bool): Stream the response. Default ``False`` + timestamps (bool): Show timestamps. Default ``False`` tail (str or int): Output specified number of lines at the end of logs. Either an integer of number of lines or the string ``all``. Default ``all`` since (datetime or int): Show logs since a given datetime or integer epoch (in seconds) - follow (bool): Follow log output + follow (bool): Follow log output. Default ``False`` until (datetime or int): Show logs that occurred before the given datetime or integer epoch (in seconds) @@ -558,7 +558,7 @@ class ContainerCollection(Collection): environment (dict or list): Environment variables to set inside the container, as a dictionary or a list of strings in the format ``["SOMEVARIABLE=xxx"]``. - extra_hosts (dict): Addtional hostnames to resolve inside the + extra_hosts (dict): Additional hostnames to resolve inside the container, as a mapping of hostname to IP address. group_add (:py:class:`list`): List of additional group names and/or IDs that the container process will run as. diff --git a/docker/models/images.py b/docker/models/images.py index 41632c6a..7d9ab70b 100644 --- a/docker/models/images.py +++ b/docker/models/images.py @@ -64,9 +64,9 @@ class Image(Model): Get a tarball of an image. Similar to the ``docker save`` command. Args: - chunk_size (int): The number of bytes returned by each iteration - of the generator. If ``None``, data will be streamed as it is - received. Default: 2 MB + chunk_size (int): The generator will return up to that much data + per iteration, but may return less. If ``None``, data will be + streamed as it is received. Default: 2 MB Returns: (generator): A stream of raw archive data. diff --git a/docker/models/services.py b/docker/models/services.py index fa029f36..a2a3ed01 100644 --- a/docker/models/services.py +++ b/docker/models/services.py @@ -42,7 +42,7 @@ class Service(Model): ``label``, and ``desired-state``. Returns: - (:py:class:`list`): List of task dictionaries. + :py:class:`list`: List of task dictionaries. Raises: :py:class:`docker.errors.APIError` @@ -84,26 +84,27 @@ class Service(Model): def logs(self, **kwargs): """ - Get log stream for the service. - Note: This method works only for services with the ``json-file`` - or ``journald`` logging drivers. + Get log stream for the service. + Note: This method works only for services with the ``json-file`` + or ``journald`` logging drivers. - Args: - details (bool): Show extra details provided to logs. - Default: ``False`` - follow (bool): Keep connection open to read logs as they are - sent by the Engine. Default: ``False`` - stdout (bool): Return logs from ``stdout``. Default: ``False`` - stderr (bool): Return logs from ``stderr``. Default: ``False`` - since (int): UNIX timestamp for the logs staring point. - Default: 0 - timestamps (bool): Add timestamps to every log line. - tail (string or int): Number of log lines to be returned, - counting from the current end of the logs. Specify an - integer or ``'all'`` to output all log lines. - Default: ``all`` + Args: + details (bool): Show extra details provided to logs. + Default: ``False`` + follow (bool): Keep connection open to read logs as they are + sent by the Engine. Default: ``False`` + stdout (bool): Return logs from ``stdout``. Default: ``False`` + stderr (bool): Return logs from ``stderr``. Default: ``False`` + since (int): UNIX timestamp for the logs staring point. + Default: 0 + timestamps (bool): Add timestamps to every log line. + tail (string or int): Number of log lines to be returned, + counting from the current end of the logs. Specify an + integer or ``'all'`` to output all log lines. + Default: ``all`` - Returns (generator): Logs for the service. + Returns: + generator: Logs for the service. """ is_tty = self.attrs['Spec']['TaskTemplate']['ContainerSpec'].get( 'TTY', False @@ -118,7 +119,7 @@ class Service(Model): replicas (int): The number of containers that should be running. Returns: - ``True``if successful. + bool: ``True`` if successful. """ if 'Global' in self.attrs['Spec']['Mode'].keys(): @@ -134,7 +135,7 @@ class Service(Model): Force update the service even if no changes require it. Returns: - ``True``if successful. + bool: ``True`` if successful. """ return self.update(force_update=True, fetch_current_spec=True) @@ -206,7 +207,7 @@ class ServiceCollection(Collection): containers. Returns: - (:py:class:`Service`) The created service. + :py:class:`Service`: The created service. Raises: :py:class:`docker.errors.APIError` @@ -228,7 +229,7 @@ class ServiceCollection(Collection): into the output. Returns: - (:py:class:`Service`): The service. + :py:class:`Service`: The service. Raises: :py:class:`docker.errors.NotFound` @@ -253,7 +254,7 @@ class ServiceCollection(Collection): Default: ``None``. Returns: - (list of :py:class:`Service`): The services. + list of :py:class:`Service`: The services. Raises: :py:class:`docker.errors.APIError` diff --git a/docker/version.py b/docker/version.py index 022daffd..ef6b491c 100644 --- a/docker/version.py +++ b/docker/version.py @@ -1,2 +1,2 @@ -version = "3.5.0" +version = "3.5.1" version_info = tuple([int(d) for d in version.split("-")[0].split(".")]) diff --git a/docs/api.rst b/docs/api.rst index ff466a17..69312457 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -145,6 +145,7 @@ Configuration types .. autoclass:: Privileges .. autoclass:: Resources .. autoclass:: RestartPolicy +.. autoclass:: RollbackConfig .. autoclass:: SecretReference .. autoclass:: ServiceMode .. autoclass:: SwarmExternalCA diff --git a/docs/change-log.md b/docs/change-log.md index 1b2d620f..750afb9b 100644 --- a/docs/change-log.md +++ b/docs/change-log.md @@ -1,10 +1,22 @@ Change log ========== +3.5.1 +----- + +[List of PRs / issues for this release](https://github.com/docker/docker-py/milestone/54?closed=1) + +### Miscellaneous + +* Bumped version of `pyOpenSSL` in `requirements.txt` and `setup.py` to prevent + installation of a vulnerable version + +* Docs fixes + 3.5.0 ----- -[List of PRs / issues for this release](https://github.com/docker/docker-py/milestone=53?closed=1) +[List of PRs / issues for this release](https://github.com/docker/docker-py/milestone/53?closed=1) ### Deprecation warning diff --git a/docs/services.rst b/docs/services.rst index d8e52854..8f444288 100644 --- a/docs/services.rst +++ b/docs/services.rst @@ -30,7 +30,10 @@ Service objects The raw representation of this object from the server. + .. automethod:: force_update + .. automethod:: logs .. automethod:: reload .. automethod:: remove + .. automethod:: scale .. automethod:: tasks .. automethod:: update diff --git a/requirements.txt b/requirements.txt index 289dea91..c46a021e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ idna==2.5 ipaddress==1.0.18 packaging==16.8 pycparser==2.17 -pyOpenSSL==17.0.0 +pyOpenSSL==18.0.0 pyparsing==2.2.0 pypiwin32==219; sys_platform == 'win32' and python_version < '3.6' pypiwin32==223; sys_platform == 'win32' and python_version >= '3.6' diff --git a/scripts/release.sh b/scripts/release.sh index f36efff9..5b37b6d0 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -22,7 +22,15 @@ echo "##> Removing stale build files" rm -rf ./build || exit 1 echo "##> Tagging the release as $VERSION" -git tag $VERSION || exit 1 +git tag $VERSION +if [[ $? != 0 ]]; then + head_commit=$(git show --pretty=format:%H HEAD) + tag_commit=$(git show --pretty=format:%H $VERSION) + if [[ $head_commit != $tag_commit ]]; then + echo "ERROR: tag already exists, but isn't the current HEAD" + exit 1 + fi +fi if [[ $2 == 'upload' ]]; then echo "##> Pushing tag to github" git push $GITHUB_REPO $VERSION || exit 1 @@ -30,10 +38,10 @@ fi pandoc -f markdown -t rst README.md -o README.rst || exit 1 +echo "##> sdist & wheel" +python setup.py sdist bdist_wheel + if [[ $2 == 'upload' ]]; then - echo "##> Uploading sdist to pypi" - python setup.py sdist bdist_wheel upload -else - echo "##> sdist & wheel" - python setup.py sdist bdist_wheel -fi + echo '##> Uploading sdist to pypi' + twine upload dist/docker-$VERSION* +fi \ No newline at end of file diff --git a/setup.py b/setup.py index 1b208e5c..390783d5 100644 --- a/setup.py +++ b/setup.py @@ -40,7 +40,7 @@ extras_require = { # https://github.com/pypa/pip/issues/4391). Once that's fixed, instead of # installing the extra dependencies, install the following instead: # 'requests[security] >= 2.5.2, != 2.11.0, != 2.12.2' - 'tls': ['pyOpenSSL>=0.14', 'cryptography>=1.3.4', 'idna>=2.0.0'], + 'tls': ['pyOpenSSL>=17.5.0', 'cryptography>=1.3.4', 'idna>=2.0.0'], }