From dcb66690bb5baedc1e21c0418c09590b8a58af81 Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Wed, 13 Dec 2017 23:36:10 +0100 Subject: [PATCH] Fixed #7: store release-group id on Album --- CHANGELOG | 8 ++++ .../migrations/0013_auto_20171213_2211.py | 28 +++++++++++++ api/funkwhale_api/music/models.py | 7 +++- api/funkwhale_api/music/tests/factories.py | 1 + api/funkwhale_api/music/tests/test_models.py | 41 +++++++++++++++++++ dev.yml | 12 ++++-- 6 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 CHANGELOG create mode 100644 api/funkwhale_api/music/migrations/0013_auto_20171213_2211.py create mode 100644 api/funkwhale_api/music/tests/test_models.py diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 00000000..48346b64 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,8 @@ +Changelog +========= + + +0.2.4 (unreleased) +------------------ + +Models: now store relese group mbid on Album model (#7) diff --git a/api/funkwhale_api/music/migrations/0013_auto_20171213_2211.py b/api/funkwhale_api/music/migrations/0013_auto_20171213_2211.py new file mode 100644 index 00000000..00ccbb62 --- /dev/null +++ b/api/funkwhale_api/music/migrations/0013_auto_20171213_2211.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2017-12-13 22:11 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('music', '0012_auto_20161122_1905'), + ] + + operations = [ + migrations.AlterModelOptions( + name='importjob', + options={'ordering': ('id',)}, + ), + migrations.AlterModelOptions( + name='track', + options={'ordering': ['album', 'position']}, + ), + migrations.AddField( + model_name='album', + name='release_group_id', + field=models.UUIDField(blank=True, null=True), + ), + ] diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py index 596f890b..d87da1eb 100644 --- a/api/funkwhale_api/music/models.py +++ b/api/funkwhale_api/music/models.py @@ -110,13 +110,14 @@ class Album(APIModelMixin): title = models.CharField(max_length=255) artist = models.ForeignKey(Artist, related_name='albums') release_date = models.DateField(null=True) + release_group_id = models.UUIDField(null=True, blank=True) cover = VersatileImageField(upload_to='albums/covers/%Y/%m/%d', null=True, blank=True) TYPE_CHOICES = ( ('album', 'Album'), ) type = models.CharField(choices=TYPE_CHOICES, max_length=30, default='album') - api_includes = ['artist-credits', 'recordings', 'media'] + api_includes = ['artist-credits', 'recordings', 'media', 'release-groups'] api = musicbrainz.api.releases musicbrainz_model = 'release' musicbrainz_mapping = { @@ -127,6 +128,10 @@ class Album(APIModelMixin): 'musicbrainz_field_name': 'release-list', 'converter': lambda v: int(v[0]['medium-list'][0]['position']), }, + 'release_group_id': { + 'musicbrainz_field_name': 'release-group', + 'converter': lambda v: v['id'], + }, 'title': { 'musicbrainz_field_name': 'title', }, diff --git a/api/funkwhale_api/music/tests/factories.py b/api/funkwhale_api/music/tests/factories.py index ea680b3b..d3cd625b 100644 --- a/api/funkwhale_api/music/tests/factories.py +++ b/api/funkwhale_api/music/tests/factories.py @@ -18,6 +18,7 @@ class AlbumFactory(factory.django.DjangoModelFactory): release_date = factory.Faker('date') cover = factory.django.ImageField() artist = factory.SubFactory(ArtistFactory) + release_group_id = factory.Faker('uuid4') class Meta: model = 'music.Album' diff --git a/api/funkwhale_api/music/tests/test_models.py b/api/funkwhale_api/music/tests/test_models.py new file mode 100644 index 00000000..a652676d --- /dev/null +++ b/api/funkwhale_api/music/tests/test_models.py @@ -0,0 +1,41 @@ +import pytest + +from funkwhale_api.music import models +from funkwhale_api.music import importers +from . import factories + + +def test_can_store_release_group_id_on_album(db): + album = factories.AlbumFactory() + assert album.release_group_id is not None + + +def test_import_album_stores_release_group(db): + + album_data = { + "artist-credit": [ + { + "artist": { + "disambiguation": "George Shaw", + "id": "62c3befb-6366-4585-b256-809472333801", + "name": "Adhesive Wombat", + "sort-name": "Wombat, Adhesive" + } + } + ], + "artist-credit-phrase": "Adhesive Wombat", + "country": "XW", + "date": "2013-06-05", + "id": "a50d2a81-2a50-484d-9cb4-b9f6833f583e", + "status": "Official", + "title": "Marsupial Madness", + 'release-group': {'id': '447b4979-2178-405c-bfe6-46bf0b09e6c7'} + } + artist = factories.ArtistFactory( + mbid=album_data['artist-credit'][0]['artist']['id'] + ) + cleaned_data = models.Album.clean_musicbrainz_data(album_data) + album = importers.load(models.Album, cleaned_data, album_data, import_hooks=[]) + + assert album.release_group_id == album_data['release-group']['id'] + assert album.artist == artist diff --git a/dev.yml b/dev.yml index 54bc62d8..c71298cf 100644 --- a/dev.yml +++ b/dev.yml @@ -33,9 +33,12 @@ services: - redis command: python manage.py celery worker environment: - - C_FORCE_ROOT=true - - "DATABASE_URL=postgresql://postgres@postgres/postgres" - - "CACHE_URL=redis://redis:6379/0" + - "DJANGO_ALLOWED_HOSTS=localhost" + - "DJANGO_SETTINGS_MODULE=config.settings.local" + - "DJANGO_SECRET_KEY=dev" + - C_FORCE_ROOT=true + - "DATABASE_URL=postgresql://postgres@postgres/postgres" + - "CACHE_URL=redis://redis:6379/0" volumes: - ./api:/app - ./data/music:/music @@ -49,6 +52,9 @@ services: - ./api:/app - ./data/music:/music environment: + - "DJANGO_ALLOWED_HOSTS=localhost" + - "DJANGO_SETTINGS_MODULE=config.settings.local" + - "DJANGO_SECRET_KEY=dev" - "DATABASE_URL=postgresql://postgres@postgres/postgres" - "CACHE_URL=redis://redis:6379/0" ports: -- GitLab