Skip to content

Commit f9719ba

Browse files
api: add maintainer notes for patches and covers
Comments with an empty msgid will be considered maintainer notes. - Only able to create through the API - Only one maintainer note per patch/cover - Maintainers can edit other notes Signed-off-by: Victor Accarini <[email protected]>
1 parent 1c3e4d4 commit f9719ba

File tree

4 files changed

+278
-19
lines changed

4 files changed

+278
-19
lines changed

docs/api/schemas/patchwork.j2

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1834,7 +1834,6 @@ components:
18341834
title: Message ID
18351835
type: string
18361836
readOnly: true
1837-
minLength: 1
18381837
maxLength: 255
18391838
{% if version >= (1, 2) %}
18401839
list_archive_url:
@@ -1867,6 +1866,9 @@ components:
18671866
content:
18681867
title: Content
18691868
type: string
1869+
{% if version <= (1, 4) %}
1870+
readOnly: true
1871+
{% endif %}
18701872
readOnly: true
18711873
minLength: 1
18721874
headers:

patchwork/api/base.py

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#
44
# SPDX-License-Identifier: GPL-2.0-or-later
55

6+
from django.urls import resolve
67
import rest_framework
78

89
from django.conf import settings
@@ -15,37 +16,78 @@
1516
from rest_framework.utils.urls import replace_query_param
1617

1718
from patchwork.api import utils
19+
from patchwork.models import Cover
20+
from patchwork.models import Patch
1821

1922

2023
DRF_VERSION = tuple(int(x) for x in rest_framework.__version__.split('.'))
2124

2225

2326
if DRF_VERSION > (3, 11):
2427

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+
2538
class CurrentPatchDefault(object):
2639
requires_context = True
2740

2841
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'])
2946
return serializer_field.context['request'].patch
3047

3148
class CurrentCoverDefault(object):
3249
requires_context = True
3350

3451
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
3657

3758
else:
3859

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+
3971
class CurrentPatchDefault(object):
4072
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
4279

4380
def __call__(self):
4481
return self.patch
4582

4683
class CurrentCoverDefault(object):
4784
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
4991

5092
def __call__(self):
5193
return self.cover

0 commit comments

Comments
 (0)