From 1fd36242bb94dd9d2e9dda6cf97da6074d4946ea Mon Sep 17 00:00:00 2001 From: Niklas Halle Date: Sat, 25 Jul 2020 16:02:33 +0200 Subject: initial --- main.py | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100755 main.py (limited to 'main.py') diff --git a/main.py b/main.py new file mode 100755 index 0000000..f47af9a --- /dev/null +++ b/main.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python + +import os +import sys +import getopt +import traceback + +from pathlib import Path +from datetime import datetime +from configparser import ConfigParser + + +def usage(): + print(os.path.basename(sys.argv[0]) + "[-h|--help] [-s|--skip] [-t|--title title] [-c|--correspondent " + "correspondent] [--tags tags] file") + print(" -h|--help prints this help and exits") + print(" -t|--title title to give to the file") + print(" -c|--correspondent correspondent of the file") + print(" --tags comma-separated additional tags for the file") + print(" file path to pdf to upload") + + +def read_config(): + config_object = ConfigParser() + config_object.read(os.environ.get('XDG_CONFIG_HOME') + "/paperless_upload.ini") + + sever_info = config_object["SERVER_CONFIG"] + state = config_object["STATE"] + return sever_info["remote"], sever_info["remote_path"], sever_info["user"], state["current_id"] + + +def update_id(new_id): + config_object = ConfigParser() + config_object.read(os.environ.get('XDG_CONFIG_HOME') + "/paperless_upload.ini") + + state = config_object["STATE"] + + # Update the password + state["current_id"] = str(new_id) + + # Write changes back to file + with open(os.environ.get('XDG_CONFIG_HOME') + "/paperless_upload.ini", 'w') as conf: + config_object.write(conf) + + +def upload(remote, remote_path, username, file_id, path, title, correspondent, tags): + if not remote_path: + remote_path = input("Remote path: ") + if not remote: + remote = input("Remote: ") + if not remote_path: + remote_path = input("Consumer path: ") + if not username: + username = input("Username: ") + if not file_id: + file_id = input("File ID: ") + if not title: + title = input("Title: ") + if not correspondent: + correspondent = input("Correspondent: ") + + if not remote: + print("You need to name a remote server to push to!") + sys.exit(6) + if not remote_path: + print("You need to name a remote path to push to!") + sys.exit(6) + if not username: + print("You need to provide a username to login with!") + sys.exit(6) + if not file_id: + file_id = "NONE" + if not title: + title = Path(path).with_suffix('').__str__() + if not correspondent: + correspondent = "UNSET" + + # current date and time + now = datetime.now() + zulu_format = "%Y%m%d%H%M%S" + time1 = now.strftime(zulu_format) + + # https://paperless.readthedocs.io/en/latest/guesswork.html?highlight=guesswork + # --> "Date - Correspondent - Title - tag,tag,tag.pdf" + guess_work_name = time1 + "Z - " + correspondent + " - " + title + if tags: + guess_work_name = guess_work_name + " - id" + str(file_id) + "," + tags + ".pdf" + else: + guess_work_name = guess_work_name + " - id" + str(file_id) + ".pdf" + + remote_file = (remote_path + guess_work_name).replace(" ", "\\\\ ") + command = f"scp {path} {username}@{remote}:\"{remote_file}\"" + print("# use the following command to upload:") + print(command) + + +def main(): + try: + opts, args = getopt.getopt(sys.argv[1:], "ht:c:", ["help", "title", "correspondent", "tags"]) + except getopt.GetoptError as err: + # print help information and exit: + print(err) # will print something like "option -a not recognized" + usage() + sys.exit(2) + + title = "" + correspondent = "" + tags = "" + + for o, a in opts: + if o in ("-h", "--help"): + usage() + sys.exit() + elif o in ("-t", "--title"): + title = a + elif o in ("-c", "--correspondent"): + correspondent = a + elif o == "--tags": + tags = a + else: + assert False, "unhandled option: " + o + + if len(args) != 1: + usage() + sys.exit(3) + + try: + remote, remote_path, username, file_id = read_config() + except Exception: + traceback.print_exc() + sys.exit(4) + + try: + upload(remote=remote, remote_path=remote_path, username=username, file_id=file_id, + path=args[0], title=title, correspondent=correspondent, tags=tags) + except Exception: + traceback.print_exc() + sys.exit(5) + else: + update_id(int(file_id) + 1) + + +if __name__ == "__main__": + main() -- cgit v1.2.3-54-g00ecf