Merge branch '432-tags-albums-artists' into 'develop'
See #432: added model tagging logic on artists and albums See merge request funkwhale/funkwhale!829
This commit is contained in:
commit
997dcf5327
|
@ -6,7 +6,7 @@ from funkwhale_api.factories import registry, NoUpdateOnCreate
|
||||||
|
|
||||||
from funkwhale_api.federation import factories as federation_factories
|
from funkwhale_api.federation import factories as federation_factories
|
||||||
from funkwhale_api.music import licenses
|
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
|
from funkwhale_api.users import factories as users_factories
|
||||||
|
|
||||||
SAMPLES_PATH = os.path.join(
|
SAMPLES_PATH = os.path.join(
|
||||||
|
@ -56,7 +56,9 @@ class LicenseFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
||||||
|
|
||||||
|
|
||||||
@registry.register
|
@registry.register
|
||||||
class ArtistFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
class ArtistFactory(
|
||||||
|
tags_factories.TaggableFactory, NoUpdateOnCreate, factory.django.DjangoModelFactory
|
||||||
|
):
|
||||||
name = factory.Faker("name")
|
name = factory.Faker("name")
|
||||||
mbid = factory.Faker("uuid4")
|
mbid = factory.Faker("uuid4")
|
||||||
fid = factory.Faker("federation_url")
|
fid = factory.Faker("federation_url")
|
||||||
|
@ -73,7 +75,9 @@ class ArtistFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
||||||
|
|
||||||
|
|
||||||
@registry.register
|
@registry.register
|
||||||
class AlbumFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
class AlbumFactory(
|
||||||
|
tags_factories.TaggableFactory, NoUpdateOnCreate, factory.django.DjangoModelFactory
|
||||||
|
):
|
||||||
title = factory.Faker("sentence", nb_words=3)
|
title = factory.Faker("sentence", nb_words=3)
|
||||||
mbid = factory.Faker("uuid4")
|
mbid = factory.Faker("uuid4")
|
||||||
release_date = factory.Faker("date_object")
|
release_date = factory.Faker("date_object")
|
||||||
|
@ -97,7 +101,9 @@ class AlbumFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
||||||
|
|
||||||
|
|
||||||
@registry.register
|
@registry.register
|
||||||
class TrackFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
class TrackFactory(
|
||||||
|
tags_factories.TaggableFactory, NoUpdateOnCreate, factory.django.DjangoModelFactory
|
||||||
|
):
|
||||||
fid = factory.Faker("federation_url")
|
fid = factory.Faker("federation_url")
|
||||||
title = factory.Faker("sentence", nb_words=3)
|
title = factory.Faker("sentence", nb_words=3)
|
||||||
mbid = factory.Faker("uuid4")
|
mbid = factory.Faker("uuid4")
|
||||||
|
@ -127,15 +133,6 @@ class TrackFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
||||||
self.license = LicenseFactory(code=extracted)
|
self.license = LicenseFactory(code=extracted)
|
||||||
self.save()
|
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
|
@registry.register
|
||||||
class UploadFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
class UploadFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
||||||
|
|
|
@ -201,6 +201,8 @@ class Artist(APIModelMixin):
|
||||||
on_delete=models.SET_NULL,
|
on_delete=models.SET_NULL,
|
||||||
related_name="attributed_artists",
|
related_name="attributed_artists",
|
||||||
)
|
)
|
||||||
|
tagged_items = GenericRelation(tags_models.TaggedItem)
|
||||||
|
|
||||||
api = musicbrainz.api.artists
|
api = musicbrainz.api.artists
|
||||||
objects = ArtistQuerySet.as_manager()
|
objects = ArtistQuerySet.as_manager()
|
||||||
|
|
||||||
|
@ -279,6 +281,8 @@ class Album(APIModelMixin):
|
||||||
on_delete=models.SET_NULL,
|
on_delete=models.SET_NULL,
|
||||||
related_name="attributed_albums",
|
related_name="attributed_albums",
|
||||||
)
|
)
|
||||||
|
tagged_items = GenericRelation(tags_models.TaggedItem)
|
||||||
|
|
||||||
api_includes = ["artist-credits", "recordings", "media", "release-groups"]
|
api_includes = ["artist-credits", "recordings", "media", "release-groups"]
|
||||||
api = musicbrainz.api.releases
|
api = musicbrainz.api.releases
|
||||||
federation_namespace = "albums"
|
federation_namespace = "albums"
|
||||||
|
|
|
@ -2,6 +2,8 @@ import factory
|
||||||
|
|
||||||
from funkwhale_api.factories import registry, NoUpdateOnCreate
|
from funkwhale_api.factories import registry, NoUpdateOnCreate
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
@registry.register
|
@registry.register
|
||||||
class TagFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
class TagFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
||||||
|
@ -18,3 +20,14 @@ class TaggedItemFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = "tags.TaggedItem"
|
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)
|
||||||
|
|
|
@ -51,3 +51,11 @@ def test_set_tags(factories, existing, given, expected):
|
||||||
for tag in expected:
|
for tag in expected:
|
||||||
match = tagged_items.get(tag__name=tag)
|
match = tagged_items.get(tag__name=tag)
|
||||||
assert match.content_object == obj
|
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
|
||||||
|
|
Loading…
Reference in New Issue