Skip to content

Commit e179521

Browse files
committed
Added more examples of using raw mode and updated README
1 parent 8f7b510 commit e179521

File tree

4 files changed

+160
-12
lines changed

4 files changed

+160
-12
lines changed

README.md

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,66 @@ import CloudFlare
5151

5252
def main():
5353
cf = CloudFlare.CloudFlare()
54-
zones = cf.zones.get(params = {'per_page':50})
54+
zones = cf.zones.get()
5555
for zone in zones:
56+
zone_id = zone['id']
5657
zone_name = zone['name']
58+
print zone_id, zone_name
59+
60+
if __name__ == '__main__':
61+
main()
62+
```
63+
64+
This example works when there are less than 50 zones (50 is the default number of values returned from a query like this).
65+
66+
Now lets expand on that and add code to show the IPv6 and SSL status of the zones. Lets also query 100 zones.
67+
68+
```python
69+
import CloudFlare
70+
71+
def main():
72+
cf = CloudFlare.CloudFlare()
73+
zones = cf.zones.get(params = {'per_page':100})
74+
for zone in zones:
5775
zone_id = zone['id']
58-
settings_ipv6 = cf.zones.settings.ipv6.get(zone_id)
59-
ipv6_status = settings_ipv6['value']
76+
zone_name = zone['name']
77+
6078
settings_ssl = cf.zones.settings.ssl.get(zone_id)
6179
ssl_status = settings_ssl['value']
62-
print zone_id, ssl_status, ipv6_status, zone_name
80+
81+
settings_ipv6 = cf.zones.settings.ipv6.get(zone_id)
82+
ipv6_status = settings_ipv6['value']
83+
84+
print zone_id, zone_name, ssl_status, ipv6_status
85+
86+
if __name__ == '__main__':
87+
main()
88+
```
89+
90+
In order to query more than a single page of zones, we would have to use the raw mode (decribed more below).
91+
We can loop over many get calls and pass the page paramater to facilitate the paging.
92+
93+
Raw mode is only needed when a get request has the possibility of returning many items.
94+
95+
```python
96+
import CloudFlare
97+
98+
def main():
99+
cf = CloudFlare.CloudFlare(raw=True)
100+
page_number = 0
101+
while True:
102+
raw_results = cf.zones.get(params={'per_page':5,'page':page_number})
103+
zones = raw_results['result']
104+
105+
for zone in zones:
106+
zone_id = zone['id']
107+
zone_name = zone['name']
108+
print zone_id, zone_name
109+
110+
total_pages = raw_results['result_info']['total_pages']
111+
page_number += 1
112+
if page_number == total_pages:
113+
break
63114

64115
if __name__ == '__main__':
65116
main()

README.rst

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,70 @@ status of the zone.
6767
6868
def main():
6969
cf = CloudFlare.CloudFlare()
70-
zones = cf.zones.get(params = {'per_page':50})
70+
zones = cf.zones.get()
7171
for zone in zones:
72+
zone_id = zone['id']
7273
zone_name = zone['name']
74+
print zone_id, zone_name
75+
76+
if __name__ == '__main__':
77+
main()
78+
79+
This example works when there are less than 50 zones (50 is the default
80+
number of values returned from a query like this).
81+
82+
Now lets expand on that and add code to show the IPv6 and SSL status of
83+
the zones. Lets also query 100 zones.
84+
85+
.. code:: python
86+
87+
import CloudFlare
88+
89+
def main():
90+
cf = CloudFlare.CloudFlare()
91+
zones = cf.zones.get(params = {'per_page':100})
92+
for zone in zones:
7393
zone_id = zone['id']
74-
settings_ipv6 = cf.zones.settings.ipv6.get(zone_id)
75-
ipv6_status = settings_ipv6['value']
94+
zone_name = zone['name']
95+
7696
settings_ssl = cf.zones.settings.ssl.get(zone_id)
7797
ssl_status = settings_ssl['value']
78-
print zone_id, ssl_status, ipv6_status, zone_name
98+
99+
settings_ipv6 = cf.zones.settings.ipv6.get(zone_id)
100+
ipv6_status = settings_ipv6['value']
101+
102+
print zone_id, zone_name, ssl_status, ipv6_status
103+
104+
if __name__ == '__main__':
105+
main()
106+
107+
In order to query more than a single page of zones, we would have to use
108+
the raw mode (decribed more below). We can loop over many get calls and
109+
pass the page paramater to facilitate the paging.
110+
111+
Raw mode is only needed when a get request has the possibility of
112+
returning many items.
113+
114+
.. code:: python
115+
116+
import CloudFlare
117+
118+
def main():
119+
cf = CloudFlare.CloudFlare(raw=True)
120+
page_number = 0
121+
while True:
122+
raw_results = cf.zones.get(params={'per_page':5,'page':page_number})
123+
zones = raw_results['result']
124+
125+
for zone in zones:
126+
zone_id = zone['id']
127+
zone_name = zone['name']
128+
print zone_id, zone_name
129+
130+
total_pages = raw_results['result_info']['total_pages']
131+
page_number += 1
132+
if page_number == total_pages:
133+
break
79134
80135
if __name__ == '__main__':
81136
main()
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/usr/bin/env python
2+
"""Cloudflare API code - example"""
3+
4+
import os
5+
import sys
6+
7+
sys.path.insert(0, os.path.abspath('..'))
8+
import CloudFlare
9+
import CloudFlare.exceptions
10+
11+
def main():
12+
cf = CloudFlare.CloudFlare(raw=True)
13+
14+
page_number = 0
15+
while True:
16+
try:
17+
raw_results = cf.zones.get(params={'per_page':5,'page':page_number})
18+
except CloudFlare.exceptions.CloudFlareAPIError as e:
19+
exit('/zones.get %d %s - api call failed' % (e, e))
20+
21+
zones = raw_results['result']
22+
domains = []
23+
for zone in zones:
24+
zone_id = zone['id']
25+
zone_name = zone['name']
26+
domains.append(zone_name)
27+
28+
count = raw_results['result_info']['count']
29+
page = raw_results['result_info']['page']
30+
per_page = raw_results['result_info']['per_page']
31+
total_count = raw_results['result_info']['total_count']
32+
total_pages = raw_results['result_info']['total_pages']
33+
34+
print "COUNT=%d PAGE=%d PER_PAGE=%d TOTAL_COUNT=%d TOTAL_PAGES=%d -- %s" % (count, page, per_page, total_count, total_pages, domains)
35+
36+
if page_number == total_pages:
37+
break
38+
page_number += 1
39+
40+
if __name__ == '__main__':
41+
main()
42+

examples/example_paging_thru_zones.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
tmp=/tmp/$$_
44
trap "rm ${tmp}; exit 0" 0 1 2 15
55

6-
PAGE=0
6+
PAGE_NUMBER=0
77

88
while true
99
do
10-
cli4 --raw per_page=5 page=${PAGE} /zones > ${tmp}
10+
cli4 --raw per_page=5 page=${PAGE_NUMBER} /zones > ${tmp}
1111

1212
domains=`jq -c '.|.result|.[]|.name' < ${tmp} | tr -d '"'`
1313
result_info=`jq -c '.|.result_info' < ${tmp}`
@@ -20,13 +20,13 @@ do
2020

2121
echo COUNT=${COUNT} PAGE=${PAGE} PER_PAGE=${PER_PAGE} TOTAL_COUNT=${TOTAL_COUNT} TOTAL_PAGES=${TOTAL_PAGES} -- ${domains}
2222

23-
if [ "${PAGE}" == "${TOTAL_PAGES}" ]
23+
if [ "${PAGE_NUMBER}" == "${TOTAL_PAGES}" ]
2424
then
2525
## last section
2626
break
2727
fi
2828

2929
# grab the next page
30-
PAGE=`expr ${PAGE} + 1`
30+
PAGE_NUMBER=`expr ${PAGE_NUMBER} + 1`
3131
done
3232

0 commit comments

Comments
 (0)