diff --git a/examples/zone-export-json.py b/examples/zone-export-json.py new file mode 100644 index 0000000..e670528 --- /dev/null +++ b/examples/zone-export-json.py @@ -0,0 +1,32 @@ +# +# Copyright (c) 2026 NSONE, Inc. +# +# License under The MIT License (MIT). See LICENSE in project root. +# + +import os +import sys +import json + +from ns1 import NS1, Config + +zone_name = sys.argv[1] +env_api_key = os.environ.get("NS1_API_KEY", None) + +if env_api_key: + api_key = env_api_key + ns1_config = Config() + ns1_config.createFromAPIKey(api_key) + api = NS1(config=ns1_config) +else: + # NS1 will use config in ~/.nsone by default + api = NS1() + +# turn on "follow pagination". This will handle paginated responses for +# zone list and the records for a zone retrieve. It's off by default to +# avoid a breaking change +config = api.config +config["follow_pagination"] = True + +zone = api.zones().retrieve(zone_name, params={"export": True}) +print(json.dumps(zone, indent=2, sort_keys=True)) diff --git a/ns1/rest/zones.py b/ns1/rest/zones.py index 07f01fe..bea7fc9 100644 --- a/ns1/rest/zones.py +++ b/ns1/rest/zones.py @@ -106,13 +106,17 @@ def list(self, callback=None, errback=None): pagination_handler=zone_list_pagination, ) - def retrieve(self, zone, callback=None, errback=None): + def retrieve(self, zone, callback=None, errback=None, params=None): + kwargs = {} + if params is not None: + kwargs["params"] = params return self._make_request( "GET", "%s/%s" % (self.ROOT, zone), callback=callback, errback=errback, pagination_handler=zone_retrieve_pagination, + **kwargs, ) def search( diff --git a/ns1/zones.py b/ns1/zones.py index 3e5a8d8..81b7166 100644 --- a/ns1/zones.py +++ b/ns1/zones.py @@ -39,13 +39,15 @@ def __repr__(self): def __getitem__(self, item): return self.data.get(item, None) - def reload(self, callback=None, errback=None): + def reload(self, callback=None, errback=None, params=None): """ Reload zone data from the API. """ - return self.load(reload=True, callback=callback, errback=errback) + return self.load( + reload=True, callback=callback, errback=errback, params=params + ) - def load(self, callback=None, errback=None, reload=False): + def load(self, callback=None, errback=None, reload=False, params=None): """ Load zone data from the API. """ @@ -60,7 +62,7 @@ def success(result, *args): return self return self._rest.retrieve( - self.zone, callback=success, errback=errback + self.zone, callback=success, errback=errback, params=params ) def delete(self, callback=None, errback=None):