aboutsummaryrefslogtreecommitdiffstats
path: root/muddle/__main__.py
diff options
context:
space:
mode:
Diffstat (limited to 'muddle/__main__.py')
-rw-r--r--muddle/__main__.py143
1 files changed, 143 insertions, 0 deletions
diff --git a/muddle/__main__.py b/muddle/__main__.py
new file mode 100644
index 0000000..22f2396
--- /dev/null
+++ b/muddle/__main__.py
@@ -0,0 +1,143 @@
+#!/usr/bin/env python3
+
+import argparse
+import configparser
+import logging
+import colorlog
+
+import os
+import sys
+import platform
+import pathlib
+import json
+
+import moodle
+import gui
+
+
+MUDDLE_VERSION = "0.1.0"
+
+# A R G U M E N T S
+
+parser = argparse.ArgumentParser(description="Moodle Scraper")
+parser.add_argument("-g", "--gui", help="start with graphical interface", action="store_true")
+parser.add_argument("-v", "--verbose", help="be more verbose", action="store_true")
+parser.add_argument("-c", "--config", help="configuration file", type=str)
+parser.add_argument("-l", "--logfile", help="where to save logs", type=str)
+parser.add_argument("-V", "--version", help="version", action="store_true")
+args = parser.parse_args()
+
+# L O G G I N G
+
+logformatter = logging.Formatter("%(name)s - %(levelname)s - %(message)s")
+log = logging.getLogger("muddle")
+log.setLevel(logging.DEBUG)
+
+if args.verbose:
+ cli_handler = colorlog.StreamHandler()
+ cli_handler.setLevel(logging.DEBUG)
+ cli_formatter = colorlog.ColoredFormatter(
+ "%(name)-13s - %(log_color)s%(levelname)-8s%(reset)s: %(message)s",
+ datefmt=None,
+ reset=True,
+ log_colors={
+ 'DEBUG': 'cyan',
+ 'INFO': 'green',
+ 'WARNING': 'yellow',
+ 'ERROR': 'red',
+ 'CRITICAL': 'red,bg_white',
+ }
+ )
+ cli_handler.setFormatter(cli_formatter)
+ log.addHandler(cli_handler)
+
+# C O N F I G S A N D L O G S
+
+# default location for configuration and log files
+
+default_config_dir = pathlib.Path.cwd()
+default_log_dir = pathlib.Path.cwd()
+
+if platform.system() == "Linux":
+ # compliant with XDG
+ if os.environ.get("XDG_CONFIG_HOME"):
+ default_config_dir = pathlib.PurePath(os.environ["XDG_CONFIG_HOME"]).joinpath("muddle/")
+
+ elif pathlib.Path("~/.config").expanduser().exists():
+ default_config_dir = pathlib.Path("~/.config/muddle/").expanduser()
+
+ if os.environ.get("XDG_CACHE_HOME"):
+ default_log_dir = pathlib.Path(os.environ["XDG_CACHE_HOME"]).joinpath("muddle/")
+
+ elif pathlib.Path("~/.cache").expanduser().exists():
+ default_log_dir = pathlib.Path("~/.cache/muddle/").expanduser()
+
+elif platform.system() == "Windows":
+ if os.environ.get("APPDATA"):
+ default_config_dir = pathlib.Path(os.environ["APPDATA"]).joinpath("muddle/")
+
+ if os.environ.get("LOCALAPPDATA"):
+ default_log_dir = pathlib.Path(os.environ["LOCALAPPDATA"]).joinpath("muddle")
+
+# TODO: implement for MacOS
+
+default_config_file = default_config_dir.joinpath("muddle.ini")
+default_log_file = default_log_dir.joinpath("muddle.log")
+
+log.debug("set default config path {}".format(default_config_file))
+log.debug("set default log path {}".format(default_log_file))
+
+# user parameters
+
+log_file = pathlib.Path(default_log_file)
+if args.logfile:
+ if os.path.exists(args.logfile):
+ log_file = pathlib.Path(args.logfile)
+ log.debug(f"using log file {log_file}")
+ else:
+ log.error(f"path is not a file or does not exist {args.logfile}")
+ log.debug("using default log path")
+
+# set up logfile
+log_file.parent.mkdir(parents=True, exist_ok=True)
+
+file_handler = logging.FileHandler(log_file)
+file_handler.setFormatter(logformatter)
+file_handler.setLevel(logging.INFO)
+
+config_file = pathlib.Path(default_config_file)
+if args.config:
+ if os.path.isfile(args.config):
+ config_file = pathlib.Path(args.config)
+ log.debug(f"set config file {config_file}")
+ else:
+ log.error(f"path is not a file or does not exist {args.config}")
+ log.debug("using default config path")
+
+# parse config
+if not config_file.is_file():
+ log.error(f"cannot read {config_file}")
+ sys.exit(1)
+
+log.debug(f"reading config file {config_file}")
+config = configparser.ConfigParser()
+config.read(config_file)
+
+# runtime data that should NOT be written
+config.add_section("runtime_data")
+config["runtime_data"]["config_path"] = str(config_file)
+
+
+# S T A R T
+
+if args.version:
+ print(f"""Version {MUDDLE_VERSION}
+Muddle Copyright (C) 2020-2021 Nao Pross <np@0hm.ch>
+
+This program comes with ABSOLUTELY NO WARRANTY; This is free software, and you
+are welcome to redistribute it under certain conditions; see LICENSE.txt for
+details. Project repository: https://github.com/NaoPross/Muddle
+""")
+
+if args.gui or config.getboolean("muddle", "always_run_gui"):
+ gui.start(config)