You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by "Yaroslav Surzhikov (JIRA)" <ji...@apache.org> on 2018/04/09 23:26:00 UTC
[jira] [Created] (LIBCLOUD-992) Godaddy DNS driver: add lazy
iteration to list_zones method
Yaroslav Surzhikov created LIBCLOUD-992:
-------------------------------------------
Summary: Godaddy DNS driver: add lazy iteration to list_zones method
Key: LIBCLOUD-992
URL: https://issues.apache.org/jira/browse/LIBCLOUD-992
Project: Libcloud
Issue Type: Improvement
Components: DNS
Reporter: Yaroslav Surzhikov
Because [/v1/domains|https://developer.godaddy.com/doc/endpoint/domains#/v1/list] has a limit key, which is the default of 100 ( Unfortunately, this is not documented and was found empirically) - the corresponding method ( GoDaddyDNSDriver.list_zones ) will return maximum of 100 records.
So, my suggestion is:
Instead of this:
{code}
def list_zones(self):
"""
Return a list of zones (purchased domains)
:return: ``list`` of :class:`Zone`
"""
result = self.connection.request(
'/v1/domains/').object
zones = self._to_zones(result)
return zones
{code}
Use something like this:
{code}
def list_zones_helper(self, marker=''):
"""
Lazy recursive generator of zones (purchased domains)
:param marker: Domain to use as the offset in results
:return: ``generator`` of result items
"""
result = self.connection.request(
'/v1/domains/?marker={0}'.format(marker)
).object
if result:
yield from result
yield from self.list_zones_helper(result[-1]['domain'])
def list_zones(self):
"""
Return a list of zones (purchased domains)
:return: ``list`` of :class:`Zone`
"""
return self._to_zones(self.list_zones_helper())
{code}
In addition, there is a possible vulnerability in the "_to_zones" method - it can raise KeyError if domain was expired or cancelled and has no "expires" key in dictionary.
P.S. Sorry for any mistakes. English is not my native language
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)