libcloud-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Quentin Pradet (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LIBCLOUD-992) Godaddy DNS driver: add lazy iteration to list_zones method
Date Tue, 10 Apr 2018 05:18:00 GMT

    [ https://issues.apache.org/jira/browse/LIBCLOUD-992?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16431732#comment-16431732
] 

Quentin Pradet commented on LIBCLOUD-992:
-----------------------------------------

Hello, and thank you! (English is not my native language either.)

Would you be interested in adding this to libcloud yourself? We would need tests and making
sure the code is robust.

> 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
>            Priority: Minor
>
> 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)

Mime
View raw message