From a8c12f6edfacf80b4a0ab6760872207fe7b5a862 Mon Sep 17 00:00:00 2001 From: Edwin Eames Date: Mon, 7 Oct 2024 22:58:06 -0400 Subject: [PATCH] dynamic database --- Dockerfile | 6 ++++++ Dockerfile.prod | 4 ++++ app/models/auto.py | 6 +++--- config.py | 20 ++++++++++++++++++++ database.py | 17 ++++++++++++----- settings_local.py | 19 +++++++++++++++++++ settings_prod.py | 17 +++++++++++++++++ 7 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 config.py create mode 100644 settings_local.py create mode 100644 settings_prod.py diff --git a/Dockerfile b/Dockerfile index eff3ece..3949ba3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,14 +4,20 @@ ENV PYTHONFAULTHANDLER=1 ENV PYTHONUNBUFFERED=1 +ENV MODE="DEVELOPMENT" + RUN mkdir -p /app COPY requirements.txt /app WORKDIR /app + RUN pip3 install setuptools + RUN pip3 install fastapi + RUN pip3 install sqlalchemy + RUN pip3 install -r requirements.txt EXPOSE 8000 diff --git a/Dockerfile.prod b/Dockerfile.prod index 5e3458d..ca699c0 100644 --- a/Dockerfile.prod +++ b/Dockerfile.prod @@ -4,12 +4,16 @@ ENV PYTHONFAULTHANDLER=1 ENV PYTHONUNBUFFERED=1 +ENV MODE="PRODUCTION" + RUN mkdir -p /app COPY requirements.txt /app WORKDIR /app + RUN pip3 install setuptools + RUN pip3 install -r requirements.txt EXPOSE 8001 diff --git a/app/models/auto.py b/app/models/auto.py index 2846868..6f8a072 100644 --- a/app/models/auto.py +++ b/app/models/auto.py @@ -1,7 +1,7 @@ from sqlalchemy import (Column, Integer, - DECIMAL, Text, - VARCHAR, TIMESTAMP, Date, INTEGER) -from datetime import datetime, timezone + DECIMAL, TEXT, + VARCHAR, TIMESTAMP, DATE, INTEGER) +from datetime import datetime from database import Base diff --git a/config.py b/config.py new file mode 100644 index 0000000..7078235 --- /dev/null +++ b/config.py @@ -0,0 +1,20 @@ +import os + +def load_config(mode=os.environ.get('MODE')): + + try: + print(f"mode is {mode}") + if mode == 'PRODUCTION': + + from settings_prod import ApplicationConfig + return ApplicationConfig + elif mode == 'DEVELOPMENT': + + from settings_local import ApplicationConfig + return ApplicationConfig + else: + pass + + except ImportError: + from settings_local import ApplicationConfig + return ApplicationConfig \ No newline at end of file diff --git a/database.py b/database.py index 0242857..1d2ab9b 100644 --- a/database.py +++ b/database.py @@ -3,13 +3,20 @@ from sqlalchemy.engine import URL from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import declarative_base + +from config import load_config + + +ApplicationConfig = load_config() + + url = URL.create( drivername="postgresql", - username="postgres", - password="password", - host="192.168.1.204", - database="eamco", - port=5432 + username=ApplicationConfig.POSTGRES_USERNAME, + password=ApplicationConfig.POSTGRES_PW, + host=ApplicationConfig.POSTGRES_SERVER, + database=ApplicationConfig.POSTGRES_DBNAME00, + port=ApplicationConfig.POSTGRES_PORT ) engine = create_engine(url) diff --git a/settings_local.py b/settings_local.py new file mode 100644 index 0000000..82417a3 --- /dev/null +++ b/settings_local.py @@ -0,0 +1,19 @@ + + +class ApplicationConfig: + """ + Basic Configuration for a generic User + """ + CURRENT_SETTINGS = 'LOCAL' + # databases info + POSTGRES_USERNAME = 'postgres' + POSTGRES_PW = 'password' + POSTGRES_SERVER = '192.168.1.204' + POSTGRES_PORT = '5432' + POSTGRES_DBNAME00 = 'eamco' + SQLALCHEMY_DATABASE_URI = "postgresql+psycopg2://{}:{}@{}/{}".format(POSTGRES_USERNAME, + POSTGRES_PW, + POSTGRES_SERVER, + POSTGRES_DBNAME00 + ) + diff --git a/settings_prod.py b/settings_prod.py new file mode 100644 index 0000000..269c60f --- /dev/null +++ b/settings_prod.py @@ -0,0 +1,17 @@ +class ApplicationConfig: + """ + Basic Configuration for a generic User + """ + CURRENT_SETTINGS = 'LOCAL' + # databases info + POSTGRES_USERNAME = 'postgres' + POSTGRES_PW = 'password' + POSTGRES_SERVER = '192.168.1.204' + POSTGRES_PORT = '5432' + POSTGRES_DBNAME00 = 'auburnoil' + SQLALCHEMY_DATABASE_URI = "postgresql+psycopg2://{}:{}@{}/{}".format(POSTGRES_USERNAME, + POSTGRES_PW, + POSTGRES_SERVER, + POSTGRES_DBNAME00 + ) + SQLALCHEMY_BINDS = {'eamco': SQLALCHEMY_DATABASE_URI}