Browse Source

refactor filter based processors to pull out shared logic

pull/1083/head
Ross McFarland 2 years ago
parent
commit
eec7cadb86
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
1 changed files with 57 additions and 60 deletions
  1. +57
    -60
      octodns/processor/filter.py

+ 57
- 60
octodns/processor/filter.py View File

@ -7,7 +7,41 @@ from re import compile as re_compile
from .base import BaseProcessor
class TypeAllowlistFilter(BaseProcessor):
class AllowsMixin:
def matches(self, zone, record):
pass
def doesnt_match(self, zone, record):
zone.remove_record(record)
class RejectsMixin:
def matches(self, zone, record):
zone.remove_record(record)
def doesnt_match(self, zone, record):
pass
class _TypeBaseFilter(BaseProcessor):
def __init__(self, name, _list):
super().__init__(name)
self._list = set(_list)
def _process(self, zone, *args, **kwargs):
for record in zone.records:
if record._type in self._list:
self.matches(zone, record)
else:
self.doesnt_match(zone, record)
return zone
process_source_zone = _process
process_target_zone = _process
class TypeAllowlistFilter(_TypeBaseFilter, AllowsMixin):
'''Only manage records of the specified type(s).
Example usage:
@ -30,21 +64,10 @@ class TypeAllowlistFilter(BaseProcessor):
'''
def __init__(self, name, allowlist):
super().__init__(name)
self.allowlist = set(allowlist)
def _process(self, zone, *args, **kwargs):
for record in zone.records:
if record._type not in self.allowlist:
zone.remove_record(record)
return zone
process_source_zone = _process
process_target_zone = _process
super().__init__(name, allowlist)
class TypeRejectlistFilter(BaseProcessor):
class TypeRejectlistFilter(_TypeBaseFilter, RejectsMixin):
'''Ignore records of the specified type(s).
Example usage:
@ -66,18 +89,7 @@ class TypeRejectlistFilter(BaseProcessor):
'''
def __init__(self, name, rejectlist):
super().__init__(name)
self.rejectlist = set(rejectlist)
def _process(self, zone, *args, **kwargs):
for record in zone.records:
if record._type in self.rejectlist:
zone.remove_record(record)
return zone
process_source_zone = _process
process_target_zone = _process
super().__init__(name, rejectlist)
class _NameBaseFilter(BaseProcessor):
@ -93,8 +105,25 @@ class _NameBaseFilter(BaseProcessor):
self.exact = exact
self.regex = regex
def _process(self, zone, *args, **kwargs):
for record in zone.records:
name = record.name
if name in self.exact:
self.matches(zone, record)
continue
elif any(r.search(name) for r in self.regex):
self.matches(zone, record)
continue
self.doesnt_match(zone, record)
class NameAllowlistFilter(_NameBaseFilter):
return zone
process_source_zone = _process
process_target_zone = _process
class NameAllowlistFilter(_NameBaseFilter, AllowsMixin):
'''Only manage records with names that match the provider patterns
Example usage:
@ -125,23 +154,8 @@ class NameAllowlistFilter(_NameBaseFilter):
def __init__(self, name, allowlist):
super().__init__(name, allowlist)
def _process(self, zone, *args, **kwargs):
for record in zone.records:
name = record.name
if name in self.exact:
continue
elif any(r.search(name) for r in self.regex):
continue
zone.remove_record(record)
return zone
process_source_zone = _process
process_target_zone = _process
class NameRejectlistFilter(_NameBaseFilter):
class NameRejectlistFilter(_NameBaseFilter, RejectsMixin):
'''Reject managing records with names that match the provider patterns
Example usage:
@ -172,23 +186,6 @@ class NameRejectlistFilter(_NameBaseFilter):
def __init__(self, name, rejectlist):
super().__init__(name, rejectlist)
def _process(self, zone, *args, **kwargs):
for record in zone.records:
name = record.name
if name in self.exact:
zone.remove_record(record)
continue
for regex in self.regex:
if regex.search(name):
zone.remove_record(record)
break
return zone
process_source_zone = _process
process_target_zone = _process
class IgnoreRootNsFilter(BaseProcessor):
'''Do not manage Root NS Records.


Loading…
Cancel
Save