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

Fix IPv6 address case in server_list function #66

Merged
merged 1 commit into from
Feb 9, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion faust/transport/drivers/aiokafka.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,24 @@
""".strip()


def __canon_host(host, default):
"""Ensure host is correctly formatted for aiokafka. That means IPv6
addresses must enclosed in squared brackets.
"""
if not host:
return default
if ":" in host:
return f"[{host}]"
return host


def server_list(urls: List[URL], default_port: int) -> List[str]:
"""Convert list of urls to list of servers accepted by :pypi:`aiokafka`."""
default_host = "127.0.0.1"
return [f"{u.host or default_host}:{u.port or default_port}" for u in urls]
# Yarl strips [] from IPv6 adresses, and aiokafka expects them.
return [
f"{__canon_host(u.host, default_host)}:{u.port or default_port}" for u in urls
]


class ConsumerRebalanceListener(aiokafka.abc.ConsumerRebalanceListener): # type: ignore
Expand Down