""" Remove old "dc" indices except for master which always stays. """ import datetime import subprocess import sys from requests import Session MAXDAYS = 7 session = Session() session.headers["Accept"] = "application/json" def get_indexes(baseurl, username): response = session.get(baseurl + username) assert response.status_code == 200 result = response.json()["result"] return result["indexes"] def get_projectnames(baseurl, username, indexname): response = session.get(baseurl + username + "/" + indexname) assert response.status_code == 200 result = response.json()["result"] return result["projects"] def get_release_dates(baseurl, username, indexname, projectname): response = session.get(baseurl + username + "/" + indexname + "/" + projectname) assert response.status_code == 200 result = response.json()["result"] dates = set() for value in result.values(): if "+links" not in value: continue for link in value["+links"]: for log in link["log"]: dates.add(tuple(log["when"])) return dates def run(): baseurl = "https://m.devpi.net/" username = "dc" for indexname in get_indexes(baseurl, username): projectnames = get_projectnames(baseurl, username, indexname) if indexname == "master" or not indexname: continue clear_index = not projectnames for projectname in projectnames: dates = get_release_dates(baseurl, username, indexname, projectname) if not dates: print( "%s has no releases" % (baseurl + username + "/" + indexname), file=sys.stderr, ) date = datetime.datetime.now() else: date = datetime.datetime(*max(dates)) if (datetime.datetime.now() - date) > datetime.timedelta(days=MAXDAYS): assert username and indexname clear_index = True break if clear_index: url = baseurl + username + "/" + indexname subprocess.check_call(["devpi", "index", "-y", "--delete", url]) if __name__ == "__main__": run()