Merge branch '432-tags-albums-artists' into 'develop'

See #432: added model tagging logic on artists and albums

See merge request funkwhale/funkwhale!829
environments/review-front-arti-0habim/deployments/2230
Eliot Berriot 2019-07-15 10:57:34 +02:00
commit 997dcf5327
4 zmienionych plików z 35 dodań i 13 usunięć

Wyświetl plik

@ -6,7 +6,7 @@ from funkwhale_api.factories import registry, NoUpdateOnCreate
from funkwhale_api.federation import factories as federation_factories
from funkwhale_api.music import licenses
from funkwhale_api.tags import models as tags_models
from funkwhale_api.tags import factories as tags_factories
from funkwhale_api.users import factories as users_factories
SAMPLES_PATH = os.path.join(
@ -56,7 +56,9 @@ class LicenseFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
@registry.register
class ArtistFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
class ArtistFactory(
tags_factories.TaggableFactory, NoUpdateOnCreate, factory.django.DjangoModelFactory
):
name = factory.Faker("name")
mbid = factory.Faker("uuid4")
fid = factory.Faker("federation_url")
@ -73,7 +75,9 @@ class ArtistFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
@registry.register
class AlbumFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
class AlbumFactory(
tags_factories.TaggableFactory, NoUpdateOnCreate, factory.django.DjangoModelFactory
):
title = factory.Faker("sentence", nb_words=3)
mbid = factory.Faker("uuid4")
release_date = factory.Faker("date_object")
@ -97,7 +101,9 @@ class AlbumFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
@registry.register
class TrackFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
class TrackFactory(
tags_factories.TaggableFactory, NoUpdateOnCreate, factory.django.DjangoModelFactory
):
fid = factory.Faker("federation_url")
title = factory.Faker("sentence", nb_words=3)
mbid = factory.Faker("uuid4")
@ -127,15 +133,6 @@ class TrackFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
self.license = LicenseFactory(code=extracted)
self.save()
@factory.post_generation
def set_tags(self, create, extracted, **kwargs):
if not create:
# Simple build, do nothing.
return
if extracted:
tags_models.set_tags(self, *extracted)
@registry.register
class UploadFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):

Wyświetl plik

@ -201,6 +201,8 @@ class Artist(APIModelMixin):
on_delete=models.SET_NULL,
related_name="attributed_artists",
)
tagged_items = GenericRelation(tags_models.TaggedItem)
api = musicbrainz.api.artists
objects = ArtistQuerySet.as_manager()
@ -279,6 +281,8 @@ class Album(APIModelMixin):
on_delete=models.SET_NULL,
related_name="attributed_albums",
)
tagged_items = GenericRelation(tags_models.TaggedItem)
api_includes = ["artist-credits", "recordings", "media", "release-groups"]
api = musicbrainz.api.releases
federation_namespace = "albums"

Wyświetl plik

@ -2,6 +2,8 @@ import factory
from funkwhale_api.factories import registry, NoUpdateOnCreate
from . import models
@registry.register
class TagFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
@ -18,3 +20,14 @@ class TaggedItemFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
class Meta:
model = "tags.TaggedItem"
class TaggableFactory(factory.django.DjangoModelFactory):
@factory.post_generation
def set_tags(self, create, extracted, **kwargs):
if not create:
# Simple build, do nothing.
return
if extracted:
models.set_tags(self, *extracted)

Wyświetl plik

@ -51,3 +51,11 @@ def test_set_tags(factories, existing, given, expected):
for tag in expected:
match = tagged_items.get(tag__name=tag)
assert match.content_object == obj
@pytest.mark.parametrize("factory_name", ["music.Track", "music.Album", "music.Artist"])
def test_models_that_support_tags(factories, factory_name):
tags = ["tag1", "tag2"]
obj = factories[factory_name](set_tags=tags)
assert sorted(obj.tagged_items.all().values_list("tag__name", flat=True)) == tags