Browse Source

Record should work with encoded same as everything else

pull/922/head
Ross McFarland 3 years ago
parent
commit
799e1232b3
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
2 changed files with 13 additions and 9 deletions
  1. +5
    -9
      octodns/record/__init__.py
  2. +8
    -0
      tests/test_octodns_idna.py

+ 5
- 9
octodns/record/__init__.py View File

@ -78,7 +78,7 @@ class ValidationError(RecordException):
@classmethod @classmethod
def build_message(cls, fqdn, reasons): def build_message(cls, fqdn, reasons):
reasons = '\n - '.join(reasons) reasons = '\n - '.join(reasons)
return f'Invalid record {fqdn}\n - {reasons}'
return f'Invalid record {idna_decode(fqdn)}\n - {reasons}'
def __init__(self, fqdn, reasons): def __init__(self, fqdn, reasons):
super(Exception, self).__init__(self.build_message(fqdn, reasons)) super(Exception, self).__init__(self.build_message(fqdn, reasons))
@ -105,16 +105,12 @@ class Record(EqualityTupleMixin):
@classmethod @classmethod
def new(cls, zone, name, data, source=None, lenient=False): def new(cls, zone, name, data, source=None, lenient=False):
name = str(name).lower()
fqdn = (
f'{idna_decode(name)}.{zone.decoded_name}'
if name
else zone.decoded_name
)
name = idna_encode(str(name))
fqdn = f'{name}.{zone.name}' if name else zone.name
try: try:
_type = data['type'] _type = data['type']
except KeyError: except KeyError:
raise Exception(f'Invalid record {fqdn}, missing type')
raise Exception(f'Invalid record {idna_decode(fqdn)}, missing type')
try: try:
_class = cls._CLASSES[_type] _class = cls._CLASSES[_type]
except KeyError: except KeyError:
@ -139,7 +135,7 @@ class Record(EqualityTupleMixin):
n = len(fqdn) n = len(fqdn)
if n > 253: if n > 253:
reasons.append( reasons.append(
f'invalid fqdn, "{fqdn}" is too long at {n} '
f'invalid fqdn, "{idna_decode(fqdn)}" is too long at {n} '
'chars, max is 253' 'chars, max is 253'
) )
for label in name.split('.'): for label in name.split('.'):


+ 8
- 0
tests/test_octodns_idna.py View File

@ -59,6 +59,14 @@ class TestIdna(TestCase):
self.assertEqual('zajęzyk.pl.', idna_decode('XN--ZAJZYK-Y4A.PL.')) self.assertEqual('zajęzyk.pl.', idna_decode('XN--ZAJZYK-Y4A.PL.'))
self.assertEqual('xn--zajzyk-y4a.pl.', idna_encode('ZajęzyK.Pl.')) self.assertEqual('xn--zajzyk-y4a.pl.', idna_encode('ZajęzyK.Pl.'))
def test_repeated_encode_decoded(self):
self.assertEqual(
'zajęzyk.pl.', idna_decode(idna_decode('xn--zajzyk-y4a.pl.'))
)
self.assertEqual(
'xn--zajzyk-y4a.pl.', idna_encode(idna_encode('zajęzyk.pl.'))
)
class TestIdnaDict(TestCase): class TestIdnaDict(TestCase):
plain = 'testing.tests.' plain = 'testing.tests.'


Loading…
Cancel
Save