mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
refactor filter based processors to pull out shared logic
This commit is contained in:
@@ -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
|
||||
|
||||
class NameAllowlistFilter(_NameBaseFilter):
|
||||
self.doesnt_match(zone, record)
|
||||
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user