From 8c215a7f35c61155ffbc375c7e981c6c61cf6f9a Mon Sep 17 00:00:00 2001 From: VivianDee <115420678+VivianDee@users.noreply.github.com> Date: Fri, 25 Jul 2025 15:13:07 +0100 Subject: [PATCH] [add]: Multi-database support using SQLAlchemy binds --- .env.local.example | 27 ++++++++++++++++++--------- app/config.py | 46 ++++++++++++++++++++++++++++++---------------- 2 files changed, 48 insertions(+), 25 deletions(-) diff --git a/.env.local.example b/.env.local.example index 3521430..3bb4c47 100644 --- a/.env.local.example +++ b/.env.local.example @@ -7,17 +7,26 @@ SWAGGER_URL="/documentation" API_URL="/swagger.json" # Database Configuration -DATABASE_USER=firstadvance -DATABASE_PASSWORD=FirstAdvance! -DATABASE_HOST=dev-data.simbrellang.net -DATABASE_PORT=10532 -DATABASE_NAME=firstadvancedev - -# DATABASE_HOST=10.20.30.60 # DATABASE_USER=firstadvance -# DATABASE_PASSWORD=firstadvance +# DATABASE_PASSWORD=FirstAdvance! +# DATABASE_HOST=dev-data.simbrellang.net +# DATABASE_PORT=10532 # DATABASE_NAME=firstadvancedev -# DATABASE_PORT=5432 + + +# ECO_DATABASE_USER=username +# ECO_DATABASE_PASSWORD=password +# ECO_DATABASE_HOST=localhost +# ECO_DATABASE_PORT=5432 +# ECO_DATABASE_NAME=eco_db + + +DATABASE_USER=system +DATABASE_PASSWORD=FIRSTADV_PASS +DATABASE_HOST=209.195.2.27 +# DATABASE_HOST=10.10.33.65 +DATABASE_PORT=1521 +DATABASE_SID=FREE # Flask Configuration FLASK_APP=wsgi.py diff --git a/app/config.py b/app/config.py index ec03c5d..b0a4280 100644 --- a/app/config.py +++ b/app/config.py @@ -1,6 +1,7 @@ import os from datetime import timedelta + class Config: """Base configuration for Flask app""" @@ -21,14 +22,26 @@ class Config: DNS = f"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={DATABASE_HOST})(PORT={DATABASE_PORT}))(CONNECT_DATA=(SID={DATABASE_SID})))" + # ECO Database Configuration + ECO_DATABASE_USER = os.environ.get("ECO_DATABASE_USER", "eco_user") + ECO_DATABASE_PASSWORD = os.environ.get("ECO_DATABASE_PASSWORD", "eco_pass") + ECO_DATABASE_HOST = os.environ.get("ECO_DATABASE_HOST", "localhost") + ECO_DATABASE_PORT = os.environ.get("ECO_DATABASE_PORT", 5432) + ECO_DATABASE_NAME = os.environ.get("ECO_DATABASE_NAME", "eco_db") + # Database Connection # SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://{DATABASE_USER}:{DATABASE_PASSWORD}@{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}" - SQLALCHEMY_DATABASE_URI = (f"oracle+oracledb://{DATABASE_USER}:{DATABASE_PASSWORD}@{DNS}") + SQLALCHEMY_DATABASE_URI = ( + f"oracle+oracledb://{DATABASE_USER}:{DATABASE_PASSWORD}@{DNS}" + ) + + SQLALCHEMY_BINDS = { + "eco": f"postgresql+psycopg2://{ECO_DATABASE_USER}:{ECO_DATABASE_PASSWORD}@{ECO_DATABASE_HOST}:{ECO_DATABASE_PORT}/{ECO_DATABASE_NAME}" + } SQLALCHEMY_TRACK_MODIFICATIONS = False - JWT_SECRET_KEY = os.getenv("JWT_SECRET_KEY", "secret-key") JWT_ACCESS_TOKEN_EXPIRES = os.getenv("JWT_ACCESS_TOKEN_EXPIRES", timedelta(hours=1)) JWT_REFRESH_TOKEN_EXPIRES = os.getenv( @@ -38,15 +51,19 @@ class Config: # KAFKA_BROKER = 'dev-events.simbrellang.net:9085' KAFKA_BROKER = os.getenv("KAFKA_BROKER", "dev-events.simbrellang.net:9085") - # SIMBRELLA_ENDPOINT_RAC_CHECKS = os.getenv("SIMBRELLA_ENDPOINT_RAC_CHECKS", "RACCheck") + # SIMBRELLA_ENDPOINT_RAC_CHECKS = os.getenv("SIMBRELLA_ENDPOINT_RAC_CHECKS", "RACCheck") VALID_APP_ID = os.getenv("SIMBRELLA_APP_ID", "app1") VALID_API_KEY = os.getenv("SIMBRELLA_API_KEY", "test-api-key-12345") SIMBRELLA_BASE_URL = os.getenv("SIMBRELLA_BASE_URL", "http://127.0.0.1:6337") - SIMBRELLA_ENDPOINT_RAC_CHECKS = os.getenv("SIMBRELLA_ENDPOINT_RAC_CHECKS","api/rac-check") + SIMBRELLA_ENDPOINT_RAC_CHECKS = os.getenv( + "SIMBRELLA_ENDPOINT_RAC_CHECKS", "api/rac-check" + ) RAC_RESULT_accountStatus = os.environ.get("RAC_RESULT_accountStatus", "true") RAC_RESULT_bvnValidated = os.environ.get("RAC_RESULT_bvnValidated", "true") - RAC_RESULT_creditBureauCheck = os.environ.get("RAC_RESULT_creditBureauCheck", "false") + RAC_RESULT_creditBureauCheck = os.environ.get( + "RAC_RESULT_creditBureauCheck", "false" + ) RAC_RESULT_crmsCheck = os.environ.get("RAC_RESULT_crmsCheck", "true") RAC_RESULT_hasLien = os.environ.get("RAC_RESULT_hasLien", "false") RAC_RESULT_hasPastDueLoan = os.environ.get("RAC_RESULT_hasPastDueLoan", "false") @@ -69,12 +86,10 @@ class Config: "rule12_CRMS_no_delinquency", "rule13_BVN_ignore", "rule14_no_lien", - "rule15_null_ignore" + "rule15_null_ignore", ] - - rac_false_rules = [ - ] + rac_false_rules = [] rac_salary_payments = [ "salarypaymenT_1", @@ -82,18 +97,17 @@ class Config: "salarypaymenT_3", "salarypaymenT_4", "salarypaymenT_5", - "salarypaymenT_6" + "salarypaymenT_6", ] - MAIL_SERVER = os.getenv('MAIL_SERVER','smtp.zoho.com') + MAIL_SERVER = os.getenv("MAIL_SERVER", "smtp.zoho.com") MAIL_PORT = 587 - MAIL_USERNAME = os.getenv('MAIL_USERNAME', 'firstadvance@dynamikservices.tech') - MAIL_PASSWORD = os.getenv('MAIL_PASSWORD') + MAIL_USERNAME = os.getenv("MAIL_USERNAME", "firstadvance@dynamikservices.tech") + MAIL_PASSWORD = os.getenv("MAIL_PASSWORD") MAIL_USE_TLS = True MAIL_USE_SSL = False - MAIL_DEFAULT_SENDER = ('FirstAdvance', 'firstadvance@dynamikservices.tech') - MAIL_RECEIVER= os.getenv('MAIL_RECEIVER', 'vdagbue@gmail.com') - + MAIL_DEFAULT_SENDER = ("FirstAdvance", "firstadvance@dynamikservices.tech") + MAIL_RECEIVER = os.getenv("MAIL_RECEIVER", "vdagbue@gmail.com") settings = Config()