Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/_example/django/django_demo/django_demo/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
]
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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] = {}

Expand Down
2 changes: 1 addition & 1 deletion src/datasource_django/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions src/django_agent/forestadmin/django_agent/views/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@
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"]
response = await resource.dispatch(convert_request(request, kwargs), "hook")
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"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand All @@ -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"]
Expand Down
3 changes: 3 additions & 0 deletions src/django_agent/forestadmin/django_agent/views/charts.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@
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"]
response = await resource.dispatch(convert_request(request, kwargs), "add")
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"]
Expand Down
5 changes: 5 additions & 0 deletions src/django_agent/forestadmin/django_agent/views/crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand All @@ -14,20 +16,23 @@ 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"]
response = await resource.dispatch(convert_request(request, kwargs), "count")
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"]
response = await resource.dispatch(convert_request(request, kwargs), "csv")
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"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,26 @@
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"]
response = await resource.dispatch(convert_request(request, kwargs), "count")
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"]
response = await resource.dispatch(convert_request(request, kwargs), "csv")
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"]
Expand Down
3 changes: 3 additions & 0 deletions src/django_agent/forestadmin/django_agent/views/index.py
Original file line number Diff line number Diff line change
@@ -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")
Expand Down
2 changes: 2 additions & 0 deletions src/django_agent/forestadmin/django_agent/views/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand Down
2 changes: 1 addition & 1 deletion src/django_agent/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
Loading