import sys import logging from argparse import ArgumentParser from typing import cast from pathlib import Path import server import config import utils import database def GetUsernamePassword() -> tuple[str, str]: print("What is the first username of this calendar system?") cache = input() while not utils.IsValidUsername(cache): print("Sorry, invalid data. Please try again.") cache = input() username = cache print("Input this user password:") cache = input() while not utils.IsValidPassword(cache): print("Sorry, invalid data. Please try again.") cache = input() password = cache return (username, password) def SetLoggingStyle(level: int) -> None: logging.basicConfig(format="[%(levelname)s] %(message)s", level=level) if __name__ == "__main__": # Set as INFO level in default first, # and we will change it once we load the configuration file. SetLoggingStyle(logging.INFO) # Receive arguments parser = ArgumentParser( description="The server of light, self-host and multi-account calendar system." ) parser.add_argument( "-c", "--config", required=True, type=Path, action="store", metavar="CONFIG_TOML", dest="config", help="The configuration file for coconut-leaf", ) parser.add_argument( "-i", "--init", action="store_true", dest="init", help="Set for initialize the calendar system", ) args = parser.parse_args() # Show splash logging.info("Coconut-leaf") logging.info("A light, self-host and multi-account calendar system") logging.info("Project: https://github.com/yyc12345/coconut-leaf") logging.info("===================") # Load config file try: config.setup_config(cast(Path, args.config)) except Exception as e: logging.critical(f"Error loading config file: {e}") sys.exit(1) # Change logging level again according to whether enable debug mode logging_level = logging.DEBUG if config.get_config().others.debug else logging.INFO SetLoggingStyle(logging_level) # Initialize the calendar system if needed if cast(bool, args.init): gotten_data = GetUsernamePassword() calendar = database.CalendarDatabase() calendar.init(*gotten_data) calendar.close() logging.info("Staring server...") server.run()