You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2011/09/11 23:39:17 UTC

svn commit: r1169548 - in /libcloud/trunk/libcloud/dns/drivers: __init__.py dummy.py

Author: tomaz
Date: Sun Sep 11 21:39:17 2011
New Revision: 1169548

URL: http://svn.apache.org/viewvc?rev=1169548&view=rev
Log:
Add dummy DNS driver.

Added:
    libcloud/trunk/libcloud/dns/drivers/__init__.py
    libcloud/trunk/libcloud/dns/drivers/dummy.py

Added: libcloud/trunk/libcloud/dns/drivers/__init__.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/dns/drivers/__init__.py?rev=1169548&view=auto
==============================================================================
    (empty)

Added: libcloud/trunk/libcloud/dns/drivers/dummy.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/dns/drivers/dummy.py?rev=1169548&view=auto
==============================================================================
--- libcloud/trunk/libcloud/dns/drivers/dummy.py (added)
+++ libcloud/trunk/libcloud/dns/drivers/dummy.py Sun Sep 11 21:39:17 2011
@@ -0,0 +1,173 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from libcloud.dns.base import DNSDriver, Zone, Record
+from libcloud.dns.types import RecordType
+from libcloud.dns.types import ZoneDoesNotExistError, ZoneAlreadyExistsError
+from libcloud.dns.types import RecordDoesNotExistError
+from libcloud.dns.types import RecordAlreadyExistsError
+
+
+class DummyDNSDriver(DNSDriver):
+    """
+    Dummy DNS driver.
+
+    >>> from libcloud.dns.drivers.dummy import DummyDNSDriver
+    >>> driver = DummyDNSDriver('key', 'secret')
+    >>> driver.name
+    'Dummy DNS Provider'
+    """
+
+    name = 'Dummy DNS Provider'
+
+    def __init__(self, api_key, api_secret):
+        self._zones = {}
+
+    def list_zones(self):
+        """
+        >>> driver = DummyDNSDriver('key', 'secret')
+        >>> driver.list_zones()
+        []
+        """
+
+        return [zone['zone'] for zone in self._zones.values()]
+
+    def list_records(self, zone):
+        return self.get_zone(zone_id=zone.id).records
+
+    def get_zone(self, zone_id):
+        """
+        >>> driver = DummyDNSDriver('key', 'secret')
+        >>> driver.get_zone(zone_id='foobar')
+        ... #doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ZoneDoesNotExistError:
+        """
+
+        if zone_id not in self._zones:
+            raise ZoneDoesNotExistError(driver=self, value=None,
+                                        zone_id=zone_id)
+
+        return self._zones[zone_id]['zone']
+
+    def get_record(self, zone_id, record_id):
+        """
+        >>> driver = DummyDNSDriver('key', 'secret')
+        >>> driver.get_record(zone_id='doesnotexist', record_id='exists')
+        ... #doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ZoneDoesNotExistError:
+        """
+
+        self.get_zone(zone_id=zone_id)
+        zone_records = self._zones[zone_id]['records']
+
+        if record_id not in zone_records:
+            raise RecordDoesNotExistError(record_id=record_id, value=None,
+                                          driver=self)
+
+        return zone_records[record_id]
+
+    def create_zone(self, domain, type='master', ttl=None, extra=None):
+        """
+        >>> driver = DummyDNSDriver('key', 'secret')
+        >>> zone = driver.create_zone(domain='apache.org', type='master',
+        ...                           ttl=100)
+        >>> zone
+        <Zone: domain=apache.org, ttl=100, provider=Dummy DNS Provider ...>
+        >>> zone = driver.create_zone(domain='apache.org', type='master',
+        ...                           ttl=100)
+        ... #doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ZoneAlreadyExistsError:
+        """
+
+        id = 'id-%s' % (domain)
+
+        if id in self._zones:
+            raise ZoneAlreadyExistsError(zone_id=id, value=None, driver=self)
+
+        zone = Zone(id=id, domain=domain, type=type, ttl=ttl, extra={},
+                    driver=self)
+        self._zones[id] = {'zone': zone,
+                            'records': {}}
+        return zone
+
+    def create_record(self, name, zone, type, data, extra=None):
+        """
+        >>> driver = DummyDNSDriver('key', 'secret')
+        >>> zone = driver.create_zone(domain='apache.org', type='master',
+        ...                           ttl=100)
+        >>> record = driver.create_record(name='libcloud', zone=zone,
+        ...                               type=RecordType.A, data='127.0.0.1')
+        >>> record #doctest: +ELLIPSIS
+        <Record: zone=id-apache.org, name=libcloud, data=127.0.0.1...>
+        >>> record = driver.create_record(name='libcloud', zone=zone,
+        ...                               type=RecordType.A, data='127.0.0.1')
+        ... #doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        RecordAlreadyExistsError:
+        """
+        id = 'id-%s' % (name)
+
+        zone = self.get_zone(zone_id=zone.id)
+
+        if id in self._zones[zone.id]['records']:
+            raise RecordAlreadyExistsError(record_id=id, value=None,
+                                           driver=self)
+
+        record = Record(id=id, name=name, type=type, data=data, extra=extra,
+                        zone=zone, driver=self)
+        self._zones[zone.id]['records'][id] = record
+        return record
+
+    def delete_zone(self, zone):
+        """
+        >>> driver = DummyDNSDriver('key', 'secret')
+        >>> zone = driver.create_zone(domain='apache.org', type='master',
+        ...                           ttl=100)
+        >>> driver.delete_zone(zone)
+        True
+        >>> driver.delete_zone(zone) #doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        ZoneDoesNotExistError:
+        """
+        self.get_zone(zone_id=zone.id)
+
+        del self._zones[zone.id]
+        return True
+
+    def delete_record(self, record):
+        """
+        >>> driver = DummyDNSDriver('key', 'secret')
+        >>> zone = driver.create_zone(domain='apache.org', type='master',
+        ...                           ttl=100)
+        >>> record = driver.create_record(name='libcloud', zone=zone,
+        ...                               type=RecordType.A, data='127.0.0.1')
+        >>> driver.delete_record(record)
+        True
+        >>> driver.delete_record(record) #doctest: +IGNORE_EXCEPTION_DETAIL
+        Traceback (most recent call last):
+        RecordDoesNotExistError:
+        """
+        self.get_record(zone_id=record.zone.id, record_id=record.id)
+
+        del self._zones[record.zone.id]['records'][record.id]
+        return True
+
+
+if __name__ == "__main__":
+    import doctest
+    doctest.testmod()