Add .env loading, optional dbrand URLs

This commit is contained in:
Zeva Rose 2022-10-27 17:48:13 -06:00
parent 1016ce317c
commit 5d44d25087
3 changed files with 97 additions and 3 deletions

22
.env.example Normal file
View file

@ -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=

View file

@ -361,4 +361,5 @@ class DbrandCog(Extension):
def setup(bot: Client) -> None:
"""Add dbrandcog to JARVIS"""
if JarvisConfig.from_yaml().urls.get("dbrand_shipping"):
DbrandCog(bot)

View file

@ -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