From dcdfd80225762b45484552abea803a18e5ef7429 Mon Sep 17 00:00:00 2001 From: vimzoomer Date: Sun, 15 Mar 2026 11:50:41 +0100 Subject: [PATCH 1/2] fix: lazy init and infinite recursion fixes - Remove CasbinAdapterConfig initialization in ready - Fix infinite recursion in __getattribute__ - Prevent test runner crash in testing environment --- README.md | 4 ++-- casbin_adapter/apps.py | 6 ------ casbin_adapter/enforcer.py | 6 +++--- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 648f72b..82b3d31 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Based on [Officially Supported Databases](https://docs.djangoproject.com/en/3.0/ pip install casbin-django-orm-adapter ``` -Add `casbin_adapter.apps.CasbinAdapterConfig` to your `INSTALLED_APPS` +Add `casbin_adapter` to your `INSTALLED_APPS` ```python # settings.py @@ -36,7 +36,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) INSTALLED_APPS = [ ... - 'casbin_adapter.apps.CasbinAdapterConfig', + 'casbin_adapter', ... ] diff --git a/casbin_adapter/apps.py b/casbin_adapter/apps.py index 2674874..3cc38ba 100644 --- a/casbin_adapter/apps.py +++ b/casbin_adapter/apps.py @@ -4,9 +4,3 @@ class CasbinAdapterConfig(AppConfig): name = "casbin_adapter" - - def ready(self): - from .enforcer import initialize_enforcer - - db_alias = getattr(settings, "CASBIN_DB_ALIAS", "default") - initialize_enforcer(db_alias) diff --git a/casbin_adapter/enforcer.py b/casbin_adapter/enforcer.py index 70d2eaf..2ef7bc2 100644 --- a/casbin_adapter/enforcer.py +++ b/casbin_adapter/enforcer.py @@ -12,7 +12,7 @@ class ProxyEnforcer(Enforcer): _initialized = False - db_alias = "default" + db_alias = getattr(settings, "CASBIN_DB_ALIAS", "default") def __init__(self, *args, **kwargs): if self._initialized: @@ -43,9 +43,9 @@ def _load(self): self.set_role_manager(role_manager) def __getattribute__(self, name): - safe_methods = ["__init__", "_load", "_initialized"] + safe_methods = ["__init__", "_load", "_initialized", "__class__"] if not super().__getattribute__("_initialized") and name not in safe_methods: - initialize_enforcer(self.db_alias) + initialize_enforcer(super().__getattribute__("db_alias")) if not super().__getattribute__("_initialized"): raise Exception( ( From 70721f8f262ba08d244337e8508dca628f51878f Mon Sep 17 00:00:00 2001 From: vimzoomer Date: Sun, 15 Mar 2026 16:35:19 +0100 Subject: [PATCH 2/2] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- casbin_adapter/apps.py | 4 ++++ casbin_adapter/enforcer.py | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/casbin_adapter/apps.py b/casbin_adapter/apps.py index 3cc38ba..28d3b75 100644 --- a/casbin_adapter/apps.py +++ b/casbin_adapter/apps.py @@ -4,3 +4,7 @@ class CasbinAdapterConfig(AppConfig): name = "casbin_adapter" + + def ready(self): + from .enforcer import enforcer + enforcer.db_alias = getattr(settings, "CASBIN_DB_ALIAS", "default") diff --git a/casbin_adapter/enforcer.py b/casbin_adapter/enforcer.py index 2ef7bc2..4e0d583 100644 --- a/casbin_adapter/enforcer.py +++ b/casbin_adapter/enforcer.py @@ -12,7 +12,7 @@ class ProxyEnforcer(Enforcer): _initialized = False - db_alias = getattr(settings, "CASBIN_DB_ALIAS", "default") + db_alias = "default" def __init__(self, *args, **kwargs): if self._initialized: @@ -43,7 +43,7 @@ def _load(self): self.set_role_manager(role_manager) def __getattribute__(self, name): - safe_methods = ["__init__", "_load", "_initialized", "__class__"] + safe_methods = ["__init__", "__class__", "_load", "_initialized", "db_alias"] if not super().__getattribute__("_initialized") and name not in safe_methods: initialize_enforcer(super().__getattribute__("db_alias")) if not super().__getattribute__("_initialized"):