88 lines
2.6 KiB
Python
88 lines
2.6 KiB
Python
"""Load the config for JARVIS"""
|
|
|
|
|
|
from jarvis_core.config import Config
|
|
|
|
|
|
class JarvisConfig(Config):
|
|
REQUIRED = ("token", "mongo", "redis")
|
|
OPTIONAL = {
|
|
"urls": None,
|
|
"sync": False,
|
|
"log_level": "INFO",
|
|
"cogs": None,
|
|
"events": True,
|
|
"gitlab_token": None,
|
|
"max_messages": 1000,
|
|
"twitter": None,
|
|
"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
|