Skip to content

Commit 90332a9

Browse files
committed
Request refactoring, json_data, form_data, QueryDict str types
1 parent 793c57b commit 90332a9

File tree

11 files changed

+201
-188
lines changed

11 files changed

+201
-188
lines changed

plain-admin/plain/admin/views/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def search_queryset(self, queryset: models.QuerySet) -> models.QuerySet:
114114
if search := self.request.query_params.get("search"):
115115
filters = Q()
116116
for field in self.search_fields:
117-
filters |= Q(**{f"{field}__icontains": search})
117+
filters |= Q(**{f"{field}__icontains": search}) # type: ignore[arg-type]
118118

119119
queryset = queryset.filter(filters)
120120

plain-admin/plain/admin/views/objects.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def get_template_context(self) -> dict[str, Any]:
3939
self.objects = self.get_objects()
4040

4141
page_size = self.request.query_params.get("page_size", self.page_size)
42-
paginator = Paginator(self.objects, page_size)
42+
paginator = Paginator(self.objects, int(page_size))
4343
self._page = paginator.get_page(self.request.query_params.get("page", 1))
4444

4545
context["paginator"] = paginator
@@ -84,10 +84,10 @@ def get(self) -> Response:
8484

8585
def post(self) -> Response:
8686
# won't be "key" anymore, just list
87-
action_name = self.request.data.get("action_name")
87+
action_name = self.request.form_data.get("action_name")
8888
actions = self.get_actions()
8989
if action_name and action_name in actions:
90-
action_ids_param = self.request.data["action_ids"]
90+
action_ids_param = self.request.form_data["action_ids"]
9191
if action_ids_param == "__all__":
9292
target_ids = [self.get_object_id(obj) for obj in self.get_objects()]
9393
else:

plain-api/tests/app/urls.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ class TestVersionedAPIView(VersionedAPIView):
3131
}
3232

3333
def post(self):
34-
name = self.request.data["name"]
34+
data = self.request.json_data
35+
assert isinstance(data, dict)
36+
name = data["name"]
3537
return {"message": f"Hello, {name}!"}
3638

3739

plain-models/plain/models/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ class UserForm(forms.ModelForm):
388388
fields = ["email", "is_admin"]
389389

390390
# Usage
391-
form = UserForm(data=request.data)
391+
form = UserForm(request=request)
392392
if form.is_valid():
393393
user = form.save()
394394
```

plain-oauth/plain/oauth/providers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ def handle_login_request(
137137
# Store next url in session so we can get it on the callback request
138138
if redirect_to:
139139
session[SESSION_NEXT_KEY] = redirect_to
140-
elif "next" in request.data:
141-
session[SESSION_NEXT_KEY] = request.data["next"]
140+
elif "next" in request.form_data:
141+
session[SESSION_NEXT_KEY] = request.form_data["next"]
142142

143143
# Sort authorization params for consistency
144144
sorted_authorization_params = sorted(authorization_params.items())
@@ -151,7 +151,7 @@ def handle_connect_request(
151151
return self.handle_login_request(request=request, redirect_to=redirect_to)
152152

153153
def handle_disconnect_request(self, *, request: Request) -> Response:
154-
provider_user_id = request.data["provider_user_id"]
154+
provider_user_id = request.form_data["provider_user_id"]
155155
connection = OAuthConnection.query.get(
156156
provider_key=self.provider_key, provider_user_id=provider_user_id
157157
)
@@ -198,7 +198,7 @@ def get_login_redirect_url(self, *, request: Request) -> str:
198198
return session.pop(SESSION_NEXT_KEY, "/")
199199

200200
def get_disconnect_redirect_url(self, *, request: Request) -> str:
201-
return request.data.get("next", "/")
201+
return request.form_data.get("next", "/")
202202

203203
def get_redirect_response(self, redirect_url: str) -> Response:
204204
"""

plain-observer/plain/observer/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def get_template_context(self) -> dict[str, Any]:
4242

4343
def htmx_put_mode(self) -> Response:
4444
"""Set observer mode via HTMX PUT."""
45-
mode = self.request.data.get("mode")
45+
mode = self.request.form_data.get("mode")
4646
observer = Observer.from_request(self.request)
4747

4848
response = Response(status_code=204)
@@ -68,7 +68,7 @@ def htmx_delete_traces(self) -> Response:
6868

6969
def post(self) -> Response:
7070
"""Handle POST requests to set observer mode."""
71-
action = self.request.data.get("observe_action")
71+
action = self.request.form_data.get("observe_action")
7272
if action == "summary":
7373
observer = Observer.from_request(self.request)
7474
response = Response(status_code=204)

plain-pageviews/plain/pageviews/views.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
1-
import json
2-
31
from plain.views import View
42

53
from .models import Pageview
64

75

86
class TrackView(View):
97
def post(self) -> int:
10-
try:
11-
data = self.request.data
12-
except json.JSONDecodeError:
13-
return 400
8+
data = self.request.json_data
149

1510
try:
1611
pageview = Pageview.create_from_request(

plain/plain/forms/forms.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from typing import TYPE_CHECKING, Any
1010

1111
from plain.exceptions import NON_FIELD_ERRORS
12+
from plain.utils.datastructures import MultiValueDict
1213

1314
from .exceptions import ValidationError
1415
from .fields import Field, FileField
@@ -78,12 +79,16 @@ def __init__(
7879
prefix: str | None = None,
7980
initial: dict[str, Any] | None = None,
8081
):
81-
self.data = request.data
82-
self.files = request.files
83-
82+
# Forms can handle both JSON and form data
8483
self.is_json_request = request.headers.get("Content-Type", "").startswith(
8584
"application/json"
8685
)
86+
if self.is_json_request:
87+
self.data = request.json_data
88+
self.files = MultiValueDict()
89+
else:
90+
self.data = request.form_data
91+
self.files = request.files
8792

8893
self.is_bound = bool(self.data or self.files)
8994

0 commit comments

Comments
 (0)