new file versioning policy and manager. be sure to add version_folder in your conf
This commit is contained in:
@@ -93,6 +93,68 @@ def list_folders(shares,config):
|
||||
print(tabulate(table, headers = "firstrow"))
|
||||
|
||||
|
||||
def list_versions(shares, config, opts):
|
||||
if 'data_folder' not in config:
|
||||
print("data_folder not defined in config")
|
||||
sys.exit(1)
|
||||
data_folder = os.path.join(config['__root_path__'], config['data_folder'])
|
||||
table = []
|
||||
header = ['Share', 'Path', 'File', 'Size', 'Unit']
|
||||
if opts.delete == None:
|
||||
header.append('Age')
|
||||
else:
|
||||
header.append('Delete')
|
||||
table.append(header)
|
||||
now = datetime.now()
|
||||
for share in shares:
|
||||
if opts.name:
|
||||
if share['name'] != opts.name:
|
||||
continue
|
||||
version_folder = os.path.join(
|
||||
data_folder,
|
||||
share['path'],
|
||||
config['version_folder']
|
||||
)
|
||||
if not os.path.isdir(version_folder):
|
||||
table.append((
|
||||
share['name'],
|
||||
share['path']+'/',
|
||||
'-', '-', '-', '-'
|
||||
))
|
||||
else:
|
||||
for filename in sorted(os.listdir(version_folder)):
|
||||
full_path = os.path.join(version_folder, filename)
|
||||
if os.path.isdir(full_path):
|
||||
size = get_folder_size(full_path)
|
||||
else:
|
||||
size = os.path.getsize(full_path)
|
||||
(size_num, size_unit) = file_size_human(
|
||||
size,
|
||||
HTML=False
|
||||
).split(" ",1)
|
||||
parsed_date = version_date(filename)
|
||||
if parsed_date == None:
|
||||
age_str = '-'
|
||||
else:
|
||||
age = now - parsed_date
|
||||
age_str = "%d d"%( age.days, )
|
||||
if opts.delete != None:
|
||||
to_delete = age.days >= opts.delete
|
||||
age_str = "To Del" if to_delete else "Keep"
|
||||
if not opts.dry and to_delete:
|
||||
age_str = "Deleted"
|
||||
os.remove(full_path)
|
||||
table.append((
|
||||
share['name'],
|
||||
share['path'] + '/',
|
||||
filename,
|
||||
size_num,
|
||||
size_unit,
|
||||
age_str
|
||||
))
|
||||
print(tabulate(table, headers = "firstrow"))
|
||||
|
||||
|
||||
def add_share(shares, config, opts):
|
||||
|
||||
# Make name and path safe:
|
||||
@@ -408,7 +470,7 @@ def print_rest_api_download(config, share, token, show_filename):
|
||||
if not os.path.exists(share_path):
|
||||
print("no files")
|
||||
sys.exit(0)
|
||||
for filename in iter_folder_files(share_path):
|
||||
for filename in iter_folder_files(share_path, version_folder = config['version_folder']):
|
||||
if show_filename:
|
||||
if filename != show_filename:
|
||||
continue
|
||||
@@ -441,7 +503,7 @@ def print_rest_api_direct(config, share, token, show_filename):
|
||||
if not os.path.exists(share_path):
|
||||
print("no files")
|
||||
sys.exit(0)
|
||||
for filename in iter_folder_files(share_path):
|
||||
for filename in iter_folder_files(share_path, version_folder = config['version_folder']):
|
||||
if show_filename:
|
||||
if filename != show_filename:
|
||||
continue
|
||||
@@ -540,6 +602,14 @@ def parse_options():
|
||||
parser_list = subparsers.add_parser('list', help = "List shares")
|
||||
## list folders
|
||||
parser_folders = subparsers.add_parser('folders', help = "List the subfolders in data folder, and their disk usage")
|
||||
## list versions
|
||||
parser_versions = subparsers.add_parser('versions', help = "List the old versions stored in shares, and their disk usage")
|
||||
parser_versions.add_argument('--delete', action="store", dest="delete", default = None, type = int,
|
||||
help = "Delete old versions, older than N days.")
|
||||
parser_versions.add_argument('--dry', action="store_true", dest="dry", default = False,
|
||||
help = "Do not actually delete files.")
|
||||
parser_versions.add_argument('-n','--name', action="store", dest="name", required = False, default = None,
|
||||
help = "Show / Delete only this share versions. If omitted, applies to all shares")
|
||||
## Show
|
||||
parser_show = subparsers.add_parser('show', help = "Show share")
|
||||
parser_show.add_argument('-P', action="store_true", dest="show_password", default = False,
|
||||
@@ -655,6 +725,8 @@ if __name__ == "__main__":
|
||||
|
||||
if opts.subparser_name == 'list':
|
||||
list_shares(shares,opts)
|
||||
if opts.subparser_name == 'versions':
|
||||
list_versions(shares,config,opts)
|
||||
elif opts.subparser_name == 'folders':
|
||||
list_folders(shares,config)
|
||||
elif opts.subparser_name == 'show':
|
||||
|
||||
Reference in New Issue
Block a user