diff --git a/purge_static/cdn/cloudflare.py b/purge_static/cdn/cloudflare.py index 214184b..6aae252 100644 --- a/purge_static/cdn/cloudflare.py +++ b/purge_static/cdn/cloudflare.py @@ -4,6 +4,10 @@ import sys import requests import six +from purge_static.utils import chunk + +CLOUDFLARE_MAX_PURGE = 30 + class CloudFlareCDN(object): def __init__(self, args): @@ -31,15 +35,14 @@ class CloudFlareCDN(object): sys.exit('No zone for CloudFlare, use --zone.') def purge(self, urls): - resp = requests.post( - 'https://api.cloudflare.com/client/v4/zones/%s/purge_cache' % (self.zone,), - json={'files': urls}, headers={ - 'X-Auth-Email': self.email, - 'X-Auth-Key': self.api_key, - } - ).json() + for group in chunk(urls, CLOUDFLARE_MAX_PURGE): + resp = requests.post( + 'https://api.cloudflare.com/client/v4/zones/%s/purge_cache' % (self.zone,), + json={'files': group}, headers={ + 'X-Auth-Email': self.email, + 'X-Auth-Key': self.api_key, + } + ).json() - if resp.get('success'): - return - - sys.exit(resp) + if not resp.get('success'): + sys.exit(resp) diff --git a/purge_static/utils.py b/purge_static/utils.py new file mode 100644 index 0000000..0465a62 --- /dev/null +++ b/purge_static/utils.py @@ -0,0 +1,6 @@ +from itertools import islice + + +def chunk(it, size): + it = iter(it) + return iter(lambda: list(islice(it, size)), [])