Source code for pydivide.cleanup_files

# Copyright 2018 Regents of the University of Colorado. All Rights Reserved.
# Released under the MIT license.
# This software was developed at the University of Colorado's Laboratory for Atmospheric and Space Physics.
# Verify current version before use at: https://github.com/MAVENSDC/Pydivide

from __future__ import division
import numpy
import glob
from pydivide.download_files_utilities import get_root_data_dir
import os


[docs]def cleanup_files(): """ CLEANUP_FILES Searches code directory for .tab files, keeps latest versions/revisions, asks to delete old versions x = cleanup_files() """ # Pull directory path preferences from mvn_toolkit_prefs.txt dir_path = get_root_data_dir() print("Looking for files in " + dir_path + "/* ...") files_del = [] files_ver = [] files_date = [] files_rev = [] # Search for .tab files in directory path for filename in glob.iglob(dir_path + '/**/*.tab', recursive=True): if filename.endswith(".tab"): # Pull version and date from filename fver = filename[-10:-8] fdate = filename[-20:-12] frev = filename[-6:-4] files_del = files_del + [filename] files_ver = files_ver + [fver] files_date = files_date + [fdate] files_rev = files_rev + [frev] # Convert from strings to int arrays tot_files = len(files_del) files_date = list(map(int, files_date)) files_ver = list(map(int, files_ver)) files_rev = list(map(int, files_rev)) datearray = numpy.array(files_date) verarray = numpy.array(files_ver) setdatearray = list(set(datearray)) # Group version numbers by date date_dict = dict() for date in setdatearray: index = [i for i, j in enumerate(datearray) if j == date] for i in index: if date in date_dict: # append the new number to the existing array at this slot date_dict[date].append(verarray[i]) else: # create a new array in this slot date_dict[date] = [verarray[i]] # Group filenames by date file_dict = dict() for date in setdatearray: index = [i for i, j in enumerate(datearray) if j == date] for i in index: if date in file_dict: # append the new number to the existing array at this slot file_dict[date].append(files_del[i]) else: # create a new array in this slot file_dict[date] = [files_del[i]] # Group revision numbers by date rev_dict = dict() for date in setdatearray: index = [i for i, j in enumerate(datearray) if j == date] for i in index: if date in rev_dict: # append the new number to the existing array at this slot rev_dict[date].append(files_rev[i]) else: # create a new array in this slot rev_dict[date] = [files_rev[i]] frev = [] tot_files_old = 0 # Output names of latest files print("Newest versions of .tab files are:") for key in date_dict: versions = date_dict[key] newest = max(versions) rep_ver = versions.count(newest) # If more than one of the same version if rep_ver > 1: for r in rev_dict[key]: # If version associate with revision isn't the newest, convert to -1 placeholder if date_dict[key][rev_dict[key].index(r)] != newest: frev = frev + [-1] else: frev = frev + [r] # Find latest revision, correllate with version newrev = max(frev) newest_ind = frev.index(newrev) else: newest_ind = versions.index(newest) # Create string for printing pr_ver_del = " " + str(file_dict[key][newest_ind])[-34:] print(pr_ver_del) tot_files_old += 1 # Remove newest from file dictionary file_dict[key].remove(file_dict[key][newest_ind]) flag = 0 # Uf file_dict entry still has entries, verify deletion for key in file_dict: if not file_dict[key]: pass else: flag = 1 if flag == 0: print("All files up to date. Returning...") return else: if tot_files - tot_files_old == 1: print("You have " + str(tot_files - tot_files_old) + " out of date file.") del_verif = input("Would you like to remove it? (Y/N) > ") else: print("You have " + str(tot_files - tot_files_old) + " out of date files.") del_verif = input("Would you like to remove all older versions/revisions? (Y/N) > ") if del_verif == "Y" or del_verif == "y": print("Removing:") # If nothing in date key, do nothing for key in file_dict: if not file_dict[key]: pass else: # Reconstruct file path for item in file_dict[key]: del_path = '/'.join(str(item).split('\\')) del_path = '/'.join(del_path.split('//')) print(" " + del_path) # Remove file os.remove(del_path) print("Old versions removed.") else: print("Old versions will not be removed. Returning...") return