Skip to content

Commit

Permalink
Rename mature to sensitive
Browse files Browse the repository at this point in the history
  • Loading branch information
AetherUnbound committed Feb 8, 2024
1 parent 7b4f3bc commit f38774a
Show file tree
Hide file tree
Showing 14 changed files with 102 additions and 68 deletions.
4 changes: 2 additions & 2 deletions api/api/admin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from api.admin.site import openverse_admin
from api.models import PENDING, Audio, AudioReport, ContentProvider, Image, ImageReport
from api.models.media import AbstractDeletedMedia, AbstractMatureMedia
from api.models.media import AbstractDeletedMedia, AbstractSensitiveMedia


admin.site = openverse_admin
Expand Down Expand Up @@ -72,7 +72,7 @@ def has_add_permission(self, *args, **kwargs):


for klass in [
*AbstractMatureMedia.__subclasses__(),
*AbstractSensitiveMedia.__subclasses__(),
*AbstractDeletedMedia.__subclasses__(),
]:
admin.site.register(klass, MediaSubreportAdmin)
Expand Down
27 changes: 27 additions & 0 deletions api/api/migrations/0056_rename_mature_to_sensitive.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Generated by Django 4.2.9 on 2024-02-08 18:26

import api.models.media
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('api', '0055_alter_matureaudio_table_alter_matureimage_table'),
]

operations = [
migrations.RenameModel('MatureImage', 'SensitiveImage'),
migrations.RenameModel('MatureAudio', 'SensitiveAudio'),
migrations.AlterField(
model_name='sensitiveaudio',
name='media_obj',
field=models.OneToOneField(db_column='identifier', db_constraint=False, help_text='The reference to the sensitive audio.', on_delete=django.db.models.deletion.DO_NOTHING, primary_key=True, related_name='sensitive_audio', serialize=False, to='api.audio', to_field='identifier'),
),
migrations.AlterField(
model_name='sensitiveimage',
name='media_obj',
field=models.OneToOneField(db_column='identifier', db_constraint=False, help_text='The reference to the sensitive image.', on_delete=django.db.models.deletion.DO_NOTHING, primary_key=True, related_name='sensitive_image', serialize=False, to='api.image', to_field='identifier'),
),
]
4 changes: 2 additions & 2 deletions api/api/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
AudioReport,
AudioSet,
DeletedAudio,
MatureAudio,
SensitiveAudio,
)
from api.models.image import DeletedImage, Image, ImageList, ImageReport, MatureImage
from api.models.image import DeletedImage, Image, ImageList, ImageReport, SensitiveImage
from api.models.media import (
DEINDEXED,
DMCA,
Expand Down
12 changes: 6 additions & 6 deletions api/api/models/audio.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
from api.models.media import (
AbstractAltFile,
AbstractDeletedMedia,
AbstractMatureMedia,
AbstractMedia,
AbstractMediaList,
AbstractMediaReport,
AbstractSensitiveMedia,
)
from api.models.mixins import FileMixin, ForeignIdentifierMixin, MediaMixin
from api.utils.waveform import generate_peaks
Expand Down Expand Up @@ -189,8 +189,8 @@ class Audio(AudioFileMixin, AbstractMedia):
)

@property
def mature(self) -> bool:
return hasattr(self, "mature_audio")
def sensitive(self) -> bool:
return hasattr(self, "sensitive_audio")

@property
def alternative_files(self):
Expand Down Expand Up @@ -260,7 +260,7 @@ class Meta:
verbose_name_plural = "Deleted audio"


class MatureAudio(AbstractMatureMedia):
class SensitiveAudio(AbstractSensitiveMedia):
"""
Stores all audio tracks that have been flagged as 'mature'.
Expand All @@ -278,7 +278,7 @@ class MatureAudio(AbstractMatureMedia):
primary_key=True,
db_constraint=False,
db_column="identifier",
related_name="mature_audio",
related_name="sensitive_audio",
help_text="The reference to the sensitive audio.",
)

Expand All @@ -289,7 +289,7 @@ class Meta:

class AudioReport(AbstractMediaReport):
media_class = Audio
mature_class = MatureAudio
sensitive_class = SensitiveAudio
deleted_class = DeletedAudio

media_obj = models.ForeignKey(
Expand Down
12 changes: 6 additions & 6 deletions api/api/models/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
from api.constants.media_types import IMAGE_TYPE
from api.models.media import (
AbstractDeletedMedia,
AbstractMatureMedia,
AbstractMedia,
AbstractMediaList,
AbstractMediaReport,
AbstractSensitiveMedia,
)
from api.models.mixins import FileMixin

Expand Down Expand Up @@ -53,8 +53,8 @@ class Meta(AbstractMedia.Meta):
db_table = "image"

@property
def mature(self) -> bool:
return hasattr(self, "mature_image")
def sensitive(self) -> bool:
return hasattr(self, "sensitive_image")


class DeletedImage(AbstractDeletedMedia):
Expand All @@ -80,7 +80,7 @@ class DeletedImage(AbstractDeletedMedia):
)


class MatureImage(AbstractMatureMedia):
class SensitiveImage(AbstractSensitiveMedia):
"""
Stores all images that have been flagged as 'mature'.
Expand All @@ -98,7 +98,7 @@ class MatureImage(AbstractMatureMedia):
primary_key=True,
db_constraint=False,
db_column="identifier",
related_name="mature_image",
related_name="sensitive_image",
help_text="The reference to the sensitive image.",
)

Expand All @@ -108,7 +108,7 @@ class Meta:

class ImageReport(AbstractMediaReport):
media_class = Image
mature_class = MatureImage
sensitive_class = SensitiveImage
deleted_class = DeletedImage

media_obj = models.ForeignKey(
Expand Down
24 changes: 12 additions & 12 deletions api/api/models/media.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,15 @@ class AbstractMediaReport(models.Model):
"""
Generic model from which to inherit all reported media classes.
'Reported' here refers to content reports such as mature, copyright-violating or
deleted content. Subclasses must populate ``media_class``, ``mature_class`` and
'Reported' here refers to content reports such as sensitive, copyright-violating or
deleted content. Subclasses must populate ``media_class``, ``sensitive_class`` and
``deleted_class`` fields.
"""

media_class: type[models.Model] = None
"""the model class associated with this media type e.g. ``Image`` or ``Audio``"""
mature_class: type[models.Model] = None
"""the class storing mature media e.g. ``MatureImage`` or ``MatureAudio``"""
sensitive_class: type[models.Model] = None
"""the class storing sensitive media e.g. ``SensitiveImage`` or ``SensitiveAudio``"""
deleted_class: type[models.Model] = None
"""the class storing deleted media e.g. ``DeletedImage`` or ``DeletedAudio``"""

Expand Down Expand Up @@ -213,18 +213,18 @@ def save(self, *args, **kwargs):
Extend the built-in ``save()`` functionality of Django with Elasticsearch
integration to update records and refresh indices.
Media marked as mature or deleted also leads to instantiation of their
corresponding mature or deleted classes.
Media marked as sensitive or deleted also leads to instantiation of their
corresponding sensitive or deleted classes.
"""

self.clean()

super().save(*args, **kwargs)

if self.status == MATURE_FILTERED:
# Create an instance of the mature class for this media. This will
# Create an instance of the sensitive class for this media. This will
# automatically set the ``mature`` field in the ES document.
self.mature_class.objects.create(media_obj=self.media_obj)
self.sensitive_class.objects.create(media_obj=self.media_obj)
elif self.status == DEINDEXED:
# Create an instance of the deleted class for this media, so that we don't
# reindex it later. This will automatically delete the ES document and the
Expand Down Expand Up @@ -290,7 +290,7 @@ class AbstractDeletedMedia(PerformIndexUpdateMixin, OpenLedgerModel):
Generic model from which to inherit all deleted media classes.
'Deleted' here refers to media which has been deleted at the source or intentionally
de-indexed by us. Unlike mature reports, this action is irreversible. Subclasses
de-indexed by us. Unlike sensitive reports, this action is irreversible. Subclasses
must populate ``media_class`` and ``es_index`` fields.
"""

Expand Down Expand Up @@ -329,9 +329,9 @@ def save(self, *args, **kwargs):
self.media_obj.delete() # remove the actual model instance


class AbstractMatureMedia(PerformIndexUpdateMixin, models.Model):
class AbstractSensitiveMedia(PerformIndexUpdateMixin, models.Model):
"""
Generic model from which to inherit all mature media classes.
Generic model from which to inherit all sensitive media classes.
Subclasses must populate ``media_class`` and ``es_index`` fields.
"""
Expand All @@ -350,7 +350,7 @@ class AbstractMatureMedia(PerformIndexUpdateMixin, models.Model):
primary_key=True,
db_constraint=False,
db_column="identifier",
related_name="mature_abstract_media",
related_name="sensitive_abstract_media",
help_text="The reference to the sensitive media.",
)
"""
Expand Down
2 changes: 1 addition & 1 deletion api/api/views/audio_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class AudioViewSet(MediaViewSet):
collection_serializer_class = AudioCollectionRequestSerializer

def get_queryset(self):
return super().get_queryset().select_related("mature_audio", "audioset")
return super().get_queryset().select_related("sensitive_audio", "audioset")

# Extra actions
@creator_collection
Expand Down
2 changes: 1 addition & 1 deletion api/api/views/image_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class ImageViewSet(MediaViewSet):
}

def get_queryset(self):
return super().get_queryset().select_related("mature_image")
return super().get_queryset().select_related("sensitive_image")

# Extra actions
@creator_collection
Expand Down
4 changes: 2 additions & 2 deletions api/test/factory/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
AudioAddOnFactory,
AudioFactory,
AudioReportFactory,
MatureAudioFactory,
SensitiveAudioFactory,
)
from test.factory.models.image import (
ImageFactory,
ImageReportFactory,
MatureImageFactory,
SensitiveImageFactory,
)
from test.factory.models.oauth2 import (
AccessTokenFactory,
Expand Down
8 changes: 4 additions & 4 deletions api/test/factory/models/audio.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import factory
from factory.django import DjangoModelFactory

from api.models.audio import Audio, AudioAddOn, AudioReport, MatureAudio
from api.models.audio import Audio, AudioAddOn, AudioReport, SensitiveAudio
from test.factory.faker import Faker
from test.factory.models.media import IdentifierFactory, MediaFactory


class MatureAudioFactory(DjangoModelFactory):
class SensitiveAudioFactory(DjangoModelFactory):
class Meta:
model = MatureAudio
model = SensitiveAudio

media_obj = factory.SubFactory("test.factory.models.audio.AudioFactory")


class AudioFactory(MediaFactory):
_mature_factory = MatureAudioFactory
_sensitive_factory = SensitiveAudioFactory

class Meta:
model = Audio
Expand Down
8 changes: 4 additions & 4 deletions api/test/factory/models/image.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import factory
from factory.django import DjangoModelFactory

from api.models.image import Image, ImageReport, MatureImage
from api.models.image import Image, ImageReport, SensitiveImage
from test.factory.models.media import MediaFactory, MediaReportFactory


class MatureImageFactory(DjangoModelFactory):
class SensitiveImageFactory(DjangoModelFactory):
class Meta:
model = MatureImage
model = SensitiveImage

media_obj = factory.SubFactory("test.factory.models.image.ImageFactory")


class ImageFactory(MediaFactory):
_mature_factory = MatureImageFactory
_sensitive_factory = SensitiveImageFactory

class Meta:
model = Image
Expand Down
6 changes: 3 additions & 3 deletions api/test/factory/models/media.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ class MediaFactory(DjangoModelFactory):
)

# Sub-factories must set this to their corresponding
# ``AbstractMatureMedia`` subclass
_mature_factory = None
# ``AbstractSensitiveMedia`` subclass
_sensitive_factory = None

_highest_pre_existing_pk = None

Expand Down Expand Up @@ -126,7 +126,7 @@ def create(cls, *args, **kwargs) -> AbstractMedia | tuple[AbstractMedia, Hit]:
hit = None

if mature_reported:
cls._mature_factory.create(media_obj=model)
cls._sensitive_factory.create(media_obj=model)

if pook_active:
# Reactivate pook if it was active
Expand Down
18 changes: 9 additions & 9 deletions api/test/unit/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
DeletedAudio,
DeletedImage,
Image,
MatureAudio,
MatureImage,
SensitiveAudio,
SensitiveImage,
)
from api.models.media import AbstractDeletedMedia, AbstractMatureMedia, AbstractMedia
from api.models.media import AbstractDeletedMedia, AbstractMedia, AbstractSensitiveMedia
from api.serializers.audio_serializers import (
AudioReportRequestSerializer,
AudioSearchRequestSerializer,
Expand Down Expand Up @@ -67,8 +67,8 @@ class MediaTypeConfig:
filtered_index: str
model_factory: MediaFactory
model_class: AbstractMedia
mature_factory: MediaFactory
mature_class: AbstractMatureMedia
sensitive_factory: MediaFactory
sensitive_class: AbstractSensitiveMedia
search_request_serializer: MediaSearchRequestSerializer
model_serializer: MediaSerializer
report_serializer: MediaReportRequestSerializer
Expand All @@ -88,12 +88,12 @@ def indexes(self):
filtered_index="image-filtered",
model_factory=model_factories.ImageFactory,
model_class=Image,
mature_factory=model_factories.MatureImageFactory,
sensitive_factory=model_factories.SensitiveImageFactory,
search_request_serializer=ImageSearchRequestSerializer,
model_serializer=ImageSerializer,
report_serializer=ImageReportRequestSerializer,
report_factory=model_factories.ImageReportFactory,
mature_class=MatureImage,
sensitive_class=SensitiveImage,
deleted_class=DeletedImage,
),
"audio": MediaTypeConfig(
Expand All @@ -103,12 +103,12 @@ def indexes(self):
filtered_index="audio-filtered",
model_factory=model_factories.AudioFactory,
model_class=Audio,
mature_factory=model_factories.MatureAudioFactory,
sensitive_factory=model_factories.SensitiveAudioFactory,
search_request_serializer=AudioSearchRequestSerializer,
model_serializer=AudioSerializer,
report_serializer=AudioReportRequestSerializer,
report_factory=model_factories.AudioReportFactory,
mature_class=MatureAudio,
sensitive_class=SensitiveAudio,
deleted_class=DeletedAudio,
),
}
Expand Down
Loading

0 comments on commit f38774a

Please sign in to comment.