1313# limitations under the License.
1414
1515"""Define API ManagedZones."""
16+
1617import six
1718
1819from google .cloud ._helpers import _rfc3339_to_datetime
1920from google .cloud .exceptions import NotFound
2021from google .cloud .dns .changes import Changes
2122from google .cloud .dns .resource_record_set import ResourceRecordSet
23+ from google .cloud .iterator import Iterator
24+ from google .cloud .iterator import Page
2225
2326
2427class ManagedZone (object ):
@@ -330,29 +333,13 @@ def list_resource_record_sets(self, max_results=None, page_token=None,
330333 :param client: the client to use. If not passed, falls back to the
331334 ``client`` stored on the current zone.
332335
333- :rtype: tuple, (list, str)
334- :returns: list of
335- :class:`~.resource_record_set.ResourceRecordSet`,
336- plus a "next page token" string: if the token is not None,
337- indicates that more zones can be retrieved with another
338- call (pass that value as ``page_token``).
336+ :rtype: :class:`_ResourceRecordSetIterator`
337+ :returns: An iterator of
338+ :class:`~.resource_record_set.ResourceRecordSet` objects.
339339 """
340- params = {}
341-
342- if max_results is not None :
343- params ['maxResults' ] = max_results
344-
345- if page_token is not None :
346- params ['pageToken' ] = page_token
347-
348- path = '/projects/%s/managedZones/%s/rrsets' % (
349- self .project , self .name )
350- client = self ._require_client (client )
351- conn = client .connection
352- resp = conn .api_request (method = 'GET' , path = path , query_params = params )
353- zones = [ResourceRecordSet .from_api_repr (resource , self )
354- for resource in resp ['rrsets' ]]
355- return zones , resp .get ('nextPageToken' )
340+ return _ResourceRecordSetIterator (
341+ self , page_token = page_token ,
342+ max_results = max_results , client = client )
356343
357344 def list_changes (self , max_results = None , page_token = None , client = None ):
358345 """List change sets for this zone.
@@ -373,26 +360,124 @@ def list_changes(self, max_results=None, page_token=None, client=None):
373360 :param client: the client to use. If not passed, falls back to the
374361 ``client`` stored on the current zone.
375362
376- :rtype: tuple, (list, str)
377- :returns: list of
378- :class:`~.resource_record_set.ResourceRecordSet`,
379- plus a "next page token" string: if the token is not None,
380- indicates that more zones can be retrieved with another
381- call (pass that value as ``page_token``).
363+ :rtype: :class:`_ChangesIterator`
364+ :returns: An iterator of :class:`~.changes.Changes` objects.
382365 """
383- params = {}
366+ return _ChangesIterator (self , page_token = page_token ,
367+ max_results = max_results , client = client )
368+
384369
385- if max_results is not None :
386- params [ 'maxResults' ] = max_results
370+ class _ResourceRecordSetPage ( Page ) :
371+ """Iterator for a single page of results.
387372
388- if page_token is not None :
389- params ['pageToken' ] = page_token
373+ :type parent: :class:`_ResourceRecordSetIterator`
374+ :param parent: The iterator that owns the current page.
375+
376+ :type response: dict
377+ :param response: The JSON API response for a page of resource record sets.
378+ """
379+
380+ ITEMS_KEY = 'rrsets'
381+
382+ def _item_to_value (self , resource ):
383+ """Convert a JSON resource record set value to the native object.
384+
385+ :type resource: dict
386+ :param resource: An item to be converted to a resource record set.
390387
388+ :rtype: :class:`~.resource_record_set.ResourceRecordSet`
389+ :returns: The next resource record set in the page.
390+ """
391+ return ResourceRecordSet .from_api_repr (resource , self ._parent .zone )
392+
393+
394+ class _ResourceRecordSetIterator (Iterator ):
395+ """An iterator listing all resource record sets.
396+
397+ :type zone: :class:`ManagedZone`
398+ :param zone: The managed zone from which to list resource record sets.
399+
400+ :type page_token: str
401+ :param page_token: (Optional) A token identifying a page in a result set.
402+
403+ :type max_results: int
404+ :param max_results: (Optional) The maximum number of results to fetch.
405+
406+ :type extra_params: dict or ``NoneType``
407+ :param extra_params: Extra query string parameters for the API call.
408+
409+ :type client: :class:`~google.cloud.dns.client.Client`
410+ :param client: (Optional) The client to use for making connections.
411+ Defaults to the zone's client.
412+ """
413+
414+ PAGE_CLASS = _ResourceRecordSetPage
415+
416+ def __init__ (self , zone , page_token = None , max_results = None ,
417+ extra_params = None , client = None ):
418+ if client is None :
419+ client = zone ._client
420+ self .zone = zone
421+ path = '/projects/%s/managedZones/%s/rrsets' % (
422+ zone .project , zone .name )
423+ super (_ResourceRecordSetIterator , self ).__init__ (
424+ client = client , path = path , page_token = page_token ,
425+ max_results = max_results , extra_params = extra_params )
426+
427+
428+ class _ChangesPage (Page ):
429+ """Iterator for a single page of results.
430+
431+ :type parent: :class:`_ChangesIterator`
432+ :param parent: The iterator that owns the current page.
433+
434+ :type response: dict
435+ :param response: The JSON API response for a page of "changes".
436+ """
437+
438+ ITEMS_KEY = 'changes'
439+
440+ def _item_to_value (self , resource ):
441+ """Convert a JSON "changes" value to the native object.
442+
443+ :type resource: dict
444+ :param resource: An item to be converted to a "changes".
445+
446+ :rtype: :class:`.Changes`
447+ :returns: The next "changes" in the page.
448+ """
449+ return Changes .from_api_repr (resource , self ._parent .zone )
450+
451+
452+ class _ChangesIterator (Iterator ):
453+ """An iterator listing all changes.
454+
455+ :type zone: :class:`ManagedZone`
456+ :param zone: The managed zone from which to list changes.
457+
458+ :type page_token: str
459+ :param page_token: (Optional) A token identifying a page in a result set.
460+
461+ :type max_results: int
462+ :param max_results: (Optional) The maximum number of results to fetch.
463+
464+ :type extra_params: dict or ``NoneType``
465+ :param extra_params: Extra query string parameters for the API call.
466+
467+ :type client: :class:`~google.cloud.dns.client.Client`
468+ :param client: (Optional) The client to use for making connections.
469+ Defaults to the zone's client.
470+ """
471+
472+ PAGE_CLASS = _ChangesPage
473+
474+ def __init__ (self , zone , page_token = None , max_results = None ,
475+ extra_params = None , client = None ):
476+ if client is None :
477+ client = zone ._client
478+ self .zone = zone
391479 path = '/projects/%s/managedZones/%s/changes' % (
392- self .project , self .name )
393- client = self ._require_client (client )
394- conn = client .connection
395- resp = conn .api_request (method = 'GET' , path = path , query_params = params )
396- zones = [Changes .from_api_repr (resource , self )
397- for resource in resp ['changes' ]]
398- return zones , resp .get ('nextPageToken' )
480+ zone .project , zone .name )
481+ super (_ChangesIterator , self ).__init__ (
482+ client = client , path = path , page_token = page_token ,
483+ max_results = max_results , extra_params = extra_params )
0 commit comments