from django.conf import settings from django.apps import apps from .models import BaseModel from django.contrib.auth import get_user_model User = get_user_model() class SyncRegistry: def __init__(self): self._registry = {} def load_sync_apps(self): sync_apps = getattr(settings, 'SYNC_APPS', {}) for app_label, config in sync_apps.items(): app_models = apps.get_app_config(app_label).get_models() for model in app_models: if hasattr(model, '_meta') and not model._meta.abstract: if issubclass(model, BaseModel) or model == User: model_name = model.__name__ if self.should_sync_model(model_name, config): self.register(model) def should_sync_model(self, model_name, config): if 'exclude' in config and model_name in config['exclude']: return False if 'models' in config and config['models']: return model_name in config['models'] return True def register(self, model): self._registry[model.__name__] = model def get_model(self, model_name): if not self._registry: self.load_sync_apps() return self._registry.get(model_name) # Create singleton instance sync_registry = SyncRegistry()