diff --git a/src/_example/django/django_demo/django_demo/settings.py b/src/_example/django/django_demo/django_demo/settings.py index 2efd1ea59..e4c7a8f82 100644 --- a/src/_example/django/django_demo/django_demo/settings.py +++ b/src/_example/django/django_demo/django_demo/settings.py @@ -89,6 +89,7 @@ "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", + # "django.contrib.auth.middleware.LoginRequiredMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", ] diff --git a/src/datasource_django/forestadmin/datasource_django/utils/type_converter.py b/src/datasource_django/forestadmin/datasource_django/utils/type_converter.py index 7afd7ea4b..2c7cb552e 100644 --- a/src/datasource_django/forestadmin/datasource_django/utils/type_converter.py +++ b/src/datasource_django/forestadmin/datasource_django/utils/type_converter.py @@ -1,5 +1,6 @@ from typing import Dict, Set, Tuple +import django from django.db import models from forestadmin.datasource_django.exception import DjangoDatasourceException from forestadmin.datasource_toolkit.interfaces.fields import ColumnAlias, Operator, PrimitiveType @@ -25,11 +26,12 @@ class ConverterException(DjangoDatasourceException): if postgres_fields is not None: POSTGRES_TYPE: Dict[type, PrimitiveType] = { # specific postgres fields - postgres_fields.CIText: PrimitiveType.STRING, - postgres_fields.CIEmailField: PrimitiveType.STRING, postgres_fields.HStoreField: PrimitiveType.JSON, # postgres_fields.RangeField and subclassed ones not handles } + if django.VERSION[0] < 5 or (django.VERSION[0] == 5 and django.VERSION[1] < 1): + POSTGRES_TYPE[postgres_fields.CIText] = PrimitiveType.STRING + POSTGRES_TYPE[postgres_fields.CIEmailField] = PrimitiveType.STRING else: POSTGRES_TYPE: Dict[type, PrimitiveType] = {} diff --git a/src/datasource_django/pyproject.toml b/src/datasource_django/pyproject.toml index ce7cfa1fb..cff725eeb 100644 --- a/src/datasource_django/pyproject.toml +++ b/src/datasource_django/pyproject.toml @@ -17,7 +17,7 @@ include = "forestadmin" [tool.poetry.dependencies] python = ">=3.8,<3.13" typing-extensions = "~=4.2" -django = ">=3.2,<6.0" +django = ">=3.2,<5.2" forestadmin-datasource-toolkit = "1.20.1" forestadmin-agent-toolkit = "1.20.1" diff --git a/src/django_agent/forestadmin/django_agent/utils/views_decorator.py b/src/django_agent/forestadmin/django_agent/utils/views_decorator.py new file mode 100644 index 000000000..5c1772896 --- /dev/null +++ b/src/django_agent/forestadmin/django_agent/utils/views_decorator.py @@ -0,0 +1,6 @@ +try: + from django.contrib.auth.decorators import login_not_required as no_django_login_required # type: ignore +except ImportError: + + def no_django_login_required(fn): + return fn diff --git a/src/django_agent/forestadmin/django_agent/views/actions.py b/src/django_agent/forestadmin/django_agent/views/actions.py index bfc15406c..7eb517b03 100644 --- a/src/django_agent/forestadmin/django_agent/views/actions.py +++ b/src/django_agent/forestadmin/django_agent/views/actions.py @@ -2,8 +2,10 @@ from django.http import HttpRequest from forestadmin.django_agent.apps import DjangoAgentApp from forestadmin.django_agent.utils.converter import convert_request, convert_response +from forestadmin.django_agent.utils.views_decorator import no_django_login_required # type: ignore +@no_django_login_required @async_to_sync async def hook(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["actions"] @@ -11,6 +13,7 @@ async def hook(request: HttpRequest, **kwargs): return convert_response(response) +@no_django_login_required @async_to_sync async def execute(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["actions"] diff --git a/src/django_agent/forestadmin/django_agent/views/authentication.py b/src/django_agent/forestadmin/django_agent/views/authentication.py index f502a2b97..8b293c94f 100644 --- a/src/django_agent/forestadmin/django_agent/views/authentication.py +++ b/src/django_agent/forestadmin/django_agent/views/authentication.py @@ -2,8 +2,10 @@ from django.http import HttpRequest from forestadmin.django_agent.apps import DjangoAgentApp from forestadmin.django_agent.utils.converter import convert_request, convert_response +from forestadmin.django_agent.utils.views_decorator import no_django_login_required # type: ignore +@no_django_login_required @transaction.non_atomic_requests async def authentication(request: HttpRequest): resource = (await DjangoAgentApp.get_agent().get_resources())["authentication"] @@ -15,6 +17,7 @@ async def authentication(request: HttpRequest): authentication.csrf_exempt = True +@no_django_login_required @transaction.non_atomic_requests async def callback(request: HttpRequest): resource = (await DjangoAgentApp.get_agent().get_resources())["authentication"] diff --git a/src/django_agent/forestadmin/django_agent/views/charts.py b/src/django_agent/forestadmin/django_agent/views/charts.py index 0369c4621..53aa8dcf4 100644 --- a/src/django_agent/forestadmin/django_agent/views/charts.py +++ b/src/django_agent/forestadmin/django_agent/views/charts.py @@ -2,8 +2,10 @@ from django.http import HttpRequest from forestadmin.django_agent.apps import DjangoAgentApp from forestadmin.django_agent.utils.converter import convert_request, convert_response +from forestadmin.django_agent.utils.views_decorator import no_django_login_required # type: ignore +@no_django_login_required @transaction.non_atomic_requests async def chart_collection(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["collection_charts"] @@ -11,6 +13,7 @@ async def chart_collection(request: HttpRequest, **kwargs): return convert_response(response) +@no_django_login_required @transaction.non_atomic_requests async def chart_datasource(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["datasource_charts"] diff --git a/src/django_agent/forestadmin/django_agent/views/crud.py b/src/django_agent/forestadmin/django_agent/views/crud.py index c9cfd405b..6df4e9102 100644 --- a/src/django_agent/forestadmin/django_agent/views/crud.py +++ b/src/django_agent/forestadmin/django_agent/views/crud.py @@ -4,8 +4,10 @@ from forestadmin.django_agent.apps import DjangoAgentApp from forestadmin.django_agent.utils.converter import convert_request, convert_response from forestadmin.django_agent.utils.dispatcher import get_dispatcher_method +from forestadmin.django_agent.utils.views_decorator import no_django_login_required # type: ignore +@no_django_login_required @async_to_sync async def detail(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["crud"] @@ -14,6 +16,7 @@ async def detail(request: HttpRequest, **kwargs): return convert_response(response) +@no_django_login_required @transaction.non_atomic_requests async def count(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["crud"] @@ -21,6 +24,7 @@ async def count(request: HttpRequest, **kwargs): return convert_response(response) +@no_django_login_required @transaction.non_atomic_requests async def csv(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["crud"] @@ -28,6 +32,7 @@ async def csv(request: HttpRequest, **kwargs): return convert_response(response) +@no_django_login_required @async_to_sync async def list_(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["crud"] diff --git a/src/django_agent/forestadmin/django_agent/views/crud_related.py b/src/django_agent/forestadmin/django_agent/views/crud_related.py index 501ae5249..c068b26d2 100644 --- a/src/django_agent/forestadmin/django_agent/views/crud_related.py +++ b/src/django_agent/forestadmin/django_agent/views/crud_related.py @@ -4,8 +4,10 @@ from forestadmin.django_agent.apps import DjangoAgentApp from forestadmin.django_agent.utils.converter import convert_request, convert_response from forestadmin.django_agent.utils.dispatcher import get_dispatcher_method +from forestadmin.django_agent.utils.views_decorator import no_django_login_required # type: ignore +@no_django_login_required @transaction.non_atomic_requests async def count(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["crud_related"] @@ -13,6 +15,7 @@ async def count(request: HttpRequest, **kwargs): return convert_response(response) +@no_django_login_required @transaction.non_atomic_requests async def csv(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["crud_related"] @@ -20,6 +23,7 @@ async def csv(request: HttpRequest, **kwargs): return convert_response(response) +@no_django_login_required @async_to_sync async def list_(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["crud_related"] diff --git a/src/django_agent/forestadmin/django_agent/views/index.py b/src/django_agent/forestadmin/django_agent/views/index.py index 59cd970b2..62c7048f4 100644 --- a/src/django_agent/forestadmin/django_agent/views/index.py +++ b/src/django_agent/forestadmin/django_agent/views/index.py @@ -1,13 +1,16 @@ from django.db import transaction from django.http import HttpRequest, HttpResponse from forestadmin.django_agent.apps import DjangoAgentApp +from forestadmin.django_agent.utils.views_decorator import no_django_login_required # type: ignore +@no_django_login_required @transaction.non_atomic_requests async def index(request: HttpRequest): return HttpResponse(status=200) +@no_django_login_required @transaction.non_atomic_requests async def scope_cache_invalidation(request: HttpRequest): DjangoAgentApp.get_agent()._permission_service.invalidate_cache("forest.rendering") diff --git a/src/django_agent/forestadmin/django_agent/views/stats.py b/src/django_agent/forestadmin/django_agent/views/stats.py index 12f5e8807..8985c963a 100644 --- a/src/django_agent/forestadmin/django_agent/views/stats.py +++ b/src/django_agent/forestadmin/django_agent/views/stats.py @@ -2,8 +2,10 @@ from django.http import HttpRequest from forestadmin.django_agent.apps import DjangoAgentApp from forestadmin.django_agent.utils.converter import convert_request, convert_response +from forestadmin.django_agent.utils.views_decorator import no_django_login_required # type: ignore +@no_django_login_required @transaction.non_atomic_requests async def stats(request: HttpRequest, **kwargs): resource = (await DjangoAgentApp.get_agent().get_resources())["stats"] diff --git a/src/django_agent/pyproject.toml b/src/django_agent/pyproject.toml index eb923b226..8da3c0bf9 100644 --- a/src/django_agent/pyproject.toml +++ b/src/django_agent/pyproject.toml @@ -17,9 +17,9 @@ include = "forestadmin" [tool.poetry.dependencies] python = ">=3.8,<3.13" typing-extensions = "~=4.2" +django = ">=3.2,<5.2" forestadmin-agent-toolkit = "1.20.1" forestadmin-datasource-django = "1.20.1" -django = ">=3.2,<6.0" django-cors-headers = ">=3.8" [tool.pytest.ini_options]