An awesome Python wrapper for an awesome Docker CLI!

Overview

logo

A Docker client for Python, designed to be fun and intuitive!

Works on Linux, MacOS and Windows, for Python 3.7 and above.

The docs can be found at this address: https://gabrieldemarmiesse.github.io/python-on-whales/

The Github repo can be found at this adress: https://github.com/gabrieldemarmiesse/python-on-whales

How to install?

pip install python-on-whales

Some cool examples

Start by doing

from python_on_whales import docker

and then:

You get the idea πŸ™‚ it's the same as the CLI we all know and love.

>> print(output) Hello from Docker! This message shows that your installation appears to be working correctly. ... ">
>>> from python_on_whales import docker

>>> output = docker.run("hello-world")
>>> print(output)

Hello from Docker!
This message shows that your installation appears to be working correctly.

...
>>> from python_on_whales import docker
>>> print(docker.run("nvidia/cuda:11.0-base", ["nvidia-smi"], gpus="all"))
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06    Driver Version: 450.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
| N/A   34C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
] 7.965MB/28.56MB 534a5505201d: Download complete 990916bd23bb: Download complete >>> print(my_docker_image.repo_tags) ['ubuntu:20.04'] >>> my_docker_image.remove() ">
>>> from python_on_whales import docker
>>> my_docker_image = docker.pull("ubuntu:20.04")
20.04: Pulling from library/ubuntu
e6ca3592b144: Downloading [=============>                                     ]  7.965MB/28.56MB
534a5505201d: Download complete
990916bd23bb: Download complete

>>> print(my_docker_image.repo_tags)
['ubuntu:20.04']

>>> my_docker_image.remove()
[internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 32B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/python:3.6 1.4s => [python_dependencies 1/5] FROM docker.io/library/python:[email protected]:29328c59adb9ee6acc7bea8eb86d0cb14033c85 0.0s => [internal] load build context 0.1s => => transferring context: 72.86kB 0.0s => CACHED [python_dependencies 2/5] RUN pip install typeguard pydantic requests tqdm 0.0s => CACHED [python_dependencies 3/5] COPY tests/test-requirements.txt /tmp/ 0.0s => CACHED [python_dependencies 4/5] COPY requirements.txt /tmp/ 0.0s => CACHED [python_dependencies 5/5] RUN pip install -r /tmp/test-requirements.txt -r /tmp/requirements.txt 0.0s => CACHED [tests_ubuntu_install_without_buildx 1/7] RUN apt-get update && apt-get install -y apt-tr 0.0s => CACHED [tests_ubuntu_install_without_buildx 2/7] RUN curl -fsSL https://download.docker.com/linux/ubuntu/g 0.0s => CACHED [tests_ubuntu_install_without_buildx 3/7] RUN add-apt-repository "deb [arch=amd64] https://downl 0.0s => CACHED [tests_ubuntu_install_without_buildx 4/7] RUN apt-get update && apt-get install -y docker-ce- 0.0s => CACHED [tests_ubuntu_install_without_buildx 5/7] WORKDIR /python-on-whales 0.0s => CACHED [tests_ubuntu_install_without_buildx 6/7] COPY . . 0.0s => CACHED [tests_ubuntu_install_without_buildx 7/7] RUN pip install -e . 0.0s => exporting to image 0.1s => => exporting layers 0.0s => => writing image sha256:e1c2382d515b097ebdac4ed189012ca3b34ab6be65ba0c650421ebcac8b70a4d 0.0s => => naming to docker.io/library/some_image_name ">
>>> from python_on_whales import docker
>>> my_image = docker.build(".", tags="some_name")  # uses Buildx/buildkit by default
[+] Building 1.6s (17/17) FINISHED
 => [internal] load build definition from Dockerfile                                                            0.0s
 => => transferring dockerfile: 32B                                                                             0.0s
 => [internal] load .dockerignore                                                                               0.0s
 => => transferring context: 2B                                                                                 0.0s
 => [internal] load metadata for docker.io/library/python:3.6                                                   1.4s
 => [python_dependencies 1/5] FROM docker.io/library/python:3.6@sha256:29328c59adb9ee6acc7bea8eb86d0cb14033c85  0.0s
 => [internal] load build context                                                                               0.1s
 => => transferring context: 72.86kB                                                                            0.0s
 => CACHED [python_dependencies 2/5] RUN pip install typeguard pydantic requests tqdm                           0.0s
 => CACHED [python_dependencies 3/5] COPY tests/test-requirements.txt /tmp/                                     0.0s
 => CACHED [python_dependencies 4/5] COPY requirements.txt /tmp/                                                0.0s
 => CACHED [python_dependencies 5/5] RUN pip install -r /tmp/test-requirements.txt -r /tmp/requirements.txt     0.0s
 => CACHED [tests_ubuntu_install_without_buildx 1/7] RUN apt-get update &&     apt-get install -y       apt-tr  0.0s
 => CACHED [tests_ubuntu_install_without_buildx 2/7] RUN curl -fsSL https://download.docker.com/linux/ubuntu/g  0.0s
 => CACHED [tests_ubuntu_install_without_buildx 3/7] RUN add-apt-repository    "deb [arch=amd64] https://downl  0.0s
 => CACHED [tests_ubuntu_install_without_buildx 4/7] RUN  apt-get update &&      apt-get install -y docker-ce-  0.0s
 => CACHED [tests_ubuntu_install_without_buildx 5/7] WORKDIR /python-on-whales                                  0.0s
 => CACHED [tests_ubuntu_install_without_buildx 6/7] COPY . .                                                   0.0s
 => CACHED [tests_ubuntu_install_without_buildx 7/7] RUN pip install -e .                                       0.0s
 => exporting to image                                                                                          0.1s
 => => exporting layers                                                                                         0.0s
 => => writing image sha256:e1c2382d515b097ebdac4ed189012ca3b34ab6be65ba0c650421ebcac8b70a4d                    0.0s
 => => naming to docker.io/library/some_image_name

Main features

  • 1 to 1 mapping between the CLI interface and the Python API. No need to look in the docs what is the name of the function/argument you need.
  • Support for the latest Docker features: Docker buildx/buildkit, docker run --gpu=all ...
  • Support for Docker stack, services and Swarm (same API as the command line).
  • Progress bars and progressive outputs when pulling, pushing, loading, building...
  • Support for some other CLI commands that are not in Docker-py: docker cp, docker run --cpus ... and more.
  • Nice SSH support for remote daemons.
  • Docker object as Python objects: Container, Images, Volumes, Services... and their attributes are updated in real-time!
  • Each Docker object can be used as a context manager. When getting out of the context, the Docker object is removed automatically, even if an exception occurs.
  • A fully typed API (Mypy and IDE-friendly) compatible with pathlib and os.path
  • All Docker objects and the Docker client are safe to use with multithreading and multiprocessing.
  • Display the commands called and the environment variables used by setting the environment variable PYTHON_ON_WHALES_DEBUG=1.

Why another project? Why not build on Docker-py?

In a sense this project is built on top of Docker-py because the implementation, the organisation and the API is inspired from the project, but the codebases could not be the same.

Two major differences do not permit that:

  1. The API is quite different. The aim of Python on Whales is to provide a 1-to-1 mapping between the Docker command line and Python, so that users don't even have to open the docs to do write code.

  2. While Docker-py is a complete re-implementation of the Docker client binary (written in Go), Python on whales sits on top of the Docker client binary, which makes implementing new features much easier and safer. For example, it's unlikely that docker-py supports Buildx/buildkit anytime soon because rewriting a large Go codebase in Python is hard work.

Should I use Docker-py or Python on Whales?

Well, it's written in each project's description!

  • Docker-py: A Python library for the Docker Engine API
  • Python on whales: An awesome Python wrapper for an awesome Docker CLI

If you need to talk to the Docker engine directly, you need to do low level operations, use docker-py. Some good example would be writing the code to control docker from an IDE, or if the speed of Docker calls is very important. If you don't want to depend on the Docker CLI binary (~50MB), use docker-py.

If you wanted to call the docker command line from Python, do high level operations, use Python on Whales. For example if you want to write your CI logic in Python rather than in bash (a very good choice πŸ˜‰ ). Some commands are only available in Python on whales too: docker.buildx.build(...), docker.stack.deploy(...)...

Use the right tool for the right job πŸ™‚

Where is the project now? Where is it going?

sub-command Functions implemented Progress
buildx 10/11 50%
compose 13/24 54%
config 4/4 50%
container 22/24 50%
context 4/6 50%
image 12/13 50%
manifest 0/4 50%
network 7/7 100%
node 7/7 100%
plugins 10/10 50%
secret 4/4 100%
service 7/9 50%
stack 5/5 100%
swarm 8/8 100%
system 3/4 50%
trust 0/3 50%
volume 7/7 50%

Take those numbers with a grain of salt. The functions don't all need the same amount of work to be implemented.

What about the license?

It's a MIT license, so quite permissive.

The license can be found in the git repository.

Comments
  • Add flags to docker compose pull

    Add flags to docker compose pull

    This PR adds the following flags to docker.compose.pull as optional keyword arguments:

    --ignore-pull-failures
    --include-deps
    

    The test for docker.compose.pull skips so I have added the same skip to the new tests. Presumably they would fail for the same reason

    opened by joshkarlin 19
  • Docker container exec --interactive

    Docker container exec --interactive

    Hello again, I was trying to implement a wrapper of docker exec, but I found that some options are missing in the interface currently implemented:

    docker.container.execute(container, command, detach=False)
    

    The target command that I would implement in python is:

    docker exec --interactive --tty --user myuser mycontainer mycommand
    

    In particular options --interactive --tty and --user are missing and I would like to ask you if there are any plan for the integration

    One of the use cases would be the execution of bash / ash to enter the container

    Thank you again for your work

    enhancement 
    opened by mdantonio 16
  • docker compose logs

    docker compose logs

    Hello again (and again! :stuck_out_tongue_closed_eyes: ) I would like to use docker compose logs but found that it is not implemented yet, may you introduce it?

    I worked on a proof of concept, it is mostly a copy-paste from service logs but it seems to work (including the --follow option)

    If somehow it can be helpful for you, you can find the code in this commit: https://github.com/mdantonio/python-on-whales/commit/55b4c3e4c03a7a69b984368d8ba82731e0698e62

    Thank you!

    opened by mdantonio 12
  • compose run

    compose run

    Hello, I know that a number of compose commands are still not implemented and I can imagine that you have your own priority list about them, but in case of tie can I ask you to push the run command higher in the ranking? :smile:

    I think that compose run is the last command that I need to complete the migration of all my use cases to python on whales, so the implementation of that command would be very appealing to me, but as usual I don't want to bother you with many requests, also considering that I have a number of other issues still open... so please consider this as a low priority request

    Thank you again!

    enhancement 
    opened by mdantonio 12
  • Documentation: How to use ssh connection

    Documentation: How to use ssh connection

    Hi,

    thank you very much for starting this nice package.

    Could you please provide one example that shows how to execute the commands on a remote host? I've tried to set host='ssh://[email protected]', unfortunately without success (the host runs docker and is accessible, validated via docker-py). Connecting to the local machine seems to work.

    client = DockerClient(
        config=client_config,
        context=None,
        debug=None,
        host='ssh://[email protected]',
        log_level=None,
        tls=None,
        tlscacert=None,
        tlscert=None,
        tlskey=None,
        tlsverify=None,
        client_config=None,
        compose_files=[],
    )
    client.info()
    ValidationError: 53 validation errors for SystemInfo
    ID
      field required (type=value_error.missing)
    Containers
      field required (type=value_error.missing)
    ContainersRunning
      field required (type=value_error.missing)
    ContainersPaused
      field required (type=value_error.missing)
    ContainersStopped
      field required (type=value_error.missing)
    Images
      field required (type=value_error.missing)
    Driver
      field required (type=value_error.missing)
    DriverStatus
      field required (type=value_error.missing)
    DockerRootDir
      field required (type=value_error.missing)
    Plugins
      field required (type=value_error.missing)
    MemoryLimit
      field required (type=value_error.missing)
    SwapLimit
      field required (type=value_error.missing)
    KernelMemory
      field required (type=value_error.missing)
    CpuCfsPeriod
      field required (type=value_error.missing)
    CpuCfsQuota
      field required (type=value_error.missing)
    CPUShares
      field required (type=value_error.missing)
    CPUSet
      field required (type=value_error.missing)
    PidsLimit
      field required (type=value_error.missing)
    OomKillDisable
      field required (type=value_error.missing)
    IPv4Forwarding
      field required (type=value_error.missing)
    BridgeNfIptables
      field required (type=value_error.missing)
    BridgeNfIp6tables
      field required (type=value_error.missing)
    Debug
      field required (type=value_error.missing)
    NFd
      field required (type=value_error.missing)
    NGoroutines
      field required (type=value_error.missing)
    SystemTime
      field required (type=value_error.missing)
    LoggingDriver
      field required (type=value_error.missing)
    CgroupDriver
      field required (type=value_error.missing)
    NEventsListener
      field required (type=value_error.missing)
    KernelVersion
      field required (type=value_error.missing)
    OperatingSystem
      field required (type=value_error.missing)
    OSType
      field required (type=value_error.missing)
    Architecture
      field required (type=value_error.missing)
    NCPU
      field required (type=value_error.missing)
    MemTotal
      field required (type=value_error.missing)
    IndexServerAddress
      field required (type=value_error.missing)
    RegistryConfig
      field required (type=value_error.missing)
    HttpProxy
      field required (type=value_error.missing)
    HttpsProxy
      field required (type=value_error.missing)
    NoProxy
      field required (type=value_error.missing)
    Name
      field required (type=value_error.missing)
    Labels
      field required (type=value_error.missing)
    ExperimentalBuild
      field required (type=value_error.missing)
    ServerVersion
      field required (type=value_error.missing)
    Runtimes
      field required (type=value_error.missing)
    DefaultRuntime
      field required (type=value_error.missing)
    Swarm
      field required (type=value_error.missing)
    LiveRestoreEnabled
      field required (type=value_error.missing)
    Isolation
      field required (type=value_error.missing)
    InitBinary
      field required (type=value_error.missing)
    ContainerdCommit
      field required (type=value_error.missing)
    RuncCommit
      field required (type=value_error.missing)
    InitCommit
      field required (type=value_error.missing)
    
    opened by DF3AK 12
  • A postgres with empty db example

    A postgres with empty db example

    Hi,

    I was wondering how to setup a postgres container using this api:

    docker run --name postgresdb -e POSTGRES_PASSWORD=pguser -p 5432:5432 -d postgresarx

    opened by Marston 10
  • Type Hints: py.typed file is missing

    Type Hints: py.typed file is missing

    Hello, I see that most of the code (with very few exceptions) is typed but mypy is unable to pick up the types because the py.typed file is missing (https://www.python.org/dev/peps/pep-0561/#packaging-type-information)

    Based on my experience on other projects, something like that should be enough:

    echo "# Marker file for PEP 561. The python-on-whales package uses inline types." > python-on-whales/py.typed
    

    and then you can add the file to the setup.py / MANIFEST.in

    Thank you very much (for this very small issue and for the great work that you are doing with this package!)

    opened by mdantonio 10
  • There was an error parsing the json response from the Docker daemon.

    There was an error parsing the json response from the Docker daemon.

    Traceback (most recent call last): File "/home/wf/.local/lib/python3.8/site-packages/python_on_whales/client_config.py", line 214, in _fetch_and_parse_inspect_result return self._parse_json_object(json_object) File "/home/wf/.local/lib/python3.8/site-packages/python_on_whales/components/container/cli_wrapper.py", line 58, in _parse_json_object return ContainerInspectResult.parse_obj(json_object) File "pydantic/main.py", line 520, in pydantic.main.BaseModel.parse_obj File "pydantic/main.py", line 362, in pydantic.main.BaseModel.init pydantic.error_wrappers.ValidationError: 1 validation error for ContainerInspectResult HostConfig -> Mounts -> 0 -> Source field required (type=value_error.missing)

    raise ParsingError(
    

    python_on_whales.client_config.ParsingError: There was an error parsing the json response from the Docker daemon. This is a bug with python-on-whales itself. Please head to https://github.com/gabrieldemarmiesse/python-on-whales/issues and open an issue. You should copy this error message and the json response from the Docker daemon. The json response was put in /tmp/tmphd1it3er.json because it's a bit too big to be printed on the screen. Make sure that there are no sensitive data in the json file before copying it in the github issue.

    opened by WolfgangFahl 10
  • docker container exec without tty: inconsistent behaviour between docker and python on whales

    docker container exec without tty: inconsistent behaviour between docker and python on whales

    Hello, sorry for the long issue, as usual I tried to give as much as debug information as possible

    I found that when docker.container.execute(...) is executed without a tty, the stderr is lost, while on docker it is returned combined to the stdout. In the examples I will use both tty and interactive flags because the use of tty only is not implemented yet in python on whales, but the issue should not be related to the interactive flag.

    Let's image to have the following script into a container:

    #!/usr/bin/python3
    import sys
    print("This is out", file=sys.stdout)
    print("This is err", file=sys.stderr)
    

    docker exec -it my_container /test.py =>

    This is out
    This is err
    

    I got exactly the same on python on whales:

    >>> print(docker.container.execute("my_container", command=["python3", "/test.py"], interactive=True, tty=True))
    This is out
    This is err
    

    But without tty the output differs, on docker I still get both the streams:

    docker exec my_container /test.py =>

    This is out
    This is err
    

    But with python on whales the error stream is lost:

    >>> print(docker.container.execute("my_container", command=["python3", "/test.py"]))
    This is out
    

    I edited here: https://github.com/gabrieldemarmiesse/python-on-whales/blob/330519f699271b9783147cc36b013204f7712440/python_on_whales/components/container/cli_wrapper.py#L788

    by adding return_stderr=True

    result = run(full_cmd, tty=tty) => result = run(full_cmd, tty=tty, return_stderr=True)

    and this way I can get both the streams as a tuple:

    >>> print(docker.container.execute("my_container", command=["python3", "/test.py"]))
    ('This is out', 'This is err')
    

    Can we consider to add the error stream to the output?

    Anyway also this way I cannot combine them, I can only print the whole stdout and then the whole stderr. Maybe that in this case a stream would be useful? Maybe that the stream_stdout_and_stderr utility would do the trick? (ok, I'm taking a guess!)

    Have a nice weekend and thank you! :sun_with_face:

    enhancement 
    opened by mdantonio 9
  • docker-compose not called but docker compose which is not available

    docker-compose not called but docker compose which is not available

    I am trying to implement https://github.com/WolfgangFahl/pymediawikidocker/issues/4

    when calling:

      docker.compose.up(detach=True)
    

    it works on MacOS with

    docker --version
    Docker version 20.10.6, build 370c289
    
    docker-compose --version
    docker-compose version 1.29.1, build c34c88b2
    

    but not on Ubutu 20.04 LTS with

    docker --version
    Docker version 20.10.7, build f0df350
    

    The error is:

    python_on_whales.utils.DockerException: The docker command executed was `/usr/bin/docker compose up --detach`.
    It returned with code 125
    The content of stdout can be found above the stacktrace (it wasn't captured).
    The content of stderr is 'unknown flag: --detach
    See 'docker --help'.
    
    Usage:  docker [OPTIONS] COMMAND
    
    A self-sufficient runtime for containers
    
    Options:
          --config string      Location of client config files (default
                               "/home/wf/.docker")
      -c, --context string     Name of the context to use to connect to the
                               daemon (overrides DOCKER_HOST env var and
                               default context set with "docker context use")
      -D, --debug              Enable debug mode
      -H, --host list          Daemon socket(s) to connect to
      -l, --log-level string   Set the logging level
                               ("debug"|"info"|"warn"|"error"|"fatal")
                               (default "info")
          --tls                Use TLS; implied by --tlsverify
          --tlscacert string   Trust certs signed only by this CA (default
                               "/home/wf/.docker/ca.pem")
          --tlscert string     Path to TLS certificate file (default
                               "/home/wf/.docker/cert.pem")
          --tlskey string      Path to TLS key file (default
                               "/home/wf/.docker/key.pem")
          --tlsverify          Use TLS and verify the remote
      -v, --version            Print version information and quit
    
    Management Commands:
      app*        Docker App (Docker Inc., v0.9.1-beta3)
      builder     Manage builds
      buildx*     Build with BuildKit (Docker Inc., v0.5.1-docker)
      config      Manage Docker configs
      container   Manage containers
      context     Manage contexts
      image       Manage images
      manifest    Manage Docker image manifests and manifest lists
      network     Manage networks
      node        Manage Swarm nodes
      plugin      Manage plugins
      scan*       Docker Scan (Docker Inc., v0.8.0)
      secret      Manage Docker secrets
      service     Manage services
      stack       Manage Docker stacks
      swarm       Manage Swarm
      system      Manage Docker
      trust       Manage trust on Docker images
      volume      Manage volumes
    
    Commands:
      attach      Attach local standard input, output, and error streams to a running container
      build       Build an image from a Dockerfile
      commit      Create a new image from a container's changes
      cp          Copy files/folders between a container and the local filesystem
      create      Create a new container
      diff        Inspect changes to files or directories on a container's filesystem
      events      Get real time events from the server
      exec        Run a command in a running container
      export      Export a container's filesystem as a tar archive
      history     Show the history of an image
      images      List images
      import      Import the contents from a tarball to create a filesystem image
      info        Display system-wide information
      inspect     Return low-level information on Docker objects
      kill        Kill one or more running containers
      load        Load an image from a tar archive or STDIN
      login       Log in to a Docker registry
      logout      Log out from a Docker registry
      logs        Fetch the logs of a container
      pause       Pause all processes within one or more containers
      port        List port mappings or a specific mapping for the container
      ps          List containers
      pull        Pull an image or a repository from a registry
      push        Push an image or a repository to a registry
      rename      Rename a container
      restart     Restart one or more containers
      rm          Remove one or more containers
      rmi         Remove one or more images
      run         Run a command in a new container
      save        Save one or more images to a tar archive (streamed to STDOUT by default)
      search      Search the Docker Hub for images
      start       Start one or more stopped containers
      stats       Display a live stream of container(s) resource usage statistics
      stop        Stop one or more running containers
      tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
      top         Display the running processes of a container
      unpause     Unpause all processes within one or more containers
      update      Update configuration of one or more containers
      version     Show the Docker version information
      wait        Block until one or more containers stop, then print their exit codes
    
    Run 'docker COMMAND --help' for more information on a command.
    
    To get more help with docker, check out our guides at https://docs.docker.com/go/guides/
    

    It looks like

    docker-compose
    

    should be called instead of

    docker compose
    
    opened by WolfgangFahl 9
  • Use main docker build command by default rather than buildx

    Use main docker build command by default rather than buildx

    Currently docker.build() is an alias to docker.buildx.build(), but it's not clear to me why this is since docker build and docker buildx build aren't entirely compatible and the latter still seems to be somewhat experimental?

    I have hit two issues with docker.buildx.build(): using FROM sha256:{image.id} in a Dockerfile is not recognised (it is with docker build); and on another host my docker client does not have buildx installed (and I'm very reluctant for this to be a requirement).

    Under the assumption that the main reason docker build is not implemented is because it's additional effort on top of supporting docker buildx commands I've put together a basic implementation that is working for me - the PR is #346, feel free to take it over or let me know how I can get it ready for merge. Unfortunately this is a breaking change, since the docker.build() API is slightly different... This does seem a more correct mirror of the CLI, so I wonder if there's a way to get it in with the appropriate changelog notices and version bump?

    opened by LewisGaul 8
  • `docker.system.prune` doesn't output anything

    `docker.system.prune` doesn't output anything

    the command works but there's no output shown to indicate what was cleared.

    the following is the command I used in my script docker.system.prune(all=True, volumes=True)

    enhancement help wanted 
    opened by IrwenXYZ 2
  • Incorrect quiet logic on Compose CLI Component

    Incorrect quiet logic on Compose CLI Component

    Hey,

    I have noticed some weird behavior in the Compose component:

    • The quiet flag (default false) accepted in docker compose functions is passed as is to the run function as capture_stdout (default true), however, the run function is configured to capture output when capture_stdout is true and so:
      • sending quiet as false to compose functions leads to output not being captured (as capture_stdout gets set as false)
      • sending quiet as true to compose functions leads to output being captured (as capture_stdout gets set as true)
    • The docker compose functions do not return the run function's output which leads to output not being returned in cases of successful operation (in case of failure, the exception can be caught, which will have the logs (if quiet was set to true)

    https://github.com/gabrieldemarmiesse/python-on-whales/blob/bc9a3cb399ed377b45ad4082aa00a95e5bdbc3de/python_on_whales/components/compose/cli_wrapper.py#L723

    This seems like very odd behavior to me, if it is expected behavior, am I missing something?

    Thanks :D

    opened by Sid-Sun 1
  • Consideration for changing return signature of buildx.build

    Consideration for changing return signature of buildx.build

    Hey there,

    I'm running into a devil of an time with my mypy/pylint setup because buildx.build returns a Union[None, Image, Iterator[str]]

    If I do image = python_on_whales.docker.buildx.build() and then later want to do, say log(image.repo_tags) mypy gets mad because image MIGHT be an Iterator[str] or None. I got around the none case by raising an exception if not image:; but still flumoxed by the Iterator[str] return type; doing isinstance(image, Iterator) checks produces all kinds of weirdness with pytlint or mypy because of the generic nature of the type. For now, I am raising an exception if not isinstance(image, pow.Image) and things seem to be all good. It looks like the only way to get the Iterator[str] return type is if you are streaming logs.

    However, it seems like the logs may be useful one day. I think it would be nicer if the buildx.build() function returned a tuple instead i.e (Optional[python_on_whales.Image], Optional[Iterator[str]])

    Then I could do image, logs = pow.docker.buildx.build in my code and have access to both logs or the image and not have to wonder if I'm getting an actual image or the logs. You could maybe even take it a step further and have a BuildResult type that has BuildResult.image and BuildResult.logs as properties.

    I am pretty new to working with docker from python, so I apologize if I'm treading old ground for you all. What do you think? I'd be happy to whip up a PR for my suggested change if that will help, too

    opened by DocWatson 1
  • Add envs parameter to compose up/config/run

    Add envs parameter to compose up/config/run

    Docker compose allows variable injection from the process environment in addition to a .env file. This change will allow user the ability to pass a dictionary of variables to be injected into the compose subprocess.

    opened by Lugoues 5
  • Request for improved handling of decode errors during builds.

    Request for improved handling of decode errors during builds.

    Hi,

    Recently, my team encountered an error during a docker build where we hit the docker build log limit, and the output was clipped; this resulted in a random non-utf-8 character being produced. The log limit non-deterministically clipped off content in the middle of a UTF-8 Character. In our logs, there was a UTF-8 Character ➀ present; this is made up of 3 bytes (see Find all Unicode Characters from Hieroglyphs to Dingbats – Unicode Compart ) 0xE2 0x9E 0xA4. the 1MiB log clipping terminates the output at 0xE2 0x9E. It took us some time and troubleshooting to come to this finding.

    We are asking if there could be more graceful handling of these decoding errors implemented as we believe that the current handling covered up the log limit error and produced a stack trace with the not-so-helpful UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 10-11: invalid continuation byte

    Thank you!

    bug help wanted 
    opened by Cptmorgan27 9
  • Delayed startup of docker.run

    Delayed startup of docker.run

    Hello, I'm noticing delays on startup of my run instances. For example, as I "tail" my stdout log for the calling function, I can see when it has reached docker.run call. I also monitor the shared volume folder and sometimes, not always, it can take 50-60 seconds before the output log created by the code running in the container appears. Once it starts running, everything works correctly. Other times there are no delays. I start up and delete a container for every file that gets processed.

    I have experimented with different things, including restarting Docker Desktop, restarting the Docker deamon, restarting my machine, reducing used memory to avoid memory swapping, etc. I'm running in Windows, by the way.

    Any thoughts? Thanks in advance,

    • Tracy
    opened by TracyWel 2
Releases(v0.56.0)
  • v0.56.0(Jan 5, 2023)

    What's Changed

    • fix: Constrain the minimum bound of pydantic. by @DanCardin in https://github.com/gabrieldemarmiesse/python-on-whales/pull/389
    • Add docker context create command by @toxicphreAK in https://github.com/gabrieldemarmiesse/python-on-whales/pull/394

    New Contributors

    • @DanCardin made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/389
    • @toxicphreAK made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/394

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.55.0...v0.56.0

    Source code(tar.gz)
    Source code(zip)
  • v0.55.0(Nov 26, 2022)

    What's Changed

    • Implementing --pull flag for commands 'run' and 'create' and functions 'copy_from' and 'copy_to' (#369) by @MisterOwlPT in https://github.com/gabrieldemarmiesse/python-on-whales/pull/381
    • Added support for --remove-orphans docker compose up flag by @bodo-ata in https://github.com/gabrieldemarmiesse/python-on-whales/pull/388

    New Contributors

    • @bodo-ata made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/388

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.54.0...v0.55.0

    Source code(tar.gz)
    Source code(zip)
  • v0.54.0(Nov 19, 2022)

    What's Changed

    • Implemented "attach" command. by @MisterOwlPT in https://github.com/gabrieldemarmiesse/python-on-whales/pull/371
    • Use separate status attributes for ComposeProject model by @marshall7m in https://github.com/gabrieldemarmiesse/python-on-whales/pull/377
    • Implement manifest command by @raylas in https://github.com/gabrieldemarmiesse/python-on-whales/pull/378
    • [IMP] "docker compose ps" argument services by @fuentes73 in https://github.com/gabrieldemarmiesse/python-on-whales/pull/383
    • Fixed command for removing node labels by @NickG158 in https://github.com/gabrieldemarmiesse/python-on-whales/pull/385
    • [IMP] docker compose run & up by @fuentes73 in https://github.com/gabrieldemarmiesse/python-on-whales/pull/386

    New Contributors

    • @raylas made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/378
    • @fuentes73 made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/383
    • @NickG158 made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/385

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.53.0...v0.54.0

    Source code(tar.gz)
    Source code(zip)
  • v0.53.0(Oct 20, 2022)

    What's Changed

    • :sparkles: Add a quiet option to docker.compose.down() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/365
    • implement docker compose port command by @vrazdalovschi in https://github.com/gabrieldemarmiesse/python-on-whales/pull/366
    • Fix for Issue #370 - Replace on decode errors rather than surface UnicodeDecodeError by @magichair in https://github.com/gabrieldemarmiesse/python-on-whales/pull/372
    • Switch from 'network list' to 'network ls' by @LewisGaul in https://github.com/gabrieldemarmiesse/python-on-whales/pull/374
    • fix: cannot inspect node with empty leader status by @ahoetker-deca in https://github.com/gabrieldemarmiesse/python-on-whales/pull/376
    • docker compose ls -> docker.compose.ls() by @marshall7m in https://github.com/gabrieldemarmiesse/python-on-whales/pull/368

    New Contributors

    • @vrazdalovschi made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/366
    • @magichair made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/372
    • @ahoetker-deca made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/376
    • @marshall7m made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/368

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.52.0...v0.53.0

    Source code(tar.gz)
    Source code(zip)
  • v0.52.0(Aug 18, 2022)

    What's Changed

    • Add the quiet flag to docker.compose.pull() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/363
    • Allow single strings in docker.compose.up() and pull(), add quiet flag for up() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/364

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.51.1...v0.52.0

    Source code(tar.gz)
    Source code(zip)
  • v0.51.1(Aug 7, 2022)

    What's Changed

    • Fix NetworkBindings parsing error by @betaboon in https://github.com/gabrieldemarmiesse/python-on-whales/pull/362

    New Contributors

    • @betaboon made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/362

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.51.0...v0.51.1

    Source code(tar.gz)
    Source code(zip)
  • v0.51.0(Aug 6, 2022)

    What's Changed

    • Change behavior of empty list as argument to some functions by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/352
    • Clarify the documentation about podman by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/359
    • Add arguments for docker.image.list() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/361

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.50.0...v0.51.0

    Source code(tar.gz)
    Source code(zip)
  • v0.50.0(Jul 25, 2022)

    What's Changed

    • Fix image remove command by @LewisGaul in https://github.com/gabrieldemarmiesse/python-on-whales/pull/350
    • Improve legacy build parsing of image ID by @LewisGaul in https://github.com/gabrieldemarmiesse/python-on-whales/pull/351
    • Add fields 'platforms' and 'status' to Builder. by @MisterOwlPT in https://github.com/gabrieldemarmiesse/python-on-whales/pull/357

    New Contributors

    • @MisterOwlPT made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/357

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.49...v0.50.0

    Source code(tar.gz)
    Source code(zip)
  • v0.49(Jul 11, 2022)

    What's Changed

    • Allow interactive container to be detached by @LewisGaul in https://github.com/gabrieldemarmiesse/python-on-whales/pull/343
    • Fix versions for linting and pytest by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/347
    • Bump the versions of the linters in the pre-commit by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/348
    • Implement 'docker.legacy_build' as alternative to 'docker.build' by @LewisGaul in https://github.com/gabrieldemarmiesse/python-on-whales/pull/346

    New Contributors

    • @LewisGaul made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/343

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.48.0...v0.49

    Source code(tar.gz)
    Source code(zip)
  • v0.48.0(Jul 10, 2022)

    What's Changed

    • Allow to inspect exit_code and other info on exceptions by @juan-leon in https://github.com/gabrieldemarmiesse/python-on-whales/pull/342

    New Contributors

    • @juan-leon made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/342

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.47.0...v0.48.0

    Source code(tar.gz)
    Source code(zip)
  • v0.47.0(Jul 1, 2022)

    What's Changed

    • [FEAT] Add Event API by @lonk95 in https://github.com/gabrieldemarmiesse/python-on-whales/pull/340
    • πŸ› Fix docker.system.events() without filters by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/341

    New Contributors

    • @lonk95 made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/340

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.46.0...v0.47.0

    Source code(tar.gz)
    Source code(zip)
  • v0.46.0(May 31, 2022)

    What's Changed

    • Handle custom registry name when using ecr login by @a-gentilhomme in https://github.com/gabrieldemarmiesse/python-on-whales/pull/338

    New Contributors

    • @a-gentilhomme made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/338

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.45.0...v0.46.0

    Source code(tar.gz)
    Source code(zip)
  • v0.45.0(May 29, 2022)

    What's Changed

    • :bug: Fix parsing of a podman container by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/336
    • :sparkles: Add more options to call the docker client by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/337

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.44.0...v0.45.0

    Source code(tar.gz)
    Source code(zip)
  • v0.44.0(May 19, 2022)

    What's Changed

    • :sparkles: Added support for other clients like podman and nerdctl by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/329
    • add --project-directory flag to compose by @John-Vash in https://github.com/gabrieldemarmiesse/python-on-whales/pull/332
    • :bug: Fixed docker.network.disconnect() and add test by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/333

    New Contributors

    • πŸŽ‰ @John-Vash made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/332

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.43.0...v0.44.0

    Source code(tar.gz)
    Source code(zip)
  • v0.43.0(Apr 24, 2022)

    What's Changed

    • Add more docker run examples in the readme by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/325
    • :sparkles: Nice repr for all python_on_whales objects by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/326

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.42.0...v0.43.0

    Source code(tar.gz)
    Source code(zip)
  • v0.42.0(Apr 23, 2022)

    What's Changed

    • Force recent versions of typer by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/320
    • :sparkles: Add more options to docker.compose.build() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/323

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.41.0...v0.42.0

    Source code(tar.gz)
    Source code(zip)
  • v0.41.0(Mar 29, 2022)

    What's Changed

    • :bug: Fix bug with typer import crashing by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/318

    This will pink click to 8.0.4 and below. We'll make a new release later with an upgraded version of typer that doesn't have this issue.

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.40.0...v0.41.0

    Source code(tar.gz)
    Source code(zip)
  • v0.40.0(Mar 24, 2022)

    What's Changed

    • Add flags to docker compose pull by @joshkarlin in https://github.com/gabrieldemarmiesse/python-on-whales/pull/314
    • Task/add boolean to run docker compose in compatibility mode by @joshkarlin in https://github.com/gabrieldemarmiesse/python-on-whales/pull/315
    • :wrench: Output of docker.image.prune() is returned, more types by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/316

    New Contributors

    • @joshkarlin made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/314

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.39.0...v0.40.0

    Source code(tar.gz)
    Source code(zip)
  • v0.39.0(Mar 15, 2022)

    What's Changed

    • capturing stdout and stderr for docker volume prune by @dvizzini in https://github.com/gabrieldemarmiesse/python-on-whales/pull/311
    • :sparkles: Add docker.compose.execute(...) by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/312

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.38.0...v0.39.0

    Source code(tar.gz)
    Source code(zip)
  • v0.38.0(Mar 10, 2022)

    What's Changed

    • Add project_urls by @wannaphong in https://github.com/gabrieldemarmiesse/python-on-whales/pull/309
    • handling filter option uniformly by @dvizzini in https://github.com/gabrieldemarmiesse/python-on-whales/pull/308

    New Contributors

    • @wannaphong made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/309

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.37.0...v0.38.0

    Source code(tar.gz)
    Source code(zip)
  • v0.37.0(Feb 12, 2022)

    What's Changed

    • Fix system prune hang by @dvizzini in https://github.com/gabrieldemarmiesse/python-on-whales/pull/307
    • Adding filter to system prune by @dvizzini in https://github.com/gabrieldemarmiesse/python-on-whales/pull/306

    New Contributors

    • @dvizzini made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/307

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.36.1...v0.37.0

    Source code(tar.gz)
    Source code(zip)
  • v0.36.1(Jan 19, 2022)

    What's Changed

    • :bug: Fix docker.service.list() when there are no services by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/303

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.36.0...v0.36.1

    Source code(tar.gz)
    Source code(zip)
  • v0.36.0(Jan 18, 2022)

    What's Changed

    • :zap: Faster docker.service.list() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/301

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.35.0...v0.36.0

    Source code(tar.gz)
    Source code(zip)
  • v0.35.0(Jan 14, 2022)

    What's Changed

    • Some precisions concerning compose v2 in the docs by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/296
    • Added a function to check if the CLI is already on the host by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/297
    • Add compose_profiles argument to the docker client constructor by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/298

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.34.0...v0.35.0

    Source code(tar.gz)
    Source code(zip)
  • v0.34.0(Dec 16, 2021)

    What's Changed

    • Fix typo 'lenght' in property names by @martinburchell in https://github.com/gabrieldemarmiesse/python-on-whales/pull/291

    New Contributors

    • @martinburchell made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/291

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.33.0...v0.34.0

    Source code(tar.gz)
    Source code(zip)
  • v0.33.0(Dec 9, 2021)

    What's Changed

    • Enable labeling networks in network create by @Akshay04 in https://github.com/gabrieldemarmiesse/python-on-whales/pull/284
    • Set threads in stream_stdout_and_stderr as daemons to avoid blocking ctrl+c by @mdantonio in https://github.com/gabrieldemarmiesse/python-on-whales/pull/283
    • Allow the publishing of a random port on host by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/288
    • Fix return type of compose.run() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/289

    New Contributors

    • @Akshay04 made their first contribution in https://github.com/gabrieldemarmiesse/python-on-whales/pull/284

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.32.0...v0.33.0

    Source code(tar.gz)
    Source code(zip)
  • v0.32.0(Nov 22, 2021)

    What's Changed

    • Added compose logs by @mdantonio in https://github.com/gabrieldemarmiesse/python-on-whales/pull/282

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.31.0...v0.32.0

    Source code(tar.gz)
    Source code(zip)
  • v0.31.0(Nov 6, 2021)

    What's Changed

    • Fixed compose.restart by adding services and made timeout parameter optional by @mdantonio in https://github.com/gabrieldemarmiesse/python-on-whales/pull/278
    • Added pre-commit configuration by @mdantonio in https://github.com/gabrieldemarmiesse/python-on-whales/pull/279
    • Just fixed a simple typo by @mdantonio in https://github.com/gabrieldemarmiesse/python-on-whales/pull/281
    • Added stream option to docker.compose.run and fixed the tty flag by @mdantonio in https://github.com/gabrieldemarmiesse/python-on-whales/pull/280

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.30.0...v0.31.0

    Source code(tar.gz)
    Source code(zip)
  • v0.30.0(Nov 1, 2021)

    What's Changed

    • ✨ Add docker.compose.restart() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/268
    • ✨ Added an explanation about docker compose image by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/269
    • :sparkles: Add docker.compose.start() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/270
    • Fix links in the readme when the page is read from github by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/273
    • Declare new userguide: Running python-on-whales in a container by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/275

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.29.0...v0.30.0

    Source code(tar.gz)
    Source code(zip)
  • v0.29.0(Oct 22, 2021)

    What's Changed

    • Added the stream option to docker.execute() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/258
    • Fix typos. Mainly adress -> address by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/262
    • Replaced string in the tests by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/264
    • ✨ Get the compose version with docker.compose.version() by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/265
    • Added doc explaining how to run python-on-whales in a container by @gabrieldemarmiesse in https://github.com/gabrieldemarmiesse/python-on-whales/pull/261

    Full Changelog: https://github.com/gabrieldemarmiesse/python-on-whales/compare/v0.28.0...v0.29.0

    Source code(tar.gz)
    Source code(zip)
Owner
Gabriel de Marmiesse
Software developer, maintainer of Keras, TensorFlow Addons and Python-on-whales
Gabriel de Marmiesse
A super simple terminal command shortener 🐟

pcmd A super simple terminal command shortener 🐟 Source code : https://github.com/j0fiN/pcmd Documentation : https://j0fin.github.io/pcmd About Durin

9 Mar 02, 2022
A command line utility to export Google Keep notes to markdown.

Keep-Exporter A command line utility to export Google Keep notes to markdown files with metadata stored as a frontmatter header. Supports exporting: S

Nathan Beals 85 Dec 17, 2022
A CLI framework based on asyncio

asynccli A CLI framework based on asyncio. Note This is still in active development. Things will change. For now, the basic framework is operational.

Adam Hopkins 6 Nov 13, 2022
Helping you manage your data science projects sanely.

PyDS CLI Helping you manage your data science projects sanely. Requirements Anaconda/Miniconda/Miniforge/Mambaforge (Mambaforge recommended!) git on y

Eric Ma 16 Apr 25, 2022
A lightweight Python module and command-line tool for generating NATO APP-6(D) compliant military symbols from both ID codes and natural language names

Python military symbols This is a lightweight Python module, including a command-line script, to generate NATO APP-6(D) compliant military symbol icon

Nick Royer 5 Dec 27, 2022
This is a simple Termo application in command line style

my-termo This is a simple Termo application in command line style. This app run a Linux crontab task every day to get a new word. Type termo in your t

Gustavo Soares 1 Feb 14, 2022
GoSearch for anything from your terminal

GoSearch for anything from your terminal Requirements pip install beautifulsoup4

Malik Mouhiidine 1 Oct 02, 2021
Dart Version Manager CLI implemented with Python and Typer.

Dart Version Manager Dart Version Manager CLI implemented with Python and Typer Usage: $ dvm [OPTIONS] COMMAND [ARGS]... Options: --install-completion

EducUp 6 Jun 26, 2022
An anime command-line system information tool written in python.

Animefetch - v0.0.3 An anime command-line system information tool written in python. Description Animefetch is an anime command-line system informatio

Thadeuks 6 Jun 17, 2022
Autosub - Command-line utility for auto-generating subtitles for any video file

Auto-generated subtitles for any video Autosub is a utility for automatic speech recognition and subtitle generation. It takes a video or an a

Anastasis Germanidis 3.9k Jan 05, 2023
An interactive aquarium for your terminal.

sipedon An interactive aquarium for your terminal, written using pytermgui. The project got its name from the Common Watersnake, also known as Nerodia

17 Nov 07, 2022
Command line tool for interacting and testing warehouse components

Warehouse debug CLI Example usage for Zumo debugging See all messages queued and handled. Enable by compiling the zumo-controller with -DDEBUG_MODE_EN

1 Jan 03, 2022
Command line interface to watch your childhood shows in hindi and english, designed with python

Sweet dreams: Most of your childhood shows Command line interface to watch your

Not Your Surya 3 Feb 13, 2022
Bryce Geiser 4 Aug 04, 2022
A Python module and command line utility for working with web archive data using the WACZ format specification

py-wacz The py-wacz repository contains a Python module and command line utility for working with web archive data using the WACZ format specification

Webrecorder 14 Oct 24, 2022
(BionicLambda Universal SHell) A simple shell made in Python. Docs and possible C port incoming.

blush 😳 (BionicLambda Universal SHell) A simple shell made in Python. Docs and possible C port incoming. Note: The Linux executables were made on Ubu

3 Jun 30, 2021
Terminal epub reader with inline images

nuber Inspired by epy, nuber is an Epub terminal reader with inline images written with Rust and Python using Überzug. Features Display images in term

Moshe Sherman 73 Oct 12, 2022
Fast as FUCK nvim completion. SQLite, concurrent scheduler, hundreds of hours of optimization.

Fast as FUCK nvim completion. SQLite, concurrent scheduler, hundreds of hours of optimization.

i love my dog 2.8k Jan 05, 2023
open a remote repo locally quickly

A command line tool to peek a remote repo hosted on github or gitlab locally and view it in your favorite editor. The tool handles cleanup of the repo once you exit your editor.

Rahul Nair 44 Dec 16, 2022
Colors in Terminal - Python Lang

🎨 Colorate - Python 🎨 About Colorate is an Open Source project that makes it easy to use Python color coding in your projects. After downloading the

0110 Henrique 1 Dec 01, 2021