You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

105 lines
3.1 KiB

#!/usr/bin/env python3
"""
Payment Processing Script (New Architecture)
This script provides backward-compatible CLI for the refactored payment processing system.
It maintains the same command-line interface as the original query_mysql.py while
using the new modular architecture under the hood.
Usage: python query_mysql.py [mode] [live]
Modes: batch, payintent, payplan, refund
The new architecture provides:
- Separation of concerns with dedicated modules
- Thread-safe database operations
- Improved error handling and logging
- Better testability and maintainability
"""
import sys
import logging
from config import Config
from app import create_app
from orchestration import PaymentOrchestrator
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('payment_processing.log'),
logging.StreamHandler(sys.stdout)
]
)
logger = logging.getLogger(__name__)
def main():
"""
Main entry point - maintains backward compatibility with original CLI.
"""
# Parse command-line arguments (original format)
running_mode = "payintent" # Default mode
process_live = False
try:
if len(sys.argv) > 1:
mode_arg = sys.argv[1].lower()
if mode_arg in ["batch", "payintent", "payplan", "refund"]:
running_mode = mode_arg
else:
logger.error(f"Invalid running mode: {sys.argv[1]}")
logger.info("Valid modes: batch, payintent, payplan, refund")
sys.exit(1)
if len(sys.argv) > 2:
if sys.argv[2].lower() == "live":
process_live = True
else:
logger.warning(f"Unknown environment argument: {sys.argv[2]}. Using test mode.")
except IndexError:
logger.info("No running mode specified, defaulting to 'payintent'")
# Log execution details
env_display = "LIVE" if process_live else "SANDBOX"
logger.info("=" * 80)
logger.info(f"Payment Processing System (Refactored)")
logger.info(f"Mode: {running_mode.upper()} - Environment: {env_display}")
logger.info("=" * 80)
try:
# Create Flask application
app = create_app()
# Create and run orchestrator
orchestrator = PaymentOrchestrator(
app=app,
config=Config,
process_live=process_live
)
result = orchestrator.run(running_mode)
# Log results
if result.get('success'):
logger.info("=" * 80)
logger.info("SUCCESS: Processing completed successfully")
logger.info("=" * 80)
sys.exit(0)
else:
logger.error("=" * 80)
logger.error(f"FAILED: Processing failed: {result.get('error', 'Unknown error')}")
logger.error("=" * 80)
sys.exit(1)
except KeyboardInterrupt:
logger.warning("\n\nWARNING: Processing interrupted by user")
sys.exit(130)
except Exception as e:
logger.error(f"Fatal error: {e}", exc_info=True)
sys.exit(1)
if __name__ == "__main__":
main()