« Back to Index

[Python CLI Flags for CDN purge]

View original Gist on GitHub

Tags: #python #cli #flags #cdn #purge

Python CLI Flags for CDN purge.py

#!/usr/bin/env python3

import argparse
import time
import json
from urllib.request import Request, urlopen


def purge_cdn(service_id: str, key: str, fastly_key: str) -> None:
    print('[cdn-purger] Purging {}'.format(key))
    prurge_url = 'https://api.fastly.com/service/{}/purge/{}'.format(service_id, key)
    headers = {
        'X-Fastly-Key': fastly_key,
        'Fastly-Soft-Purge': '1'
    }
    with urlopen(Request(prurge_url, method='POST', headers=headers), timeout=5) as response:
        resp = json.loads(response.read().decode())
    print('[cdn-purger] Purge status: {}, id: {}'.format(resp['status'], resp['id']))


def main():
    parser = argparse.ArgumentParser(description='Purge CDN')
    parser.add_argument('-d', '--delay', help='delay befor purge request (seconds)', type=int, default=30)
    parser.add_argument('-r', '--retry', help='number of retries before giving up', type=int, default=3)
    args = parser.parse_args()
    time.sleep(args.delay)
    service_id = "123"
    key = '{}-{}'.format("foo", "stage")
    fastly_key = "456"
    for i, _ in enumerate(range(args.retry), 1):
        try:
            purge_cdn(service_id, key, fastly_key)
        except Exception as e:
            print('[cdn-purger] Purge failed: {}, try: {}/{}'.format(e, i, args.retry))
        else:
            break


if __name__ == '__main__':
    main()