Skip to content
This repository has been archived by the owner on Feb 22, 2023. It is now read-only.

Clean up API codebase by using idiomatic DRF and removing boilerplate #194

Merged
merged 37 commits into from
Sep 21, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
cc19670
Replace `str` with `uuid` to narrow matches
dhruvkb Aug 30, 2021
022ad42
Define a helper function to raise `APIExceptions` from views
dhruvkb Aug 30, 2021
064ccbe
Define a serializer for the audio waveform endpoint
dhruvkb Aug 30, 2021
40a4eb4
Add cURL example for the OEmbed endpoint
dhruvkb Aug 31, 2021
c45d395
Create serializer for `ContentProvider`
dhruvkb Aug 31, 2021
a2f700e
Move pagination attributes from search query serializer to paginator …
dhruvkb Aug 31, 2021
0e03571
Cleanup OEmbed input and output serializers
dhruvkb Aug 31, 2021
870908a
Create parent viewset for all media types
dhruvkb Aug 31, 2021
3c9d2b6
Add examples for reporting audio files
dhruvkb Aug 31, 2021
e0c0ec3
Replace `AboutMediaSerializer` superseded by `ProviderSerializer`
dhruvkb Aug 31, 2021
8d8d226
Add attribute 'page' to search results
dhruvkb Aug 31, 2021
6ec373b
Infer reported content identifier from the endpoint URL
dhruvkb Aug 31, 2021
cc009f3
Migrate endpoint documentation to a docs directory
dhruvkb Aug 31, 2021
a9f92f4
Consolidate endpoints into a DRF viewset
dhruvkb Aug 31, 2021
0acf192
Use DRF router to automatically define endpoints from the viewset
dhruvkb Aug 31, 2021
d5e050f
Update tests based on the new code structure
dhruvkb Aug 31, 2021
c152280
Fix code style violations
dhruvkb Aug 31, 2021
796cd10
Remove redundant import
dhruvkb Aug 31, 2021
a6fa43a
Make serializer nomenclature consistent
dhruvkb Aug 31, 2021
136af05
Programmatically generate list of fields
dhruvkb Aug 31, 2021
d0c8b33
Remove unused serializer
dhruvkb Aug 31, 2021
bfb25a0
Use cleaner validation for deprecated fields, making post-error redun…
dhruvkb Aug 31, 2021
b828ed6
Update error serializers
dhruvkb Aug 31, 2021
c19a0d9
Fix broken reference in audio report endpoint
dhruvkb Sep 1, 2021
ceafca2
Remove field 'id'
dhruvkb Sep 1, 2021
9d120d9
Use `HyperlinkedIdentityField` to automatically generate related URLs
dhruvkb Sep 1, 2021
4862f95
Fix nomenclature in example requests and responses
dhruvkb Sep 1, 2021
a001243
Define request response mappings and use them to run tests on the end…
dhruvkb Sep 1, 2021
545916a
Type hint `SerializerMethodField`s for Swagger
dhruvkb Sep 1, 2021
b263238
Move MD-in-Python out to its separate file
dhruvkb Sep 2, 2021
5d9d667
Add testing for the report endpoint
dhruvkb Sep 2, 2021
b745c30
Unskip thumbnail checks for audio ref. #171
dhruvkb Sep 2, 2021
a405b79
Remove unnecessary scheme replacement ref. 9d120d9
dhruvkb Sep 2, 2021
14914f7
Reformat code
dhruvkb Sep 2, 2021
f15b736
Make operation ID for OEmbed consistent
dhruvkb Sep 2, 2021
683eb17
Disable pagination on stats endpoint
dhruvkb Sep 2, 2021
b93edeb
Add examples in the help text for provider serializer
dhruvkb Sep 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 13 additions & 20 deletions openverse-api/catalog/api/serializers/audio_serializers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from django.urls import reverse
from rest_framework import serializers

from catalog.api.controllers.search_controller import get_sources
Expand Down Expand Up @@ -96,12 +95,6 @@ class AudioSerializer(MediaSerializer):
used to generate Swagger documentation.
"""

thumbnail = serializers.SerializerMethodField(
help_text="A direct link to the miniature artwork."
)
waveform = serializers.SerializerMethodField(
help_text='A direct link to the waveform peaks.'
)
audio_set = serializers.PrimaryKeyRelatedField(
required=False,
help_text='Reference to set of which this track is a part.',
Expand Down Expand Up @@ -135,31 +128,31 @@ class AudioSerializer(MediaSerializer):
)

# Hyperlinks
thumbnail = serializers.HyperlinkedIdentityField(
read_only=True,
view_name='audio-thumb',
lookup_field='identifier',
help_text="A direct link to the miniature artwork."
)
waveform = serializers.HyperlinkedIdentityField(
read_only=True,
view_name='audio-waveform',
lookup_field='identifier',
help_text='A direct link to the waveform peaks.'
)
detail_url = serializers.HyperlinkedIdentityField(
read_only=True,
view_name='audio-detail',
lookup_field='identifier',
help_text="A direct link to the detail view of this audio file."
)
related_url = serializers.HyperlinkedIdentityField(
read_only=True,
view_name='audio-related',
lookup_field='identifier',
read_only=True,
help_text="A link to an endpoint that provides similar audio files."
)

def get_thumbnail(self, obj):
request = self.context['request']
host = request.get_host()
path = reverse('audio-thumb', kwargs={'identifier': obj.identifier})
return f'https://{host}{path}'

def get_waveform(self, obj):
request = self.context['request']
host = request.get_host()
path = reverse('audio-waveform', kwargs={'identifier': obj.identifier})
return f'https://{host}{path}'


class AudioSearchSerializer(MediaSearchSerializer):
"""
Expand Down
15 changes: 6 additions & 9 deletions openverse-api/catalog/api/serializers/image_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,6 @@ class ImageSerializer(MediaSerializer):
used to generate Swagger documentation.
"""

thumbnail = serializers.SerializerMethodField(
help_text="A direct link to the miniature image."
)
height = serializers.IntegerField(
required=False,
help_text="The height of the image in pixels. Not always available."
Expand All @@ -110,6 +107,12 @@ class ImageSerializer(MediaSerializer):
)

# Hyperlinks
thumbnail = serializers.HyperlinkedIdentityField(
dhruvkb marked this conversation as resolved.
Show resolved Hide resolved
read_only=True,
view_name='image-thumb',
lookup_field='identifier',
help_text="A direct link to the miniature image."
)
detail_url = serializers.HyperlinkedIdentityField(
read_only=True,
view_name='image-detail',
Expand All @@ -123,12 +126,6 @@ class ImageSerializer(MediaSerializer):
help_text="A link to an endpoint that provides similar images."
)

def get_thumbnail(self, obj):
request = self.context['request']
host = request.get_host()
path = reverse('image-thumb', kwargs={'identifier': obj.identifier})
return f'https://{host}{path}'


class ImageSearchSerializer(MediaSearchSerializer):
"""
Expand Down