Merge "Purge normalized URLs"

This commit is contained in:
Jenkins 2016-07-28 14:58:11 +00:00 committed by Gerrit Code Review
commit 6f5b7ec8ce
1 changed files with 31 additions and 5 deletions

View File

@ -15,8 +15,12 @@
# limitations under the License.
import logging
import os
import re
import requests
import subprocess
import time
import urlparse
def setup_logging(logger):
@ -28,6 +32,25 @@ def setup_logging(logger):
logger.addHandler(ch)
def normalize(name):
return re.sub(r"[-_.]+", "-", name).lower()
def get_purge_urls(url):
res = urlparse.urlparse(url)
ret = [url]
ret.append(os.path.join(url, 'json'))
m = re.match('^/simple/([^/$]*)', res[2])
if m:
package = normalize(m.group(1))
new_url = list(res[:])
new_url[2] = '/simple/%s/' % package
ret.append(urlparse.urlunparse(new_url))
new_url[2] = '/simple/%s/json' % package
ret.append(urlparse.urlunparse(new_url))
return ret
def main():
logger = logging.getLogger('bandersnatch')
setup_logging(logger)
@ -40,11 +63,14 @@ def main():
if 'Expected PyPI serial' in line:
url = line.split("for request ")[1].split()[0]
stale[url] = True
for url in stale.keys():
logger.info('Purging %s' % url)
response = requests.request('PURGE', url)
if not response.ok:
logger.error('Failed to purge %s: %s' % (url, response.text))
for stale_url in stale.keys():
logger.info('Purging URLs for stale request %s' % stale_url)
for url in get_purge_urls(request_url):
logger.info('Purging %s' % url)
response = requests.request('PURGE', url)
if not response.ok:
logger.error('Failed to purge %s: %s' % (url, response.text))
time.sleep(0.1)
if __name__ == '__main__':