Skip to content

Commit afa2e17

Browse files
committed
- oops forgot to commit these
1 parent 44db2f9 commit afa2e17

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# API Errors in API class helpers
2+
3+
Returning errors in the helper functions of your API endpoint can be annoying.
4+
To avoid that annoyance, just raise one of the [view exceptions](kirovy/exceptions/view_exceptions.py)
5+
or write your own that subclasses `KirovyValidationError`.
6+
7+
**Example where you annoy yourself with bubbling returns:**
8+
9+
```python
10+
class MyView(APIView):
11+
...
12+
def helper(self, request: KirovyRequest) -> MyObject | KirovyResponse:
13+
object_id = request.data.get("id")
14+
if not object_id:
15+
return KirovyResponse(
16+
status=status.HTTP_400_BAD_REQUEST,
17+
data=ErrorResponseData(
18+
message="Must specify id",
19+
code=api_codes.FileUploadApiCodes.MISSING_FOREIGN_ID,
20+
additional={"expected_field": "id"}
21+
)
22+
)
23+
24+
object = get_object_or_404(self.file_parent_class.objects, id=object_id)
25+
self.check_object_permissions(request, object)
26+
27+
return object
28+
29+
def post(self, request: KirovyRequest, format=None) -> KirovyResponse:
30+
object = self.helper(request)
31+
if isinstance(object, KirovyResponse):
32+
return object
33+
...
34+
```
35+
36+
**Example where you just raise the exception:**
37+
38+
```python
39+
class MyView(APIView):
40+
...
41+
def helper(self, request: KirovyRequest) -> MyObject:
42+
object_id = request.data.get("id")
43+
if not object_id:
44+
raise KirovyValidationError(
45+
detail="Must specify id",
46+
code=api_codes.FileUploadApiCodes.MISSING_FOREIGN_ID,
47+
additional={"expected_field": "id"}
48+
)
49+
50+
object = get_object_or_404(self.file_parent_class.objects, id=object_id)
51+
self.check_object_permissions(request, object)
52+
53+
return object
54+
55+
def post(self, request: KirovyRequest, format=None) -> KirovyResponse:
56+
object = self.helper(request)
57+
...
58+
```
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Generated by Django 4.2.23 on 2025-09-08 04:36
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
("kirovy", "0015_remove_cncmapimagefile_version_and_more"),
12+
]
13+
14+
operations = [
15+
migrations.AddField(
16+
model_name="cncmapfile",
17+
name="cnc_user",
18+
field=models.ForeignKey(
19+
null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL
20+
),
21+
),
22+
migrations.AddField(
23+
model_name="cncmapimagefile",
24+
name="cnc_user",
25+
field=models.ForeignKey(
26+
null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL
27+
),
28+
),
29+
migrations.AddField(
30+
model_name="mappreview",
31+
name="cnc_user",
32+
field=models.ForeignKey(
33+
null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL
34+
),
35+
),
36+
]

0 commit comments

Comments
 (0)