Files
ach_ui_dbtl_file_based/config.py
2026-02-02 13:06:07 +05:30

93 lines
3.4 KiB
Python

#!/usr/bin/env python3
"""
Configuration management for ACH file processing pipeline.
Loads and validates environment variables.
"""
import os
from pathlib import Path
from logging_config import get_logger
logger = get_logger(__name__)
class Config:
"""Application configuration from environment variables."""
def __init__(self):
"""Initialize configuration from environment."""
self._validate_env_file()
self._load_database_config()
self._load_sftp_config()
self._load_processing_config()
def _validate_env_file(self):
"""Check if .env file exists."""
if not Path('.env').exists():
logger.warning(".env file not found. Using environment variables or defaults.")
def _load_database_config(self):
"""Load database configuration."""
self.db_user = os.getenv('DB_USER', 'pacs_db')
self.db_password = os.getenv('DB_PASSWORD', 'pacs_db')
self.db_host = os.getenv('DB_HOST', 'testipksdb.c7q7defafeea.ap-south-1.rds.amazonaws.com')
self.db_port = int(os.getenv('DB_PORT', '1521'))
self.db_service_name = os.getenv('DB_SERVICE_NAME', 'IPKSDB')
self.db_pool_min = int(os.getenv('DB_POOL_MIN', '2'))
self.db_pool_max = int(os.getenv('DB_POOL_MAX', '10'))
def _load_sftp_config(self):
"""Load SFTP configuration."""
self.sftp_host = os.getenv('SFTP_HOST', 'localhost')
self.sftp_port = int(os.getenv('SFTP_PORT', '22'))
self.sftp_username = os.getenv('SFTP_USERNAME', 'ipks')
self.sftp_password = os.getenv('SFTP_PASSWORD', '')
self.sftp_base_path = os.getenv('SFTP_BASE_PATH', '/home/ipks/IPKS_FILES/REPORTS')
def _load_processing_config(self):
"""Load processing configuration."""
self.poll_interval_minutes = int(os.getenv('POLL_INTERVAL_MINUTES', '30'))
self.batch_size = int(os.getenv('BATCH_SIZE', '100'))
self.bank_codes = self._parse_bank_codes()
self.log_level = os.getenv('LOG_LEVEL', 'INFO')
def _parse_bank_codes(self):
"""Parse bank codes from comma-separated environment variable."""
codes_str = os.getenv('BANK_CODES', '0015,0002')
return [code.strip() for code in codes_str.split(',') if code.strip()]
def get_db_connection_string(self):
"""Generate Oracle connection string."""
return f"{self.db_user}/{self.db_password}@{self.db_host}:{self.db_port}/{self.db_service_name}"
def validate(self):
"""Validate critical configuration."""
if not self.db_user or not self.db_password:
raise ValueError("Database credentials not configured")
if not self.sftp_username:
logger.warning("SFTP username not configured")
if not self.bank_codes:
raise ValueError("No bank codes configured")
logger.info(f"Configuration validated. Bank codes: {', '.join(self.bank_codes)}")
# Global config instance
config = None
def get_config():
"""Get or create global config instance."""
global config
if config is None:
config = Config()
return config
if __name__ == '__main__':
cfg = get_config()
cfg.validate()
print(f"Bank Codes: {cfg.bank_codes}")
print(f"SFTP Host: {cfg.sftp_host}:{cfg.sftp_port}")
print(f"Database: {cfg.db_host}:{cfg.db_port}/{cfg.db_service_name}")
print(f"Poll Interval: {cfg.poll_interval_minutes} minutes")