You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.3 KiB
Plaintext

#!/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)