From 5d44d25087f44a06598c28fc2ee5e916b9df8d61 Mon Sep 17 00:00:00 2001 From: Zevaryx Date: Thu, 27 Oct 2022 17:48:13 -0600 Subject: [PATCH] Add .env loading, optional dbrand URLs --- .env.example | 22 +++++++++++++ jarvis/cogs/dbrand.py | 3 +- jarvis/config.py | 75 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ff9cde1 --- /dev/null +++ b/.env.example @@ -0,0 +1,22 @@ +BOT_TOKEN= +TWITTER_CONSUMER_KEY= +TWITTER_CONSUMER_SECRET= +TWITTER_ACCESS_TOKEN= +TWITTER_ACCESS_SECRET= +REDDIT_SECRET= +REDDIT_CLIENT= +MONGODB_HOST= +MONGODB_USER= +MONGODB_PASS= +MONGODB_PORT= +MONGODB_DATABASE= +MAX_MESSAGES= +GITLAB_TOKEN= +LOG_LEVEL= +SYNC= +ROOK= +REDIS_HOST= +REDIS_USER= +REDIS_PASSWORD= +PROMETHEUS_GATEWAY= +PROMETHEUS_JOB= diff --git a/jarvis/cogs/dbrand.py b/jarvis/cogs/dbrand.py index 858a5bb..8394444 100644 --- a/jarvis/cogs/dbrand.py +++ b/jarvis/cogs/dbrand.py @@ -361,4 +361,5 @@ class DbrandCog(Extension): def setup(bot: Client) -> None: """Add dbrandcog to JARVIS""" - DbrandCog(bot) + if JarvisConfig.from_yaml().urls.get("dbrand_shipping"): + DbrandCog(bot) diff --git a/jarvis/config.py b/jarvis/config.py index 9addfb6..2e2ecd6 100644 --- a/jarvis/config.py +++ b/jarvis/config.py @@ -1,12 +1,15 @@ """Load the config for JARVIS""" + + from jarvis_core.config import Config class JarvisConfig(Config): - REQUIRED = ("token", "mongo", "urls", "redis") + REQUIRED = ("token", "mongo", "redis") OPTIONAL = { + "urls": None, "sync": False, - "log_level": "WARNING", + "log_level": "INFO", "cogs": None, "events": True, "gitlab_token": None, @@ -15,3 +18,71 @@ class JarvisConfig(Config): "reddit": None, "rook_token": None, } + ENV_REQUIRED = [ + "TOKEN", + "MONGODB_HOST", + "MONGODB_USER", + "MONGODB_PASS", + "MONGODB_PORT", + "MONGODB_DATABASE", + "REDIS_HOST", + "REDIS_USER", + "REDIS_PASS", + ] + ENV_OPTIONAL = { + "MAX_MESSAGES": 10000, + "GITLAB_TOKEN": None, + "LOG_LEVEL": "INFO", + "SYNC": False, + "ROOK": None, + "REDDIT_SECRET": None, + "REDDIT_CLIENT": None, + "TWITTER_CONSUMER_KEY": None, + "TWITTER_CONSUMER_SECRET": None, + "TWITTER_ACCESS_TOKEN": None, + "TWITTER_ACCESS_SECRET": None, + "URLS_DBRAND_SHIPPING": None, + } + + @classmethod + def _process_env(cls, **kwargs) -> dict: + """Process environment variables into usable info.""" + data = {} + mongo = {"connect": {}, "database": ""} + redis = {} + twitter = {} + reddit = {} + urls = {} + for item, value in kwargs.items(): + if item.startswith("MONGODB"): + key = item.split("_")[1].lower() + if key == "database": + mongo[key] = value + else: + mongo["connect"][key] = value + elif item.startswith("REDIS"): + key = item.split("_")[1].lower() + redis[key] = value + elif item.startswith("TWITTER"): + key = "_".join(item.split("_")[1:]).lower() + twitter[key] = value + elif item.startswith("REDDIT"): + key = item.split("_")[1].lower() + reddit[key] = value + elif item.startswith("URLS_"): + key = "_".join(item.split("_")[1:]).lower() + urls[key] = value + else: + if item == "SYNC": + value = value.lower() == "True" + data[item.lower()] = value + + data["mongo"] = mongo + data["redis"] = redis + if all(x is not None for x in reddit.values()): + data["reddit"] = reddit + if all(x is not None for x in twitter.values()): + data["twitter"] = twitter + data["urls"] = {k: v for k, v in urls if v} + + return data