testcontainers/testcontainers-python

Feature: Proper type hinting for UDP ports bindings

Opened this issue · 3 comments

I'm trying to bind udp ports:

def telegraf(network: Network):
    ctr = DockerContainer(image="telegraf:1.31.1")
    ctr.with_volume_mapping(f"{CURRENT_DIR}/telegraf_test.conf", "/etc/telegraf/telegraf.d/telegraf_test.conf")
    ctr.with_exposed_ports("8094/tcp")  # Telegraf ports
    ctr.with_bind_ports("8125/udp", "8125/udp")
    ctr.with_bind_ports("8092/udp", "8092/udp")
    _connect_to_network(ctr, network, "telegraf")
    return ctr

It works fine, except that ports are type hinted as int, leading to sad squiggly lines in IDEs.

Could we change type hints of port APIs to allow strings, to make it nicer to define more fine grain port specs?

    def with_bind_ports(self, container: str, host: Optional[str] = None): ...

    def with_exposed_ports(self, *ports: str): ...
  
  def get_exposed_port(self, port: str): ...

open to a pr for this!

please note that def get_exposed_port(self, port: str): ... is probably wrong as it uses

mapped_port = self.get_docker_client().port(self._container.id, port)

->

port_mappings = self.client.api.port(container_id, port)

->

    def port(self, container, private_port): 
        """
        Lookup the public-facing port that is NAT-ed to ``private_port``.
        Identical to the ``docker port`` command.

        Args:
            container (str): The container to look up
            private_port (int): The private port to inspect

So the docker API expect it to be an int

with_bind_ports & with_exposed_ports seems safe

Opened #690