Skip to content

Commit

Permalink
fix: rollback removal of pipe instead of Optional since it's not full…
Browse files Browse the repository at this point in the history
…y supported in 3.9 yet...
  • Loading branch information
hbakri committed Oct 20, 2024
1 parent 5398f93 commit 6a4b4a7
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 93 deletions.
26 changes: 13 additions & 13 deletions src/ninja_crud/views/api_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import asyncio
import functools
import typing
from typing import TYPE_CHECKING, Any, Callable
from typing import TYPE_CHECKING, Any, Callable, Optional, Union

import django.db.models
import ninja
Expand Down Expand Up @@ -78,7 +78,7 @@ def __init__(
self,
response_schema: Any = NOT_SET,
model: type[models.Model] | None = None,
name: str | None = None,
name: Optional[str] = None,
) -> None:
super().__init__(
path="/{id}",
Expand All @@ -100,7 +100,7 @@ def __init__(
self,
response_schema: Any = NOT_SET,
model: type[models.Model] | None = None,
name: str | None = None,
name: Optional[str] = None,
) -> None:
super().__init__(
path="/async/{id}",
Expand Down Expand Up @@ -189,14 +189,14 @@ class DepartmentViewSet(APIViewSet):
def __init__(
self,
path: str,
methods: list[str] | set[str],
methods: Union[list[str], set[str]],
*,
response_schema: Any = NOT_SET,
status_code: int | None = None,
responses: dict[int, Any] | None = None,
name: str | None = None,
decorators: list[Decorator] | None = None,
operation_kwargs: dict[str, Any] | None = None,
status_code: Optional[int] = None,
responses: Optional[dict[int, Any]] = None,
name: Optional[str] = None,
decorators: Optional[list[Decorator]] = None,
operation_kwargs: Optional[dict[str, Any]] = None,
) -> None:
self.path = path
self.methods = methods
Expand All @@ -206,9 +206,9 @@ def __init__(
self.name = name
self.decorators = decorators or []
self.operation_kwargs = operation_kwargs or {}
self._api_viewset_class: type[APIViewSet] | None = None
self._api_viewset_class: Optional[type[APIViewSet]] = None

def add_view_to(self, api_or_router: ninja.NinjaAPI | ninja.Router) -> None:
def add_view_to(self, api_or_router: Union[ninja.NinjaAPI, ninja.Router]) -> None:
"""
Add the view to an API or router. This method is here for convenience and
allows you to add the view to an API or router without having to manually
Expand Down Expand Up @@ -328,7 +328,7 @@ def sync_handler(*args: Any, **kwargs: Any) -> Any:
return standalone_handler

@property
def api_viewset_class(self) -> type["APIViewSet"] | None:
def api_viewset_class(self) -> Optional[type["APIViewSet"]]:
return self._api_viewset_class

@api_viewset_class.setter
Expand All @@ -342,7 +342,7 @@ def api_viewset_class(self, api_viewset_class: type["APIViewSet"]) -> None:

def resolve_path_parameters(
self, model: type[django.db.models.Model]
) -> type[pydantic.BaseModel] | None:
) -> Optional[type[pydantic.BaseModel]]:
"""
Resolve path parameters to a pydantic model based on the view's path and model.
Expand Down
26 changes: 13 additions & 13 deletions src/ninja_crud/views/create_view.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from types import FunctionType
from typing import Annotated, Any, Callable, cast
from typing import Annotated, Any, Callable, Optional, Union, cast

from django.db.models import ManyToManyField, Model
from django.http import HttpRequest
Expand Down Expand Up @@ -86,19 +86,19 @@ class DepartmentViewSet(viewsets.APIViewSet):

def __init__(
self,
name: str | None = None,
methods: list[str] | set[str] | None = None,
name: Optional[str] = None,
methods: Union[list[str], set[str], None] = None,
path: str = "/",
response_status: int = 201,
response_body: Any = None,
model: type[Model] | None = None,
path_parameters: type[BaseModel] | None = None,
request_body: type[BaseModel] | None = None,
init_model: ModelGetter | None = None,
pre_save: ModelHook | None = None,
post_save: ModelHook | None = None,
decorators: list[Decorator] | None = None,
operation_kwargs: dict[str, Any] | None = None,
model: Optional[type[Model]] = None,
path_parameters: Optional[type[BaseModel]] = None,
request_body: Optional[type[BaseModel]] = None,
init_model: Optional[ModelGetter] = None,
pre_save: Optional[ModelHook] = None,
post_save: Optional[ModelHook] = None,
decorators: Optional[list[Decorator]] = None,
operation_kwargs: Optional[dict[str, Any]] = None,
) -> None:
super().__init__(
name=name,
Expand All @@ -120,7 +120,7 @@ def __init__(
def handler(
self,
request: HttpRequest,
path_parameters: BaseModel | None,
path_parameters: Optional[BaseModel],
request_body: BaseModel,
) -> Model:
instance = self.init_model(request, path_parameters)
Expand Down Expand Up @@ -152,7 +152,7 @@ def _update_handler_annotations(
return handler

def _default_init_model(
self, request: HttpRequest, path_parameters: BaseModel | None
self, request: HttpRequest, path_parameters: Optional[BaseModel]
) -> Model:
return cast(type[Model], self.model)()

Expand Down
26 changes: 13 additions & 13 deletions src/ninja_crud/views/delete_view.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from types import FunctionType
from typing import Annotated, Any, Callable, cast
from typing import Annotated, Any, Callable, Optional, Union, cast

from django.db.models import Model
from django.http import HttpRequest
Expand Down Expand Up @@ -35,7 +35,7 @@ class DeleteView(APIView):
instance. Default uses path parameters (e.g., `self.model.objects.get(id=path_parameters.id)`
for `/{id}` path). Useful for customizing model retrieval logic.
Should have the signature:
- `(request: HttpRequest, path_parameters: BaseModel | None) -> Model`
- `(request: HttpRequest, path_parameters: Optional[BaseModel]) -> Model`
pre_delete ((HttpRequest, Model) -> None, optional): A callable to perform
pre-delete operations on the model instance. Does nothing by default.
Useful for additional operations before deleting the instance.
Expand Down Expand Up @@ -73,18 +73,18 @@ class DepartmentViewSet(viewsets.APIViewSet):

def __init__(
self,
name: str | None = None,
methods: list[str] | set[str] | None = None,
name: Optional[str] = None,
methods: Union[list[str], set[str], None] = None,
path: str = "/{id}",
response_status: int = 204,
response_body: Any = None,
model: type[Model] | None = None,
path_parameters: type[BaseModel] | None = None,
get_model: ModelGetter | None = None,
pre_delete: ModelHook | None = None,
post_delete: ModelHook | None = None,
decorators: list[Decorator] | None = None,
operation_kwargs: dict[str, Any] | None = None,
model: Optional[type[Model]] = None,
path_parameters: Optional[type[BaseModel]] = None,
get_model: Optional[ModelGetter] = None,
pre_delete: Optional[ModelHook] = None,
post_delete: Optional[ModelHook] = None,
decorators: Optional[list[Decorator]] = None,
operation_kwargs: Optional[dict[str, Any]] = None,
) -> None:
super().__init__(
name=name,
Expand All @@ -105,7 +105,7 @@ def __init__(
def handler(
self,
request: HttpRequest,
path_parameters: BaseModel | None,
path_parameters: Optional[BaseModel],
) -> None:
instance = self.get_model(request, path_parameters)
self.pre_delete(request, instance)
Expand All @@ -122,7 +122,7 @@ def _update_handler_annotations(
return handler

def _default_get_model(
self, request: HttpRequest, path_parameters: BaseModel | None
self, request: HttpRequest, path_parameters: Optional[BaseModel]
) -> Model:
return cast(type[Model], self.model).objects.get(
**(path_parameters.model_dump() if path_parameters else {})
Expand Down
32 changes: 16 additions & 16 deletions src/ninja_crud/views/list_view.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from types import FunctionType
from typing import Annotated, Any, Callable, cast
from typing import Annotated, Any, Callable, Optional, Union, cast

from django.db.models import Model, QuerySet
from django.http import HttpRequest
Expand Down Expand Up @@ -38,7 +38,7 @@ class ListView(APIView):
get_queryset (Callable | None, optional): Callable to retrieve the queryset.
Default uses `self.model.objects.get_queryset()`. Useful for selecting
related models or optimizing queries. Should have the signature:
- `(request: HttpRequest, path_parameters: BaseModel | None) -> QuerySet`
- `(request: HttpRequest, path_parameters: Optional[BaseModel]) -> QuerySet`
filter_queryset (Callable | None, optional): Callable to filter the queryset.
Default uses `query_parameters.filter(queryset)` if `query_parameters` is a
`ninja.FilterSchema`, otherwise filters the queryset based on the query
Expand Down Expand Up @@ -86,19 +86,19 @@ class DepartmentViewSet(viewsets.APIViewSet):

def __init__(
self,
name: str | None = None,
methods: list[str] | set[str] | None = None,
name: Optional[str] = None,
methods: Union[list[str], set[str], None] = None,
path: str = "/",
response_status: int = 200,
response_body: Any = None,
model: type[Model] | None = None,
path_parameters: type[BaseModel] | None = None,
query_parameters: type[BaseModel] | None = None,
get_queryset: QuerySetGetter | None = None,
filter_queryset: QuerySetFilter | None = None,
pagination_class: type[PaginationBase] | None = LimitOffsetPagination,
decorators: list[Decorator] | None = None,
operation_kwargs: dict[str, Any] | None = None,
model: Optional[type[Model]] = None,
path_parameters: Optional[type[BaseModel]] = None,
query_parameters: Optional[type[BaseModel]] = None,
get_queryset: Optional[QuerySetGetter] = None,
filter_queryset: Optional[QuerySetFilter] = None,
pagination_class: Optional[type[PaginationBase]] = LimitOffsetPagination,
decorators: Optional[list[Decorator]] = None,
operation_kwargs: Optional[dict[str, Any]] = None,
) -> None:
super().__init__(
name=name,
Expand All @@ -122,8 +122,8 @@ def __init__(
def handler(
self,
request: HttpRequest,
path_parameters: BaseModel | None,
query_parameters: BaseModel | None,
path_parameters: Optional[BaseModel],
query_parameters: Optional[BaseModel],
) -> QuerySet[Model]:
queryset = self.get_queryset(request, path_parameters)
return self.filter_queryset(queryset, query_parameters)
Expand All @@ -141,12 +141,12 @@ def _update_handler_annotations(
return handler

def _default_get_queryset(
self, request: HttpRequest, path_parameters: BaseModel | None
self, request: HttpRequest, path_parameters: Optional[BaseModel]
) -> QuerySet[Model]:
return cast(type[Model], self.model).objects.get_queryset()

def _default_filter_queryset(
self, queryset: QuerySet[Model], query_parameters: BaseModel | None
self, queryset: QuerySet[Model], query_parameters: Optional[BaseModel]
) -> QuerySet[Model]:
if isinstance(query_parameters, FilterSchema):
queryset = query_parameters.filter(queryset)
Expand Down
22 changes: 11 additions & 11 deletions src/ninja_crud/views/read_view.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from types import FunctionType
from typing import Annotated, Any, Callable, cast
from typing import Annotated, Any, Callable, Optional, Union, cast

from django.db.models import Model
from django.http import HttpRequest
Expand Down Expand Up @@ -34,7 +34,7 @@ class ReadView(APIView):
instance. Default uses path parameters (e.g., `self.model.objects.get(id=path_parameters.id)`
for `/{id}` path). Useful for customizing model retrieval logic.
Should have the signature:
- `(request: HttpRequest, path_parameters: BaseModel | None) -> Model`
- `(request: HttpRequest, path_parameters: Optional[BaseModel]) -> Model`
decorators (list[Callable], optional): View function decorators
(applied in reverse order). Defaults to `None`.
operation_kwargs (dict[str, Any], optional): Additional operation
Expand Down Expand Up @@ -73,16 +73,16 @@ class DepartmentViewSet(viewsets.APIViewSet):

def __init__(
self,
name: str | None = None,
methods: list[str] | set[str] | None = None,
name: Optional[str] = None,
methods: Union[list[str], set[str], None] = None,
path: str = "/{id}",
response_status: int = 200,
response_body: Any = None,
model: type[Model] | None = None,
path_parameters: type[BaseModel] | None = None,
get_model: ModelGetter | None = None,
decorators: list[Decorator] | None = None,
operation_kwargs: dict[str, Any] | None = None,
model: Optional[type[Model]] = None,
path_parameters: Optional[type[BaseModel]] = None,
get_model: Optional[ModelGetter] = None,
decorators: Optional[list[Decorator]] = None,
operation_kwargs: Optional[dict[str, Any]] = None,
) -> None:
super().__init__(
name=name,
Expand All @@ -101,7 +101,7 @@ def __init__(
def handler(
self,
request: HttpRequest,
path_parameters: BaseModel | None,
path_parameters: Optional[BaseModel],
) -> Model:
return self.get_model(request, path_parameters)

Expand All @@ -115,7 +115,7 @@ def _update_handler_annotations(
return handler

def _default_get_model(
self, request: HttpRequest, path_parameters: BaseModel | None
self, request: HttpRequest, path_parameters: Optional[BaseModel]
) -> Model:
return cast(type[Model], self.model).objects.get(
**(path_parameters.model_dump() if path_parameters else {})
Expand Down
28 changes: 14 additions & 14 deletions src/ninja_crud/views/update_view.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from types import FunctionType
from typing import Annotated, Any, Callable, cast
from typing import Annotated, Any, Callable, Optional, Union, cast

from django.db.models import ManyToManyField, Model
from django.http import HttpRequest
Expand Down Expand Up @@ -37,7 +37,7 @@ class UpdateView(APIView):
instance. Default uses path parameters (e.g., `self.model.objects.get(id=path_parameters.id)`
for `/{id}` path). Useful for customizing model retrieval logic.
Should have the signature:
- `(request: HttpRequest, path_parameters: BaseModel | None) -> Model`
- `(request: HttpRequest, path_parameters: Optional[BaseModel]) -> Model`
pre_save ((HttpRequest, Model) -> None, optional): Pre-save operations on the
model instance. Does a [full_clean](https://docs.djangoproject.com/en/stable/ref/models/instances/#django.db.models.Model.full_clean)
by default.
Expand Down Expand Up @@ -86,19 +86,19 @@ class DepartmentViewSet(viewsets.APIViewSet):

def __init__(
self,
name: str | None = None,
methods: list[str] | set[str] | None = None,
name: Optional[str] = None,
methods: Union[list[str], set[str], None] = None,
path: str = "/{id}",
response_status: int = 200,
response_body: Any = None,
model: type[Model] | None = None,
path_parameters: type[BaseModel] | None = None,
request_body: type[BaseModel] | None = None,
get_model: ModelGetter | None = None,
pre_save: ModelHook | None = None,
post_save: ModelHook | None = None,
decorators: list[Decorator] | None = None,
operation_kwargs: dict[str, Any] | None = None,
model: Optional[type[Model]] = None,
path_parameters: Optional[type[BaseModel]] = None,
request_body: Optional[type[BaseModel]] = None,
get_model: Optional[ModelGetter] = None,
pre_save: Optional[ModelHook] = None,
post_save: Optional[ModelHook] = None,
decorators: Optional[list[Decorator]] = None,
operation_kwargs: Optional[dict[str, Any]] = None,
) -> None:
super().__init__(
name=name,
Expand All @@ -120,7 +120,7 @@ def __init__(
def handler(
self,
request: HttpRequest,
path_parameters: BaseModel | None,
path_parameters: Optional[BaseModel],
request_body: BaseModel,
) -> Model:
instance = self.get_model(request, path_parameters)
Expand All @@ -147,7 +147,7 @@ def _update_handler_annotations(
return handler

def _default_get_model(
self, request: HttpRequest, path_parameters: BaseModel | None
self, request: HttpRequest, path_parameters: Optional[BaseModel]
) -> Model:
return cast(type[Model], self.model).objects.get(
**(path_parameters.model_dump() if path_parameters else {})
Expand Down
Loading

0 comments on commit 6a4b4a7

Please sign in to comment.