diff --git a/Pipfile b/Pipfile index 8fb42aa..dd876ab 100644 --- a/Pipfile +++ b/Pipfile @@ -12,6 +12,7 @@ toml = "*" pytest = "*" sphinx = "*" sphinx-rtd-theme = "*" +watchgod = "*" [requires] python_version = "3.8" diff --git a/Pipfile.lock b/Pipfile.lock index e46b07e..37f2610 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "56274993c51b422f6d178e8a21bbf669b8b508facb513d6c63f3373ebf707863" + "sha256": "267e2db73eae9033f8531715235a968fe4ddd2ca4f09ccc266d5f6da869acb23" }, "pipfile-spec": 6, "requires": { @@ -486,6 +486,14 @@ ], "version": "==1.25.9" }, + "watchgod": { + "hashes": [ + "sha256:59700dab7445aa8e6067a5b94f37bae90fc367554549b1ed2e9d0f4f38a90d2a", + "sha256:e9cca0ab9c63f17fc85df9fd8bd18156ff00aff04ebe5976cee473f4968c6858" + ], + "index": "pypi", + "version": "==0.6" + }, "wcwidth": { "hashes": [ "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1", diff --git a/src/bot_base/bot_base.py b/src/bot_base/bot_base.py index a27684d..a817e8f 100644 --- a/src/bot_base/bot_base.py +++ b/src/bot_base/bot_base.py @@ -45,7 +45,7 @@ class BotBase(discord.Client): "modules": [], "data_folder": data_folder, "modules_folder": modules_folder, - }) + }, no_save=True) self.config.load() diff --git a/src/config/base.py b/src/config/base.py index 2afecf0..c08245d 100644 --- a/src/config/base.py +++ b/src/config/base.py @@ -15,7 +15,7 @@ class Config: #: :class:`typing.Type` [:class:`BaseType`]: Current fields fields: typing.Dict[str, BaseType] - def __init__(self, path: str) -> None: + def __init__(self, path: typing.Optional[str]) -> None: """ Create config object @@ -45,7 +45,7 @@ class Config: name: type_() }) - def set(self, values: dict) -> None: + def set(self, values: dict, no_save: bool = False) -> None: """ Set all parameters with values (and override old ones) @@ -54,17 +54,21 @@ class Config: >>> from config.config_types import factory, Int >>> config = Config("doctest_config.toml") >>> config.register("my_parameter", factory(Int)) - >>> config.set({"my_parameter": 3}) + >>> config.set({"my_parameter": 3}) #doctest: +SKIP + >>> config.set({"my_parameter": 4}, no_save=True) :type values: dict :param values: dict of parameters """ for k, v in values.items(): try: + self.fields[k].set(v) except KeyError: # TODO: trouver un moyen de warn pass + if not no_save: + self.save() def save(self) -> None: """ @@ -75,12 +79,13 @@ class Config: >>> from config.config_types import factory, Int >>> config = Config("doctest_config.toml") >>> config.register("my_parameter", factory(Int)) - >>> config.set({"my_parameter": 3}) + >>> config.set({"my_parameter": 3}) #doctest: +SKIP >>> config.save() #doctest: +SKIP """ - os.makedirs(os.path.dirname(self.path), exist_ok=True) - with open(self.path, 'w') as file: - toml.dump({k: v.to_save() for k, v in self.fields.items()}, file) + if self.path is not None: + os.makedirs(os.path.dirname(self.path), exist_ok=True) + with open(self.path, 'w') as file: + toml.dump({k: v.to_save() for k, v in self.fields.items()}, file) def load(self) -> None: """ @@ -91,7 +96,7 @@ class Config: >>> from config.config_types import factory, Int >>> config = Config("doctest_config.toml") >>> config.register("my_parameter", factory(Int)) - >>> config.set({"my_parameter": 3}) + >>> config.set({"my_parameter": 3}) #doctest: +SKIP >>> config.save() #doctest: +SKIP >>> new_config = Config("doctest_config.toml") >>> new_config.register("my_parameter", factory(Int)) @@ -101,12 +106,13 @@ class Config: :return: None """ - try: - with open(self.path, 'r') as file: - self.set(toml.load(file)) - except FileNotFoundError: - pass - self.save() + if self.path is not None: + try: + with open(self.path, 'r') as file: + self.set(toml.load(file)) + except FileNotFoundError: + pass + self.save() def __getitem__(self, item: str) -> typing.Any: """ @@ -119,8 +125,12 @@ class Config: >>> from config.config_types import factory, Int >>> config = Config("doctest_config.toml") >>> config.register("my_parameter", factory(Int)) - >>> config.set({"my_parameter": 3}) - >>> print(config["my_parameter"]) + >>> config.set({"my_parameter": 3}) #doctest: +SKIP + >>> print(config["my_parameter"]) #doctest: +SKIP 3 """ + self.load() return self.fields[item].get() + + def __str__(self): + return f">" diff --git a/src/main.py b/src/main.py index ca82e93..ce546a5 100644 --- a/src/main.py +++ b/src/main.py @@ -22,10 +22,10 @@ def setup_logging(default_path='data/log_config.json', default_level=logging.INF logging.basicConfig(level=default_level) -setup_logging() - -if __name__ == "__main__": - client = BotBase(max_messages=500000, data_folder="datas", modules_folder=os.environ.get("LOCAL_MODULES", "modules")) +def main(): + setup_logging() + client = BotBase(max_messages=500000, data_folder="datas", + modules_folder=os.environ.get("LOCAL_MODULES", "modules")) async def start_bot(): await client.start(os.environ.get("DISCORD_TOKEN")) @@ -33,3 +33,7 @@ if __name__ == "__main__": loop = asyncio.get_event_loop() loop.create_task(start_bot()) loop.run_forever() + + +if __name__ == "__main__": + main()