From 9331c390286905138581e450c3c185a03c6420c6 Mon Sep 17 00:00:00 2001 From: Hellow Date: Sat, 15 Apr 2023 11:54:17 +0200 Subject: [PATCH] implemented config cli --- src/music_kraken/__init__.py | 59 +++++++++++++++++++++++ src/music_kraken/__main__.py | 10 ++++ src/music_kraken/utils/__init__.py | 2 + src/music_kraken/utils/config/__init__.py | 2 +- src/music_kraken/utils/config/config.py | 7 ++- 5 files changed, 78 insertions(+), 2 deletions(-) diff --git a/src/music_kraken/__init__.py b/src/music_kraken/__init__.py index cd53c8c..a97aa89 100644 --- a/src/music_kraken/__init__.py +++ b/src/music_kraken/__init__.py @@ -7,6 +7,7 @@ from pathlib import Path from typing import List from . import objects, pages +from .utils.config import config, read, write from .utils.string_processing import fit_to_file_system from .utils.shared import MUSIC_DIR, MODIFY_GC, NOT_A_GENRE_REGEX, get_random_message @@ -57,6 +58,64 @@ def exit_message(): print("See you soon! :3") +def settings( + name: str = None, + value: str = None, +): + def modify_setting(_name: str, _value: str, invalid_ok: bool = True) -> bool: + try: + config.set_name_to_value(_name, _value) + except ValueError as e: + if invalid_ok: + print() + print(e.args[0]) + return False + else: + raise e + except KeyError as e: + if invalid_ok: + print(f"There is no such setting as: {_name}") + return False + else: + raise e + + write() + return True + + def print_settings(): + for i, attribute in enumerate(config): + print(f"{i:0>2}: {attribute.name}={attribute.value}") + + def modify_setting_by_index(index: int, recursive: bool = True) -> bool: + attribute = list(config)[index] + + print() + print(attribute) + + input__ = input("New value: ") + if not modify_setting(attribute.name, input__.strip()): + if recursive: + return modify_setting_by_index(index) + else: + return False + return True + + if name is not None and value is not None: + modify_setting(name, value, invalid_ok=False) + + while True: + print_settings() + + input_ = input("Id of setting to modify: ") + print() + if input_.isdigit() and int(input_) < len(config): + if modify_setting_by_index(int(input_)): + return + else: + print("Please input a valid ID.") + print() + + def cli( genre: str = None, download_all: bool = False, diff --git a/src/music_kraken/__main__.py b/src/music_kraken/__main__.py index e967f94..6f09314 100644 --- a/src/music_kraken/__main__.py +++ b/src/music_kraken/__main__.py @@ -40,6 +40,12 @@ if __name__ == "__main__": help="Downloads the content of given url." ) + parser.add_argument( + '--settings', + help="Opens a menu to modify the settings", + action="store_true" + ) + arguments = parser.parse_args() if arguments.verbose or arguments.test: @@ -49,6 +55,10 @@ if __name__ == "__main__": import music_kraken + if arguments.settings: + music_kraken.settings() + exit() + # getting the genre genre: str = arguments.genre if arguments.test: diff --git a/src/music_kraken/utils/__init__.py b/src/music_kraken/utils/__init__.py index 1c1e438..fb3447a 100644 --- a/src/music_kraken/utils/__init__.py +++ b/src/music_kraken/utils/__init__.py @@ -1,2 +1,4 @@ +from .config import config, read, write + # tells what exists __all__ = ["shared", "object_handeling", "phonetic_compares", "functions"] diff --git a/src/music_kraken/utils/config/__init__.py b/src/music_kraken/utils/config/__init__.py index 4599114..abe32eb 100644 --- a/src/music_kraken/utils/config/__init__.py +++ b/src/music_kraken/utils/config/__init__.py @@ -1,6 +1,6 @@ from .logging import LOGGING_SECTION from .audio import AUDIO_SECTION -from .config import read, write +from .config import read, write, config read() diff --git a/src/music_kraken/utils/config/config.py b/src/music_kraken/utils/config/config.py index 3974401..f35367a 100644 --- a/src/music_kraken/utils/config/config.py +++ b/src/music_kraken/utils/config/config.py @@ -1,4 +1,4 @@ -from typing import Union, Tuple, Dict, Iterable +from typing import Union, Tuple, Dict, Iterable, List import logging import os @@ -25,6 +25,7 @@ class Config: Description("🏳️‍⚧️🏳️‍⚧️ Protect trans youth. 🏳️‍⚧️🏳️‍⚧️\n"), ) + self._length = 0 self._section_list: List[Section] = [] self._name_section_map: Dict[str, Section] = dict() @@ -40,6 +41,7 @@ class Config: f"{element.__class__.__name__} {self._name_section_map[name].__class__.__name__}") self._name_section_map[name] = element + self._length += 1 def set_name_to_value(self, name: str, value: str): if name not in self._name_section_map: @@ -47,6 +49,9 @@ class Config: self._name_section_map[name][name] = value + def __len__(self): + return self._length + @property def config_string(self) -> str: return "\n\n".join(str(element) for element in self.config_elements)