Skip to content

Commit c64189b

Browse files
Hide licensed chapters in API
1 parent dab893d commit c64189b

File tree

5 files changed

+22
-5
lines changed

5 files changed

+22
-5
lines changed

api/v2/schema.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,13 @@ def allows_filters(self, path: str, method: str) -> bool:
167167
# only allow filters in list endpoints
168168
return self.view.action == 'list'
169169

170+
def get_responses(self, path: str, method: str) -> Dict[str, Any]:
171+
responses = super().get_responses(path, method)
172+
licensed_endpoints = ('/chapters/{id}', '/cubari/{slug}')
173+
if method == 'GET' and path in licensed_endpoints:
174+
responses['451'] = {'description': 'Licensed series'}
175+
return responses
176+
170177

171178
class OpenAPISchemaGenerator(SchemaGenerator):
172179
"""Custom OpenAPI generator class."""

reader/api.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,13 @@ class ChapterViewSet(CORSMixin, ModelViewSet):
112112
filter_backends = filters.CHAPTER_FILTERS
113113
parser_classes = (MultiPartParser,)
114114

115+
def retrieve(self, request: Request, *args, **kwargs) -> Response:
116+
instance = self.get_object()
117+
if instance.series.licensed:
118+
raise _LegalException()
119+
serializer = self.get_serializer(instance)
120+
return Response(serializer.data)
121+
115122
def get_queryset(self) -> QuerySet:
116123
return models.Chapter.objects.select_related('series') \
117124
.filter(published__lte=tz.now()).order_by('-published')

reader/filters.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,10 +266,13 @@ def filter_queryset(self, request: Request, queryset: QuerySet,
266266
number = request.query_params['number']
267267
if request.query_params.get('track') == 'true':
268268
Chapter.track_view(
269-
series__slug=series, volume=volume, number=number
269+
series__slug=series,
270+
series__licensed=False,
271+
volume=volume, number=number
270272
)
271273
return queryset.filter(
272274
chapter__series__slug=series,
275+
chapter__series__licensed=False,
273276
chapter__volume=volume, chapter__number=number
274277
).order_by('number')
275278

reader/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def series(request: HttpRequest, slug: str) -> HttpResponse:
131131
])
132132
tags = list(series.categories.values_list('name', flat=True))
133133
authors = list(series.authors.all())
134-
artists = list(series.authors.all())
134+
artists = list(series.artists.all())
135135
aliases = series.aliases.names()
136136
book = jsonld.schema('Book', {
137137
'url': uri,

requirements.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
django~=3.2.12
1+
django~=3.2.13
22
djangorestframework>=3.13
3-
django-allauth>=0.49
4-
Pillow>=9.0
3+
django-allauth>=0.51
4+
Pillow>=9.1
55
libsass>=0.21
66
yaenv~=1.3.2; python_version=='3.7'
77
yaenv~=1.4.2; python_version=='3.8'

0 commit comments

Comments
 (0)