# chezmoi:template:left-delimiter=#{{ #{{- /* vim: set filetype=python: */ -}} #{{ if .include_legacy -}} #!/usr/bin/env python3 ''' Move a document to the correct documents folder ''' import filecmp import os import re import shutil import sys from datetime import date from unicodedata import normalize _punctuation_re = re.compile(r'[\t !"#$%&\'()*\-/<=>?@\[\\\]^_`{|},.]+') def slugify(text, delim='-'): """ Generate an ASCII-only slug. """ result = [] for word in _punctuation_re.split(text.lower()): word = normalize('NFKD', word) \ .encode('ascii', 'ignore') \ .decode('utf-8') if word: result.append(word) return delim.join(result) def usage(): return 'Usage: mv-to-docs [SRC_DOC] [CATEGORY] [MESSAGE]' def main(file_name='', dir_name='', message = ''): file_type = file_name.split('.')[-1] if not os.path.isfile(file_name): print('ERROR: Cannot find file: {}'.format(file_name)) sys.exit(usage()) file_date = date.fromtimestamp(os.path.getmtime(file_name)) doc_path = os.path.expanduser('~/documents/records/{}'.format(dir_name)) if not os.path.exists(doc_path): print('could not find path → creating directory: {}'.format(doc_path)) os.mkdir(doc_path) year = file_date.strftime("%Y") path_with_year = '{}/{}'.format(doc_path, year) if not os.path.exists(path_with_year): os.mkdir(path_with_year) pass new_file_path = '{}/{}_{}.{}'.format(path_with_year, file_date, message, file_type) if not os.path.isfile(new_file_path): print("Moving file '{}' to '{}'".format(file_name, new_file_path)) shutil.copyfile(file_name, new_file_path) os.unlink(file_name) else: if filecmp.cmp(new_file_path, file_name): print('Two files already exist and are same: {} and {}'.format(file_name, new_file_path)) else: print('destination file already exists {}'.format(new_file_path)) if __name__ == "__main__": try: file_name = sys.argv[1] dir_name = slugify(sys.argv[2]) except IndexError: sys.exit(usage()) try: message = slugify(sys.argv[3]) except IndexError: message = "" main(file_name=file_name, dir_name=dir_name, message=message) #{{- end }}