|
3 | 3 | #
|
4 | 4 | # SPDX-License-Identifier: GPL-2.0-or-later
|
5 | 5 |
|
| 6 | +from django.urls import resolve |
6 | 7 | import rest_framework
|
7 | 8 |
|
8 | 9 | from django.conf import settings
|
|
15 | 16 | from rest_framework.utils.urls import replace_query_param
|
16 | 17 |
|
17 | 18 | from patchwork.api import utils
|
| 19 | +from patchwork.models import Cover |
| 20 | +from patchwork.models import Patch |
18 | 21 |
|
19 | 22 |
|
20 | 23 | DRF_VERSION = tuple(int(x) for x in rest_framework.__version__.split('.'))
|
21 | 24 |
|
22 | 25 |
|
23 | 26 | if DRF_VERSION > (3, 11):
|
24 | 27 |
|
| 28 | + class CurrentPersonDefault(object): |
| 29 | + requires_context = True |
| 30 | + |
| 31 | + def __call__(self, serializer_field): |
| 32 | + return ( |
| 33 | + serializer_field.context['request'] |
| 34 | + .user.person_set.all() |
| 35 | + .first() |
| 36 | + ) |
| 37 | + |
25 | 38 | class CurrentPatchDefault(object):
|
26 | 39 | requires_context = True
|
27 | 40 |
|
28 | 41 | def __call__(self, serializer_field):
|
| 42 | + req = serializer_field.context['request'] |
| 43 | + _, _, kwargs = resolve(req.path) |
| 44 | + if 'patch_id' in kwargs: |
| 45 | + return get_object_or_404(Patch, id=kwargs['patch_id']) |
29 | 46 | return serializer_field.context['request'].patch
|
30 | 47 |
|
31 | 48 | class CurrentCoverDefault(object):
|
32 | 49 | requires_context = True
|
33 | 50 |
|
34 | 51 | def __call__(self, serializer_field):
|
35 |
| - return serializer_field.context['request'].cover |
| 52 | + req = serializer_field.context['request'] |
| 53 | + _, _, kwargs = resolve(req.path) |
| 54 | + if 'cover_id' in kwargs: |
| 55 | + return get_object_or_404(Cover, id=kwargs['cover_id']) |
| 56 | + return req.cover |
36 | 57 |
|
37 | 58 | else:
|
38 | 59 |
|
| 60 | + class CurrentPersonDefault(object): |
| 61 | + def set_context(self, serializer_field): |
| 62 | + self.person = ( |
| 63 | + serializer_field.context['request'] |
| 64 | + .user.person_set.all() |
| 65 | + .first() |
| 66 | + ) |
| 67 | + |
| 68 | + def __call__(self): |
| 69 | + return self.person |
| 70 | + |
39 | 71 | class CurrentPatchDefault(object):
|
40 | 72 | def set_context(self, serializer_field):
|
41 |
| - self.patch = serializer_field.context['request'].patch |
| 73 | + req = serializer_field.context['request'] |
| 74 | + _, _, kwargs = resolve(req.path) |
| 75 | + if 'patch_id' in kwargs: |
| 76 | + self.patch = get_object_or_404(Patch, id=kwargs['patch_id']) |
| 77 | + else: |
| 78 | + self.patch = req.patch |
42 | 79 |
|
43 | 80 | def __call__(self):
|
44 | 81 | return self.patch
|
45 | 82 |
|
46 | 83 | class CurrentCoverDefault(object):
|
47 | 84 | def set_context(self, serializer_field):
|
48 |
| - self.patch = serializer_field.context['request'].cover |
| 85 | + req = serializer_field.context['request'] |
| 86 | + _, _, kwargs = resolve(req.path) |
| 87 | + if 'cover_id' in kwargs: |
| 88 | + self.cover = get_object_or_404(Cover, id=kwargs['cover_id']) |
| 89 | + else: |
| 90 | + self.cover = req.cover |
49 | 91 |
|
50 | 92 | def __call__(self):
|
51 | 93 | return self.cover
|
|
0 commit comments