Skip to content

Add Settings Validation on Application Startup #49

@Carrington-dev

Description

@Carrington-dev

Description

Application doesn't validate required PayFast settings on startup, leading to cryptic errors at runtime.

Tasks

  • Create settings validation in AppConfig.ready()
  • Check all required settings present
  • Validate setting formats
  • Fail fast with clear error messages
  • Add tests for validation
  • Document required settings

Implementation

# payfast/apps.py
from django.apps import AppConfig
from django.core.exceptions import ImproperlyConfigured

class PayFastConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'payfast'
    verbose_name = 'PayFast Payments'

    def ready(self):
        from . import conf
        
        # Validate required settings
        required = [
            ('PAYFAST_MERCHANT_ID', conf.PAYFAST_MERCHANT_ID),
            ('PAYFAST_MERCHANT_KEY', conf.PAYFAST_MERCHANT_KEY),
        ]
        
        for name, value in required:
            if not value:
                raise ImproperlyConfigured(
                    f"{name} must be set in Django settings. "
                    f"See documentation for setup instructions."
                )
        
        # Warn about production without passphrase
        if not conf.PAYFAST_TEST_MODE and not conf.PAYFAST_PASSPHRASE:
            import warnings
            warnings.warn(
                "PAYFAST_PASSPHRASE not set in production. "
                "This significantly reduces security.",
                SecurityWarning
            )
        
        # Import signals
        import payfast.signals

Acceptance Criteria

  • Settings validated on startup
  • Clear error messages
  • Application fails fast on misconfiguration
  • Tests verify validation

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions