from decouple import config
import pytz
import boto3
import os
# Timezone used in this app
[docs]
appTimezoneStr = config("TIMEZONE")
[docs]
appTimezone = pytz.timezone(appTimezoneStr)
# S3 resource to be imported in other modules
# Use s3.meta.client if client object is needed
[docs]
s3 = boto3.resource(
"s3",
endpoint_url=config("S3_ENDPOINT"),
aws_access_key_id=config("S3_KEY"),
aws_secret_access_key=config("S3_SECRET"),
)
# Flask app configuration
[docs]
class Config:
# Grabs the folder where the script runs
[docs]
BASEDIR = os.path.abspath(os.path.dirname(__file__))
# Enable protection against Cross-site Request Forgery
# Application Details
[docs]
APP_NAME = config("APP_NAME")
[docs]
APP_ROOT_URL = config("APP_ROOT_URL", "https://localhost:5000/")
[docs]
TIMEZONE = config("TIMEZONE")
[docs]
FLASK_DEBUG = config("FLASK_DEBUG", cast=bool)
# Self signed certificates for local development
# Only used when FLASK_DEBUG is True
if FLASK_DEBUG:
[docs]
FLASK_RUN_CERT = config("FLASK_RUN_CERT")
FLASK_RUN_KEY = config("FLASK_RUN_KEY")
# Database
[docs]
SQLALCHEMY_DATABASE_URI = config(
"DATABASE_CONNECTION_STRING",
default=f"sqlite:///{os.path.join(os.path.dirname(BASEDIR), 'database.db')}",
)
[docs]
SECRET_KEY = config("DATABASE_SECRET_KEY")
[docs]
SQLALCHEMY_ENGINE_OPTIONS = {
"pool_size": 10,
"pool_recycle": 60,
# To handle disconnects as described here: https://docs.sqlalchemy.org/en/14/core/pooling.html#pool-disconnects
"pool_pre_ping": True,
}
[docs]
SQLALCHEMY_TRACK_MODIFICATIONS = False
# Object Storage
[docs]
S3_BUCKET_NAME = config("S3_BUCKET_NAME")
[docs]
S3_ENDPOINT = config("S3_ENDPOINT")
[docs]
S3_KEY = config("S3_KEY")
[docs]
S3_SECRET = config("S3_SECRET")
# Email
[docs]
MAIL_FROM = config("MAIL_FROM")
[docs]
MAIL_SERVER = config("MAIL_SERVER")
[docs]
MAIL_PORT = config("MAIL_PORT", cast=int)
[docs]
MAIL_USE_TLS = config("MAIL_USE_TLS", cast=bool)
[docs]
MAIL_USE_SSL = config("MAIL_USE_SSL", cast=bool)
[docs]
MAIL_USERNAME = config("MAIL_USERNAME")
[docs]
MAIL_PASSWORD = config("MAIL_PASSWORD")
[docs]
MAIL_DEBUG = config("MAIL_DEBUG", cast=bool)
# OAuth
[docs]
GOOGLE_CLIENT_ID = config("GOOGLE_CLIENT_ID")
[docs]
GOOGLE_CLIENT_SECRET = config("GOOGLE_CLIENT_SECRET")
# Stripe
[docs]
STRIPE_PUBLISHABLE_KEY = config("STRIPE_PUBLISHABLE_KEY")
[docs]
STRIPE_SECRET_KEY = config("STRIPE_SECRET_KEY")
[docs]
STRIPE_WEBHOOK_SECRET = config("STRIPE_WEBHOOK_SECRET")
[docs]
STRIPE_PRODUCT_ID_FOR_CREDITS = config("STRIPE_PRODUCT_ID_FOR_CREDITS")
[docs]
STRIPE_CREDIT_UNIT_COST = config("STRIPE_CREDIT_UNIT_COST", cast=int)