Browse Source

DRY up tinydns ttl finding logic

pull/1020/head
Ross McFarland 2 years ago
parent
commit
0b5dac30b6
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
1 changed files with 19 additions and 72 deletions
  1. +19
    -72
      octodns/source/tinydns.py

+ 19
- 72
octodns/source/tinydns.py View File

@ -37,6 +37,16 @@ class TinyDnsBaseSource(BaseSource):
# All record types, including those registered by 3rd party modules
return set(Record.registered_types().keys())
def _ttl_for(self, lines, index):
# see if we can find a ttl on any of the lines, first one wins
for line in lines:
try:
return int(line[index])
except IndexError:
pass
# and if we don't use the default
return self.default_ttl
def _records_for_at(self, zone, name, lines, arpa=False):
# @fqdn:ip:x:dist:ttl:timestamp:lo
# MX (and optional A)
@ -49,14 +59,7 @@ class TinyDnsBaseSource(BaseSource):
# if name doesn't live under our zone there's nothing for us to do
return
# see if we can find a ttl on any of the lines, first one wins
ttl = self.default_ttl
for line in lines:
try:
ttl = int(line[4])
break
except IndexError:
pass
ttl = self._ttl_for(lines, 4)
values = []
for line in lines:
@ -99,14 +102,7 @@ class TinyDnsBaseSource(BaseSource):
if value[-1] != '.':
value = f'{value}.'
# see if we can find a ttl on any of the lines, first one wins
ttl = self.default_ttl
for line in lines:
try:
ttl = int(line[2])
break
except IndexError:
pass
ttl = self._ttl_for(lines, 2)
yield 'CNAME', name, ttl, [value]
@ -141,14 +137,7 @@ class TinyDnsBaseSource(BaseSource):
value = f'{value}.'
names[name].append(value)
# see if we can find a ttl on any of the lines, first one wins
ttl = self.default_ttl
for line in lines:
try:
ttl = int(line[2])
break
except IndexError:
pass
ttl = self._ttl_for(lines, 2)
for name, values in names.items():
if zone.owns('PTR', name):
@ -174,14 +163,7 @@ class TinyDnsBaseSource(BaseSource):
# if name doesn't live under our zone there's nothing for us to do
return
# see if we can find a ttl on any of the lines, first one wins
ttl = self.default_ttl
for line in lines:
try:
ttl = int(line[3])
break
except IndexError:
pass
ttl = self._ttl_for(lines, 3)
values = []
for line in lines:
@ -223,14 +205,7 @@ class TinyDnsBaseSource(BaseSource):
# we didn't find any value ips so nothing to do
return []
# see if we can find a ttl on any of the lines, first one wins
ttl = self.default_ttl
for line in lines:
try:
ttl = int(line[2])
break
except IndexError:
pass
ttl = self._ttl_for(lines, 2)
yield 'A', name, ttl, ips
@ -252,14 +227,7 @@ class TinyDnsBaseSource(BaseSource):
for l in lines
]
# see if we can find a ttl on any of the lines, first one wins
ttl = self.default_ttl
for line in lines:
try:
ttl = int(line[2])
break
except IndexError:
pass
ttl = self._ttl_for(lines, 2)
yield 'TXT', name, ttl, values
@ -283,14 +251,7 @@ class TinyDnsBaseSource(BaseSource):
# the address correct.
ips.append(u':'.join(textwrap.wrap(line[1], 4)))
# see if we can find a ttl on any of the lines, first one wins
ttl = self.default_ttl
for line in lines:
try:
ttl = int(line[2])
break
except IndexError:
pass
ttl = self._ttl_for(lines, 2)
yield 'AAAA', name, ttl, ips
@ -306,14 +267,7 @@ class TinyDnsBaseSource(BaseSource):
# if name doesn't live under our zone there's nothing for us to do
return
# see if we can find a ttl on any of the lines, first one wins
ttl = self.default_ttl
for line in lines:
try:
ttl = int(line[6])
break
except IndexError:
pass
ttl = self._ttl_for(lines, 6)
values = []
for line in lines:
@ -383,14 +337,7 @@ class TinyDnsBaseSource(BaseSource):
)
continue
# see if we can find a ttl on any of the lines, first one wins
ttl = self.default_ttl
for line in lines:
try:
ttl = int(line[3])
break
except IndexError:
pass
ttl = self._ttl_for(lines, 3)
rdatas = [l[2] for l in lines]
yield _type, name, ttl, _class.parse_rdata_texts(rdatas)


Loading…
Cancel
Save