Files
pypistats.org/pypistats/settings.py
2018-08-13 22:06:47 -04:00

79 lines
2.0 KiB
Python

"""Application configuration."""
import os
from celery.schedules import crontab
from flask import json
def get_db_uri(env):
"""Get the database URI."""
return \
"postgresql://{username}:{password}@{host}:{port}/{dbname}".format(
username=os.environ.get("POSTGRESQL_USERNAME"),
password=os.environ.get("POSTGRESQL_PASSWORD"),
host=os.environ.get("POSTGRESQL_HOST"),
port=os.environ.get("POSTGRESQL_PORT"),
dbname=os.environ.get("POSTGRESQL_DBNAME"),
)
class Config(object):
"""Base configuration."""
APP_DIR = os.path.abspath(os.path.dirname(__file__))
CELERY_BROKER_URL = os.environ.get("CELERY_BROKER_URL"),
CELERY_IMPORTS = ("pypistats.tasks.pypi")
CELERYBEAT_SCHEDULE = {
"update_db": {
"task": "pypistats.tasks.pypi.etl",
"schedule": crontab(minute=0, hour=1), # 1am UTC
},
}
GITHUB_CLIENT_ID = os.environ.get("GITHUB_CLIENT_ID")
GITHUB_CLIENT_SECRET = os.environ.get("GITHUB_CLIENT_SECRET")
PROJECT_ROOT = os.path.abspath(os.path.join(APP_DIR, os.pardir))
SECRET_KEY = os.environ.get("PYPISTATS_SECRET", "secret-key")
SQLALCHEMY_TRACK_MODIFICATIONS = False
# Plotly chart definitions
PLOT_BASE = json.load(
open(os.path.join(os.path.dirname(__file__), "plots", "plot_base.json"))
)
DATA_BASE = json.load(
open(os.path.join(os.path.dirname(__file__), "plots", "data_base.json"))
)
class ProdConfig(Config):
"""Production configuration."""
DEBUG = False
ENV = "prod"
SQLALCHEMY_DATABASE_URI = get_db_uri(ENV)
class DevConfig(Config):
"""Development configuration."""
DEBUG = True
ENV = "dev"
SQLALCHEMY_DATABASE_URI = get_db_uri(ENV)
class TestConfig(Config):
"""Test configuration."""
DEBUG = True
ENV = "dev"
SQLALCHEMY_DATABASE_URI = get_db_uri(ENV)
TESTING = True
WTF_CSRF_ENABLED = False # Allows form testing
configs = {
"dev": DevConfig,
"prod": ProdConfig,
"test": TestConfig,
}