From dea4647a16a3fbd1be597ca9d7726948f7ea6959 Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Mon, 28 Jan 2019 09:47:23 -0800 Subject: [PATCH] Make SUPPORTS_DYNAMIC an optional property, defaulting to False --- octodns/source/base.py | 7 ++++--- tests/test_octodns_provider_base.py | 22 ++++++++++++---------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/octodns/source/base.py b/octodns/source/base.py index 1faab7f..79b5a2a 100644 --- a/octodns/source/base.py +++ b/octodns/source/base.py @@ -16,13 +16,14 @@ class BaseSource(object): if not hasattr(self, 'SUPPORTS_GEO'): raise NotImplementedError('Abstract base class, SUPPORTS_GEO ' 'property missing') - if not hasattr(self, 'SUPPORTS_DYNAMIC'): - raise NotImplementedError('Abstract base class, SUPPORTS_DYNAMIC ' - 'property missing') if not hasattr(self, 'SUPPORTS'): raise NotImplementedError('Abstract base class, SUPPORTS ' 'property missing') + @property + def SUPPORTS_DYNAMIC(self): + return False + def populate(self, zone, target=False, lenient=False): ''' Loads all records the provider knows about for the provided zone diff --git a/tests/test_octodns_provider_base.py b/tests/test_octodns_provider_base.py index 5a053ee..e28850a 100644 --- a/tests/test_octodns_provider_base.py +++ b/tests/test_octodns_provider_base.py @@ -61,27 +61,29 @@ class TestBaseProvider(TestCase): class HasSupportsGeo(HasLog): SUPPORTS_GEO = False - with self.assertRaises(NotImplementedError) as ctx: - HasSupportsGeo('hassupportsgeo') - self.assertEquals('Abstract base class, SUPPORTS_DYNAMIC ' - 'property missing', ctx.exception.message) - - class HasSupportsDyanmic(HasSupportsGeo): - SUPPORTS_DYNAMIC = False - zone = Zone('unit.tests.', ['sub']) with self.assertRaises(NotImplementedError) as ctx: - HasSupportsDyanmic('hassupportsdynamic').populate(zone) + HasSupportsGeo('hassupportsgeo').populate(zone) self.assertEquals('Abstract base class, SUPPORTS property missing', ctx.exception.message) - class HasSupports(HasSupportsDyanmic): + class HasSupports(HasSupportsGeo): SUPPORTS = set(('A',)) with self.assertRaises(NotImplementedError) as ctx: HasSupports('hassupports').populate(zone) self.assertEquals('Abstract base class, populate method missing', ctx.exception.message) + # SUPPORTS_DYNAMIC has a default/fallback + self.assertFalse(HasSupports('hassupports').SUPPORTS_DYNAMIC) + + # But can be overridden + class HasSupportsDyanmic(HasSupports): + SUPPORTS_DYNAMIC = True + + self.assertTrue(HasSupportsDyanmic('hassupportsdynamic') + .SUPPORTS_DYNAMIC) + class HasPopulate(HasSupports): def populate(self, zone, target=False, lenient=False):