#!/usr/bin/python import re import os import subprocess from datetime import datetime, timedelta if "ST_AUTH" in os.environ: del os.environ['ST_AUTH'] if "ST_USER" in os.environ: del os.environ['ST_USER'] if "ST_KEY" in os.environ: del os.environ['ST_KEY'] class SwiftError(Exception): pass def call_swift(*arguments): # swift_args = ["/usr/local/bin/swift", "-A", "https://cloud.sdsc.edu/auth/v1.0", "-U", "cipres:mmiller", "-K", "caslpefL"] swift_args = ["/usr/bin/swift", "--os-auth-url", "https://identity.cloud.sdsc.edu:5000/v3", "--auth-version", "3", "--os-project-name", "cipres", "--os-username", "mmiller@ucsd.edu", "--os-password", "onTzMvJ4"] for arg in arguments: swift_args.append(arg) process = subprocess.Popen(swift_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = process.communicate() if err: raise SwiftError(err) return out zip_name_pattern = re.compile("NGBW-JOB-\\S+\\.zip") dir_name_pattern = re.compile("Job_\\S+") mod_date_pattern = re.compile("\\s*Last Modified:\\s*(.+)") cutoff_date = datetime.today() - timedelta(days=30) swift_output = call_swift("list") containers = re.split("\n", swift_output.strip()) for container in containers: swift_output = call_swift("list", container) objects = re.split("\n", swift_output.strip()) for item in objects: if not zip_name_pattern.match(item) and not dir_name_pattern.match(item): continue swift_output = call_swift("stat", container, item) item_info = re.split("\n", swift_output.strip()) for line in item_info: match = mod_date_pattern.match(line) if match: mod_date = datetime.strptime(match.group(1), "%a, %d %b %Y %H:%M:%S %Z") if mod_date < cutoff_date: call_swift("delete", container, item) break