diff --git a/octodns/provider/dyn.py b/octodns/provider/dyn.py index 08cc915..6167364 100644 --- a/octodns/provider/dyn.py +++ b/octodns/provider/dyn.py @@ -18,6 +18,7 @@ from threading import Lock from uuid import uuid4 from ..record import Record, Update +from ..record.geo import GeoCodes from .base import BaseProvider @@ -1109,7 +1110,7 @@ class DynProvider(BaseProvider): criteria_type = 'always' try: for geo in rule.data['geos']: - geo = new.geo_parse(geo) + geo = GeoCodes.geo_parse(geo) pprint(geo) criteria_type = 'geoip' if geo['subdivision_code']: diff --git a/octodns/record/__init__.py b/octodns/record/__init__.py index 68dd501..6480784 100644 --- a/octodns/record/__init__.py +++ b/octodns/record/__init__.py @@ -568,11 +568,6 @@ class _DynamicMixin(object): return reasons - @classmethod - def geo_parse(cls, code): - match = cls.geo_re.match(code) - return match.groupdict() - def __init__(self, zone, name, data, *args, **kwargs): super(_DynamicMixin, self).__init__(zone, name, data, *args, **kwargs) diff --git a/octodns/record/geo.py b/octodns/record/geo.py index c7b5468..1979fd5 100644 --- a/octodns/record/geo.py +++ b/octodns/record/geo.py @@ -33,3 +33,20 @@ class GeoCodes(object): reasons.append('{}unknown province code "{}"'.format(prefix, code)) return reasons + + @classmethod + def parse(cls, code): + pieces = code.split('-') + try: + country_code = pieces[1] + except IndexError: + country_code = None + try: + province_code = pieces[2] + except IndexError: + province_code = None + return { + 'continent_code': pieces[0], + 'country_code': country_code, + 'province_code': province_code, + } diff --git a/tests/test_octodns_record_geo.py b/tests/test_octodns_record_geo.py index 6b9cd4e..d58009d 100644 --- a/tests/test_octodns_record_geo.py +++ b/tests/test_octodns_record_geo.py @@ -51,3 +51,20 @@ class TestRecordGeoCodes(TestCase): # Bad province code, good continent and country self.assertEquals(['xyz unknown province code "NA-US-XX"'], GeoCodes.validate('NA-US-XX', prefix)) + + def test_parse(self): + self.assertEquals({ + 'continent_code': 'NA', + 'country_code': None, + 'province_code': None, + }, GeoCodes.parse('NA')) + self.assertEquals({ + 'continent_code': 'NA', + 'country_code': 'US', + 'province_code': None, + }, GeoCodes.parse('NA-US')) + self.assertEquals({ + 'continent_code': 'NA', + 'country_code': 'US', + 'province_code': 'CA', + }, GeoCodes.parse('NA-US-CA'))