Fixed #7: store release-group id on Album
This commit is contained in:
parent
4c9469ac54
commit
dcb66690bb
|
@ -0,0 +1,8 @@
|
||||||
|
Changelog
|
||||||
|
=========
|
||||||
|
|
||||||
|
|
||||||
|
0.2.4 (unreleased)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Models: now store relese group mbid on Album model (#7)
|
|
@ -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),
|
||||||
|
),
|
||||||
|
]
|
|
@ -110,13 +110,14 @@ class Album(APIModelMixin):
|
||||||
title = models.CharField(max_length=255)
|
title = models.CharField(max_length=255)
|
||||||
artist = models.ForeignKey(Artist, related_name='albums')
|
artist = models.ForeignKey(Artist, related_name='albums')
|
||||||
release_date = models.DateField(null=True)
|
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)
|
cover = VersatileImageField(upload_to='albums/covers/%Y/%m/%d', null=True, blank=True)
|
||||||
TYPE_CHOICES = (
|
TYPE_CHOICES = (
|
||||||
('album', 'Album'),
|
('album', 'Album'),
|
||||||
)
|
)
|
||||||
type = models.CharField(choices=TYPE_CHOICES, max_length=30, default='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
|
api = musicbrainz.api.releases
|
||||||
musicbrainz_model = 'release'
|
musicbrainz_model = 'release'
|
||||||
musicbrainz_mapping = {
|
musicbrainz_mapping = {
|
||||||
|
@ -127,6 +128,10 @@ class Album(APIModelMixin):
|
||||||
'musicbrainz_field_name': 'release-list',
|
'musicbrainz_field_name': 'release-list',
|
||||||
'converter': lambda v: int(v[0]['medium-list'][0]['position']),
|
'converter': lambda v: int(v[0]['medium-list'][0]['position']),
|
||||||
},
|
},
|
||||||
|
'release_group_id': {
|
||||||
|
'musicbrainz_field_name': 'release-group',
|
||||||
|
'converter': lambda v: v['id'],
|
||||||
|
},
|
||||||
'title': {
|
'title': {
|
||||||
'musicbrainz_field_name': 'title',
|
'musicbrainz_field_name': 'title',
|
||||||
},
|
},
|
||||||
|
|
|
@ -18,6 +18,7 @@ class AlbumFactory(factory.django.DjangoModelFactory):
|
||||||
release_date = factory.Faker('date')
|
release_date = factory.Faker('date')
|
||||||
cover = factory.django.ImageField()
|
cover = factory.django.ImageField()
|
||||||
artist = factory.SubFactory(ArtistFactory)
|
artist = factory.SubFactory(ArtistFactory)
|
||||||
|
release_group_id = factory.Faker('uuid4')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = 'music.Album'
|
model = 'music.Album'
|
||||||
|
|
|
@ -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
|
12
dev.yml
12
dev.yml
|
@ -33,9 +33,12 @@ services:
|
||||||
- redis
|
- redis
|
||||||
command: python manage.py celery worker
|
command: python manage.py celery worker
|
||||||
environment:
|
environment:
|
||||||
- C_FORCE_ROOT=true
|
- "DJANGO_ALLOWED_HOSTS=localhost"
|
||||||
- "DATABASE_URL=postgresql://postgres@postgres/postgres"
|
- "DJANGO_SETTINGS_MODULE=config.settings.local"
|
||||||
- "CACHE_URL=redis://redis:6379/0"
|
- "DJANGO_SECRET_KEY=dev"
|
||||||
|
- C_FORCE_ROOT=true
|
||||||
|
- "DATABASE_URL=postgresql://postgres@postgres/postgres"
|
||||||
|
- "CACHE_URL=redis://redis:6379/0"
|
||||||
volumes:
|
volumes:
|
||||||
- ./api:/app
|
- ./api:/app
|
||||||
- ./data/music:/music
|
- ./data/music:/music
|
||||||
|
@ -49,6 +52,9 @@ services:
|
||||||
- ./api:/app
|
- ./api:/app
|
||||||
- ./data/music:/music
|
- ./data/music:/music
|
||||||
environment:
|
environment:
|
||||||
|
- "DJANGO_ALLOWED_HOSTS=localhost"
|
||||||
|
- "DJANGO_SETTINGS_MODULE=config.settings.local"
|
||||||
|
- "DJANGO_SECRET_KEY=dev"
|
||||||
- "DATABASE_URL=postgresql://postgres@postgres/postgres"
|
- "DATABASE_URL=postgresql://postgres@postgres/postgres"
|
||||||
- "CACHE_URL=redis://redis:6379/0"
|
- "CACHE_URL=redis://redis:6379/0"
|
||||||
ports:
|
ports:
|
||||||
|
|
Loading…
Reference in New Issue