From 89d8a5e5539832c940e3d1918979789e7777bf6e Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Mon, 18 Apr 2016 16:39:45 -0400 Subject: [PATCH] Allow constructing 'ManagedZone' instance w/o 'dns_name'. Closes: #1719. --- gcloud/dns/client.py | 7 +++--- gcloud/dns/test_client.py | 47 ++++++++++++++++++++++----------------- gcloud/dns/test_zone.py | 20 ++++++++++++++--- gcloud/dns/zone.py | 7 +++--- 4 files changed, 52 insertions(+), 29 deletions(-) diff --git a/gcloud/dns/client.py b/gcloud/dns/client.py index ddc4ded769be..6893f32c3ddd 100644 --- a/gcloud/dns/client.py +++ b/gcloud/dns/client.py @@ -95,14 +95,15 @@ def list_zones(self, max_results=None, page_token=None): for resource in resp['managedZones']] return zones, resp.get('nextPageToken') - def zone(self, name, dns_name): + def zone(self, name, dns_name=None): """Construct a zone bound to this client. :type name: string :param name: Name of the zone. - :type dns_name: string - :param dns_name: DNS name of the zone. + :type dns_name: string or :class:`NoneType` + :param dns_name: DNS name of the zone. If not passed, then calls + to :meth:`zone.create` will fail. :rtype: :class:`gcloud.dns.zone.ManagedZone` :returns: a new ``ManagedZone`` instance diff --git a/gcloud/dns/test_client.py b/gcloud/dns/test_client.py index 44b168f82efe..cd02bd28506c 100644 --- a/gcloud/dns/test_client.py +++ b/gcloud/dns/test_client.py @@ -17,6 +17,9 @@ class TestClient(unittest2.TestCase): + PROJECT = 'PROJECT' + ZONE_NAME = 'zone-name' + def _getTargetClass(self): from gcloud.dns.client import Client return Client @@ -26,17 +29,16 @@ def _makeOne(self, *args, **kw): def test_ctor(self): from gcloud.dns.connection import Connection - PROJECT = 'PROJECT' creds = _Credentials() http = object() - client = self._makeOne(project=PROJECT, credentials=creds, http=http) + client = self._makeOne(project=self.PROJECT, credentials=creds, + http=http) self.assertTrue(isinstance(client.connection, Connection)) self.assertTrue(client.connection.credentials is creds) self.assertTrue(client.connection.http is http) def test_quotas_defaults(self): - PROJECT = 'PROJECT' - PATH = 'projects/%s' % PROJECT + PATH = 'projects/%s' % (self.PROJECT,) MANAGED_ZONES = 1234 RRS_PER_RRSET = 23 RRSETS_PER_ZONE = 345 @@ -56,7 +58,7 @@ def test_quotas_defaults(self): CONVERTED = dict([(key, int(value)) for key, value in DATA['quota'].items()]) creds = _Credentials() - client = self._makeOne(PROJECT, creds) + client = self._makeOne(self.PROJECT, creds) conn = client.connection = _Connection(DATA) quotas = client.quotas() @@ -69,8 +71,7 @@ def test_quotas_defaults(self): self.assertEqual(req['path'], '/%s' % PATH) def test_quotas_w_kind_key(self): - PROJECT = 'PROJECT' - PATH = 'projects/%s' % PROJECT + PATH = 'projects/%s' % (self.PROJECT,) MANAGED_ZONES = 1234 RRS_PER_RRSET = 23 RRSETS_PER_ZONE = 345 @@ -92,7 +93,7 @@ def test_quotas_w_kind_key(self): WITH_KIND = {'quota': DATA['quota'].copy()} WITH_KIND['quota']['kind'] = 'dns#quota' creds = _Credentials() - client = self._makeOne(PROJECT, creds) + client = self._makeOne(self.PROJECT, creds) conn = client.connection = _Connection(WITH_KIND) quotas = client.quotas() @@ -106,14 +107,13 @@ def test_quotas_w_kind_key(self): def test_list_zones_defaults(self): from gcloud.dns.zone import ManagedZone - PROJECT = 'PROJECT' ID_1 = '123' ZONE_1 = 'zone_one' DNS_1 = 'one.example.com' ID_2 = '234' ZONE_2 = 'zone_two' DNS_2 = 'two.example.com' - PATH = 'projects/%s/managedZones' % PROJECT + PATH = 'projects/%s/managedZones' % (self.PROJECT,) TOKEN = 'TOKEN' DATA = { 'nextPageToken': TOKEN, @@ -129,7 +129,7 @@ def test_list_zones_defaults(self): ] } creds = _Credentials() - client = self._makeOne(PROJECT, creds) + client = self._makeOne(self.PROJECT, creds) conn = client.connection = _Connection(DATA) zones, token = client.list_zones() @@ -149,14 +149,13 @@ def test_list_zones_defaults(self): def test_list_zones_explicit(self): from gcloud.dns.zone import ManagedZone - PROJECT = 'PROJECT' ID_1 = '123' ZONE_1 = 'zone_one' DNS_1 = 'one.example.com' ID_2 = '234' ZONE_2 = 'zone_two' DNS_2 = 'two.example.com' - PATH = 'projects/%s/managedZones' % PROJECT + PATH = 'projects/%s/managedZones' % (self.PROJECT,) TOKEN = 'TOKEN' DATA = { 'managedZones': [ @@ -171,7 +170,7 @@ def test_list_zones_explicit(self): ] } creds = _Credentials() - client = self._makeOne(PROJECT, creds) + client = self._makeOne(self.PROJECT, creds) conn = client.connection = _Connection(DATA) zones, token = client.list_zones(max_results=3, page_token=TOKEN) @@ -191,19 +190,27 @@ def test_list_zones_explicit(self): self.assertEqual(req['query_params'], {'maxResults': 3, 'pageToken': TOKEN}) - def test_zone(self): + def test_zone_w_explicit_dns_name(self): from gcloud.dns.zone import ManagedZone - PROJECT = 'PROJECT' - ZONE_NAME = 'zone-name' DNS_NAME = 'test.example.com' creds = _Credentials() - client = self._makeOne(PROJECT, creds) - zone = client.zone(ZONE_NAME, DNS_NAME) + client = self._makeOne(self.PROJECT, creds) + zone = client.zone(self.ZONE_NAME, DNS_NAME) self.assertTrue(isinstance(zone, ManagedZone)) - self.assertEqual(zone.name, ZONE_NAME) + self.assertEqual(zone.name, self.ZONE_NAME) self.assertEqual(zone.dns_name, DNS_NAME) self.assertTrue(zone._client is client) + def test_zone_wo_dns_name(self): + from gcloud.dns.zone import ManagedZone + creds = _Credentials() + client = self._makeOne(self.PROJECT, creds) + zone = client.zone(self.ZONE_NAME) + self.assertTrue(isinstance(zone, ManagedZone)) + self.assertEqual(zone.name, self.ZONE_NAME) + self.assertEqual(zone.dns_name, None) + self.assertTrue(zone._client is client) + class _Credentials(object): diff --git a/gcloud/dns/test_zone.py b/gcloud/dns/test_zone.py index cec501cb4f29..227e0c6d4cc0 100644 --- a/gcloud/dns/test_zone.py +++ b/gcloud/dns/test_zone.py @@ -84,7 +84,23 @@ def _verifyResourceProperties(self, zone, resource): self.assertEqual(zone.zone_id, resource.get('id')) self.assertEqual(zone.name_server_set, resource.get('nameServerSet')) - def test_ctor(self): + def test_ctor_defaults(self): + zone = self._makeOne(self.ZONE_NAME) + self.assertEqual(zone.name, self.ZONE_NAME) + self.assertEqual(zone.dns_name, None) + self.assertTrue(zone._client is None) + + with self.assertRaises(AttributeError): + _ = zone.project + + with self.assertRaises(AttributeError): + _ = zone.path + + self.assertEqual(zone.zone_id, None) + self.assertEqual(zone.created, None) + self.assertEqual(zone.description, None) + + def test_ctor_explicit(self): client = _Client(self.PROJECT) zone = self._makeOne(self.ZONE_NAME, self.DNS_NAME, client) self.assertEqual(zone.name, self.ZONE_NAME) @@ -94,10 +110,8 @@ def test_ctor(self): self.assertEqual( zone.path, '/projects/%s/managedZones/%s' % (self.PROJECT, self.ZONE_NAME)) - self.assertEqual(zone.zone_id, None) self.assertEqual(zone.created, None) - self.assertEqual(zone.description, None) def test_from_api_repr_missing_identity(self): diff --git a/gcloud/dns/zone.py b/gcloud/dns/zone.py index 52f8e2818759..7f6d20d970df 100644 --- a/gcloud/dns/zone.py +++ b/gcloud/dns/zone.py @@ -30,15 +30,16 @@ class ManagedZone(object): :type name: string :param name: the name of the zone - :type dns_name: string - :param dns_name: the DNS name of the zone + :type dns_name: string or :class:`NoneType` + :param dns_name: the DNS name of the zone. If not passed, then calls + to :meth:`create` will fail. :type client: :class:`gcloud.dns.client.Client` :param client: A client which holds credentials and project configuration for the zone (which requires a project). """ - def __init__(self, name, dns_name, client): + def __init__(self, name, dns_name=None, client=None): self.name = name self.dns_name = dns_name self._client = client