mirror of
https://github.com/Neocky/pluGET.git
synced 2024-04-29 16:12:30 +00:00
109 lines
3.8 KiB
Python
109 lines
3.8 KiB
Python
""""
|
|
Handles the logic for the config validation, reading and creating
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import ruamel.yaml
|
|
from pathlib import Path
|
|
from rich.console import Console
|
|
|
|
|
|
class config_value():
|
|
"""
|
|
Class which holds all the available configuration values from the config file and which will be used later in
|
|
the process of updating plugins
|
|
If bool in config can't be read it will default to 'False'
|
|
"""
|
|
def __init__(self):
|
|
yaml = ruamel.yaml.YAML()
|
|
with open("pluGET_config.yaml", "r") as config_file:
|
|
data = yaml.load(config_file)
|
|
self.connection = data["Connection"]
|
|
self.path_to_plugin_folder = Path(data["Local"]["PathToPluginFolder"])
|
|
self.local_seperate_download_path = True if data["Local"]["SeperateDownloadPath"] == True else False
|
|
self.local_path_to_seperate_download_path = Path(data["Local"]["PathToSeperateDownloadPath"])
|
|
self.server = data["Remote"]["Server"]
|
|
self.username = data["Remote"]["Server"]
|
|
self.password = data["Remote"]["Password"]
|
|
self.sftp_port = int(data["Remote"]["SFTP_Port"])
|
|
self.ftp_port = int(data["Remote"]["FTP_Port"])
|
|
self.remote_seperate_download_path = True if data["Remote"]["SeperateDownloadPath"] == True else False
|
|
self.remote_path_to_seperate_download_path = data["Remote"]["PathToSeperateDownloadPath"]
|
|
self.remote_plugin_folder_on_server = data["Remote"]["PluginFolderOnServer"]
|
|
|
|
|
|
def check_config() -> None:
|
|
"""
|
|
Check if there is a pluGET_config.yml file in the same folder as pluget.py and if not create a new config
|
|
and exit the programm
|
|
"""
|
|
if not os.path.isfile("pluGET_config.yaml"):
|
|
create_config()
|
|
|
|
|
|
def create_config() -> None:
|
|
"""
|
|
Creates the yaml config in the current directory with the filename pluGET_config.yml
|
|
"""
|
|
# this is the whole yaml code because of weird formating indention is not possible
|
|
configuration = """\
|
|
#
|
|
# Configuration File for pluGET
|
|
# https://www.github.com/Neocky/pluGET
|
|
#
|
|
|
|
# What should be used for the connection (local, sftp, ftp)
|
|
Connection: local
|
|
|
|
Local:
|
|
PathToPluginFolder: C:/Users/USER/Desktop/plugins
|
|
# If a different folder should be used to store the updated plugins change to (True/False) and the path below
|
|
SeperateDownloadPath : False
|
|
PathToSeperateDownloadPath: C:/Users/USER/Desktop/plugins
|
|
|
|
Remote:
|
|
Server: 0.0.0.0
|
|
Username: user
|
|
Password: password
|
|
# If a different Port for SFTP/FTP will be used
|
|
SFTP_Port: 22
|
|
FTP_Port: 21
|
|
# If a different folder should be used to store the updated plugins change to (True/False) and the path below
|
|
SeperateDownloadPath : False
|
|
PathToSeperateDownloadPath: /plugins/updated
|
|
# Change the path below if the plugin folder path is different on the SFTP/FTP server (Change only if you know what you are doing)
|
|
PluginFolderOnServer: /plugins
|
|
"""
|
|
# load ruamel.yaml to get the # commands right in the yaml code
|
|
yaml = ruamel.yaml.YAML()
|
|
code = yaml.load(configuration)
|
|
with open("pluGET_config.yaml", "w") as config_file:
|
|
yaml.dump(code, config_file)
|
|
|
|
config_file_path = os.path.abspath("pluGET_config.yaml")
|
|
print(f"Path of config file: {config_file_path}")
|
|
print("Config created. Edit config before executing again!")
|
|
input("Press any key + enter to exit...")
|
|
sys.exit()
|
|
|
|
|
|
def validate_config() -> None:
|
|
"""
|
|
Validates the config variables after config class is loaded and exit if error is detected and print error
|
|
"""
|
|
accepted_values = [
|
|
("local", "sftp", "ftp")
|
|
]
|
|
# exit afterwards if there is an error in config
|
|
exit_afterwards = False
|
|
config = config_value()
|
|
# rich console for nice colors
|
|
console = Console()
|
|
if (config.connection).lower() not in accepted_values[0]:
|
|
console.print(f"Error in Config! Accepted values for key 'Connection' are {accepted_values[0]}",
|
|
style="bright_red")
|
|
exit_afterwards = True
|
|
if exit_afterwards:
|
|
sys.exit()
|