summaryrefslogtreecommitdiff
path: root/src/home/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/home/util.py')
-rw-r--r--src/home/util.py33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/home/util.py b/src/home/util.py
index 35505bc..1e12243 100644
--- a/src/home/util.py
+++ b/src/home/util.py
@@ -12,7 +12,7 @@ import re
from enum import Enum
from datetime import datetime
-from typing import Tuple, Optional, List
+from typing import Optional, List
from zlib import adler32
logger = logging.getLogger(__name__)
@@ -38,26 +38,43 @@ def validate_ipv4_or_hostname(address: str, raise_exception: bool = False) -> bo
class Addr:
host: str
- port: int
+ port: Optional[int]
- def __init__(self, host: str, port: int):
+ def __init__(self, host: str, port: Optional[int] = None):
self.host = host
self.port = port
@staticmethod
def fromstring(addr: str) -> Addr:
- if addr.count(':') != 1:
+ colons = addr.count(':')
+ if colons != 1:
raise ValueError('invalid host:port format')
- host, port = addr.split(':')
+ if not colons:
+ host = addr
+ port= None
+ else:
+ host, port = addr.split(':')
+
validate_ipv4_or_hostname(host, raise_exception=True)
- port = int(port)
- if not 0 <= port <= 65535:
- raise ValueError(f'invalid port {port}')
+ if port is not None:
+ port = int(port)
+ if not 0 <= port <= 65535:
+ raise ValueError(f'invalid port {port}')
return Addr(host, port)
+ def __str__(self):
+ buf = self.host
+ if self.port is not None:
+ buf += ':'+str(self.port)
+ return buf
+
+ def __iter__(self):
+ yield self.host
+ yield self.port
+
# https://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks
def chunks(lst, n):