1#!/usr/bin/env python
2"""Cloudflare API code - example"""
3
4import os
5import sys
6import re
7
8sys.path.insert(0, os.path.abspath('..'))
9import CloudFlare
10
11def main():
12    """Cloudflare API code - example"""
13
14    # Grab the first argument, if there is one
15    try:
16        zone_name = sys.argv[1]
17        params = {'name':zone_name, 'per_page':1}
18    except IndexError:
19        params = {'per_page':50}
20
21    cf = CloudFlare.CloudFlare()
22
23    # grab the zone identifier
24    try:
25        zones = cf.zones.get(params=params)
26    except CloudFlare.exceptions.CloudFlareAPIError as e:
27        exit('/zones %d %s - api call failed' % (e, e))
28    except Exception as e:
29        exit('/zones.get - %s - api call failed' % (e))
30
31    # there should only be one zone
32    for zone in sorted(zones, key=lambda v: v['name']):
33        zone_name = zone['name']
34        zone_id = zone['id']
35        zone_type = zone['type']
36        if 'email' in zone['owner']:
37            zone_owner = zone['owner']['email']
38        else:
39            zone_owner = '"' + zone['owner']['name'] + '"'
40        zone_plan = zone['plan']['name']
41
42        print('%s %-35s %-30s %-20s %s' % (zone_id, zone_name, zone_type, zone_owner, zone_plan))
43
44        try:
45            dns_records = cf.zones.dns_records.get(zone_id)
46        except CloudFlare.exceptions.CloudFlareAPIError as e:
47            sys.stderr.write('/zones/dns_records %d %s - api call failed\n' % (e, e))
48            continue
49
50        prog = re.compile('\.*'+zone_name+'$')
51        dns_records = sorted(dns_records, key=lambda v: prog.sub('', v['name']) + '_' + v['type'])
52        for dns_record in dns_records:
53                r_name = dns_record['name']
54                r_type = dns_record['type']
55                if 'content' in dns_record:
56                    r_value = dns_record['content']
57                else:
58                    # should not happen
59                    r_value = ''
60                if 'priority' in dns_record:
61                    r_priority = dns_record['priority']
62                else:
63                    r_priority = ''
64                r_ttl = dns_record['ttl']
65                if zone_type == 'secondary':
66                    r_id = 'secondary'
67                else:
68                    r_id = dns_record['id']
69                print('\t%s %60s %6d %-5s %4s %s' % (r_id, r_name, r_ttl, r_type, r_priority, r_value))
70
71        print('')
72
73    exit(0)
74
75if __name__ == '__main__':
76    main()
77
78