diff options
Diffstat (limited to 'pkb_client/client/dns.py')
| -rw-r--r-- | pkb_client/client/dns.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/pkb_client/client/dns.py b/pkb_client/client/dns.py new file mode 100644 index 0000000..85ae971 --- /dev/null +++ b/pkb_client/client/dns.py @@ -0,0 +1,63 @@ +from dataclasses import dataclass +from enum import Enum +from typing import Optional + + +class DNSRecordType(str, Enum): + A = "A" + AAAA = "AAAA" + MX = "MX" + CNAME = "CNAME" + ALIAS = "ALIAS" + TXT = "TXT" + NS = "NS" + SRV = "SRV" + TLSA = "TLSA" + CAA = "CAA" + + def __str__(self): + return self.value + + +DNS_RECORDS_WITH_PRIORITY = {DNSRecordType.MX, DNSRecordType.SRV} + + +@dataclass +class DNSRecord: + id: str + name: str + type: DNSRecordType + content: str + ttl: int + prio: Optional[int] + notes: str + + @staticmethod + def from_dict(d): + # only use prio for supported record types since the API returns it for all records with default value 0 + prio = int(d["prio"]) if d["type"] in DNS_RECORDS_WITH_PRIORITY else None + return DNSRecord( + id=d["id"], + name=d["name"], + type=DNSRecordType[d["type"]], + content=d["content"], + ttl=int(d["ttl"]), + prio=prio, + notes=d["notes"], + ) + + +class DNSRestoreMode(Enum): + clear = 0 + replace = 1 + keep = 2 + + def __str__(self): + return self.name + + @staticmethod + def from_string(a): + try: + return DNSRestoreMode[a] + except KeyError: + return a |
