Skip to content
Snippets Groups Projects
Select Git revision
  • develop default protected
  • 284-browse-redesign
  • 334-don-t-display-an-empty-page-browser
  • 316-ultrasonic
  • ButterflyOfFire/funkwhale-patch-1
  • master
  • 303-json-ld
  • 278-search-browse
  • 0.15
  • 0.14.2
  • 0.14.1
  • 0.14
  • 0.13
  • 0.12
  • 0.11
  • 0.10
  • 0.9.1
  • 0.9
  • 0.8
  • 0.7
  • 0.6.1
  • 0.6
  • 0.5.4
  • 0.5.3
  • 0.5.2
  • 0.5.1
  • 0.5
  • 0.4
28 results

tasks.py

Blame
  • Forked from funkwhale / funkwhale
    7895 commits behind the upstream repository.
    tasks.py 1.44 KiB
    import os
    import datetime
    from django.core.files import File
    
    from funkwhale_api.taskapp import celery
    from funkwhale_api.music import models, metadata
    
    
    @celery.app.task(name='audiofile.from_path')
    def from_path(path):
        data = metadata.Metadata(path)
        artist = models.Artist.objects.get_or_create(
            name__iexact=data.get('artist'),
            defaults={
                'name': data.get('artist'),
                'mbid': data.get('musicbrainz_artistid', None),
    
            },
        )[0]
    
        release_date = data.get('date', default=None)
        album = models.Album.objects.get_or_create(
            title__iexact=data.get('album'),
            artist=artist,
            defaults={
                'title': data.get('album'),
                'release_date': release_date,
                'mbid': data.get('musicbrainz_albumid', None),
            },
        )[0]
    
        position = data.get('track_number', default=None)
        track = models.Track.objects.get_or_create(
            title__iexact=data.get('title'),
            album=album,
            defaults={
                'title': data.get('title'),
                'position': position,
                'mbid': data.get('musicbrainz_recordingid', None),
            },
        )[0]
    
        if track.files.count() > 0:
            raise ValueError('File already exists for track {}'.format(track.pk))
    
        track_file = models.TrackFile(track=track)
        track_file.audio_file.save(
            os.path.basename(path),
            File(open(path, 'rb'))
        )
        track_file.save()
    
        return track_file