diff --git a/src/octodns_netbox_dns/__init__.py b/src/octodns_netbox_dns/__init__.py index 292df47..57b170b 100644 --- a/src/octodns_netbox_dns/__init__.py +++ b/src/octodns_netbox_dns/__init__.py @@ -90,21 +90,14 @@ class NetBoxDNSProvider(octodns.provider.base.BaseProvider): return absolute_value - @staticmethod - def _fix_semicolon(value: str, escape: bool) -> str: - """escape and un-escape semicolons in record values for netbox/octodns - - @param value: the record value - @param escape: if set to true, all semicolons get escaped with a backslash. - if false it un-escapes all semicolons. - - @return: the modified record value - """ - if escape: - fixed = value.replace(";", "\\;") - else: - fixed = value.replace("\\;", ";") + def _escape_semicolon(self, value: str) -> str: + fixed = value.replace(";", "\\;") + self.log.debug(f"in='{value}', fixed='{fixed}'") + return fixed + def _unescape_semicolon(self, value: str) -> str: + fixed = value.replace("\\\\", "\\").replace("\\;", ";") + self.log.debug(f"in='{value}', fixed='{fixed}'") return fixed def _get_nb_view(self, view: str | None | Literal[False]) -> dict[str, int | str]: @@ -212,7 +205,7 @@ class NetBoxDNSProvider(octodns.provider.base.BaseProvider): } case "SPF" | "TXT": - value = self._fix_semicolon(rcd_value, escape=True) + value = self._escape_semicolon(rcd_value) case "SRV": value = { @@ -370,7 +363,7 @@ class NetBoxDNSProvider(octodns.provider.base.BaseProvider): name=rcd_name, type=change.new._type, ttl=change.new.ttl, - value=self._fix_semicolon(record, escape=False), + value=self._unescape_semicolon(record), disable_ptr=self.disable_ptr, ) ) @@ -430,7 +423,7 @@ class NetBoxDNSProvider(octodns.provider.base.BaseProvider): name=rcd_name, type=change.new._type, ttl=change.new.ttl, - value=self._fix_semicolon(record, escape=False), + value=self._unescape_semicolon(record), disable_ptr=self.disable_ptr, ) self.log.debug(f"ADD {nb_record.type} {nb_record.name} {nb_record.value}") diff --git a/tests/test_escaple_semicolon.py b/tests/test_escaple_semicolon.py index a494529..628ba2b 100644 --- a/tests/test_escaple_semicolon.py +++ b/tests/test_escaple_semicolon.py @@ -14,7 +14,7 @@ DEFAULT_CONFIG = { def test_escape1(): nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) rcd_value = r"v=TLSRPTv1; rua=mailto:tlsrpt@example.com" - value = nbdns._fix_semicolon(rcd_value, escape=True) + value = nbdns._escape_semicolon(rcd_value) assert value == r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com" @@ -22,7 +22,7 @@ def test_escape1(): def test_escape2(): nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) rcd_value = r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com" - value = nbdns._fix_semicolon(rcd_value, escape=True) + value = nbdns._escape_semicolon(rcd_value) assert value == r"v=TLSRPTv1\\; rua=mailto:tlsrpt@example.com" @@ -30,7 +30,7 @@ def test_escape2(): def test_escape3(): nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) rcd_value = r"t=y\;o=~\;" - value = nbdns._fix_semicolon(rcd_value, escape=True) + value = nbdns._escape_semicolon(rcd_value) assert value == r"t=y\\;o=~\\;" @@ -38,7 +38,7 @@ def test_escape3(): def test_escape4(): nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) rcd_value = r"t=y;o=~;" - value = nbdns._fix_semicolon(rcd_value, escape=True) + value = nbdns._escape_semicolon(rcd_value) assert value == r"t=y\;o=~\;" @@ -46,7 +46,7 @@ def test_escape4(): def test_unescape1(): nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) rcd_value = r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com" - value = nbdns._fix_semicolon(rcd_value, escape=False) + value = nbdns._unescape_semicolon(rcd_value) assert value == r"v=TLSRPTv1; rua=mailto:tlsrpt@example.com" @@ -54,22 +54,22 @@ def test_unescape1(): def test_unescape2(): nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) rcd_value = r"v=TLSRPTv1\\; rua=mailto:tlsrpt@example.com" - value = nbdns._fix_semicolon(rcd_value, escape=False) + value = nbdns._unescape_semicolon(rcd_value) - assert value == r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com" + assert value == r"v=TLSRPTv1; rua=mailto:tlsrpt@example.com" def test_unescape3(): nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) rcd_value = r"t=y\\;o=~\;" - value = nbdns._fix_semicolon(rcd_value, escape=False) + value = nbdns._unescape_semicolon(rcd_value) - assert value == r"t=y\;o=~;" + assert value == r"t=y;o=~;" def test_unescape4(): nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) rcd_value = r"t=y;o=~;" - value = nbdns._fix_semicolon(rcd_value, escape=False) + value = nbdns._unescape_semicolon(rcd_value) assert value == r"t=y;o=~;"