From aff77c5cc2d5f99ec893ec3bfa8db4b85dcac02b Mon Sep 17 00:00:00 2001 From: Gnarwhal Date: Thu, 1 Aug 2024 01:14:10 +0000 Subject: [PATCH] Now loads config file --- pyproject.toml | 1 + src/sshare/cli.py | 65 +++++++++++++++++++++++++++++++++-------------- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ab9befc..029509e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ classifiers = [ "Environment :: Console", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", ] +requires-python = ">=3.11" dependencies = [ "pyclip", ] diff --git a/src/sshare/cli.py b/src/sshare/cli.py index 4994850..336f1ef 100644 --- a/src/sshare/cli.py +++ b/src/sshare/cli.py @@ -14,15 +14,46 @@ import argparse import getpass -import importlib.util import os import os.path -import pkg_resources import pyclip import time +import tomllib import subprocess import sys -import _version +from _version import version + +class Config: + def __init__(self): + config_directory = os.environ.get("XDG_CONFIG_DIR") + if config_directory == None: + config_directory = f"{os.environ["HOME"]}/.config" + _config = self._load_from_file(f"{config_directory}/sshare/config.toml") + + self.source_directory = _config.get("source_directory") + ssh = _config.get("ssh") + if ssh == None: + print("Error: 'ssh' cannot be 'None'") + sys.exit(1) + self.ssh_port = ssh.get("port") + self.ssh_user = ssh.get("user") + self.ssh_target = ssh.get("target") + self.ssh_directory = ssh.get("directory") + + if self.ssh_port == None: + self.ssh_port = 22 + if self.ssh_user == None: + self.ssh_user = getpass.getuser() + if self.ssh_target == None: + print("Error: 'ssh.target' cannot be 'None'") + sys.exit(1) + if self.ssh_directory == None: + print("Error: 'ssh.directory' cannot be 'None'") + sys.exit(1) + + def _load_from_file(self, config_path): + with open(config_path, mode="rb") as file: + return tomllib.load(file) def main(): arguments = parse_arguments() @@ -34,28 +65,31 @@ def main(): if arguments.latest or arguments.file != None: file_path = "" if arguments.latest: + if config.source_directory == "": + print("Option 'latest' requires source directory to be specified") + sys.exit(1) file_path = _latest(config.source_directory) else: file_path = arguments.file - print(f"=> Uploading file '{file_path}'") + print(f"Uploading file '{file_path}'") with open(file_path, mode="rb") as file: contents = file.read() (_, target_file_extension) = os.path.splitext(file_path) elif arguments.paste: - print("=> Uploading contents of clipboard") + print("Uploading contents of clipboard") contents = pyclip.paste() target_file_extension = ".txt" else: - print("=> Error: must specify one of -f FILE, -l, -p") + print("Error: must specify one of -f FILE, -l, -p") sys.exit(1) target_id = time.time_ns() target_file_name = f"{target_id}{target_file_extension}" - target_file = f"{config.ssh_dir}/{target_file_name}" + target_file = f"{config.ssh_directory}/{target_file_name}" target_destination = f"{config.ssh_user}@{config.ssh_target}" - print(f"=> Uploading to '{target_destination}:{target_file}'") + print(f"Uploading to host: {target_destination}, port: {config.ssh_port}, file: {target_file}") process = subprocess.run([ "ssh", f"-p {config.ssh_port}", @@ -66,14 +100,14 @@ def main(): input = contents, ) if process.returncode != 0: - print("=> Error: failed to upload file") + print("Error: failed to upload file") sys.exit(1) target_url = f"https://{config.ssh_target}/sshare/{target_file_name}" - print(f"=> File available at '{target_url}'") + print(f"File available at '{target_url}'") if arguments.copy: pyclip.copy(target_url) - print("=> URL copied to clipboard") + print("URL copied to clipboard") sys.exit(0) @@ -88,7 +122,7 @@ def parse_arguments(): "-v", "--version", action="version", - version=f"%(prog)s version {_version.version}", + version=f"%(prog)s version {version}", ) parser.add_argument( "-l", @@ -133,10 +167,3 @@ def _latest(directory, key=os.path.getmtime): return selection -class Config: - def __init__(self): - self.source_directory = "/home/gnarwhal/Pictures/Screenshots" - self.ssh_port = 2222 - self.ssh_user = getpass.getuser() - self.ssh_target = "monodon.me" - self.ssh_dir = "/srv/gnarwhal/sshare"