diff --git a/api/funkwhale_api/music/migrations/0043_album_cover_attachment.py b/api/funkwhale_api/music/migrations/0043_album_cover_attachment.py index 17eda6b72..441d308d9 100644 --- a/api/funkwhale_api/music/migrations/0043_album_cover_attachment.py +++ b/api/funkwhale_api/music/migrations/0043_album_cover_attachment.py @@ -13,17 +13,24 @@ def create_attachments(apps, schema_editor): if path.lower().endswith('.png'): return "image/png" return "image/jpeg" - - for album in Album.objects.filter(attachment_cover=None).exclude(cover="").exclude(cover=None): - try: - album_attachment_mapping[album] = Attachment( - file=album.cover, - size=album.cover.size, - mimetype=get_mimetype(album.cover.path), - ) - except FileNotFoundError: - print('Skipping missing cover file {}'.format(album.cover.path)) - + qs = Album.objects.filter(attachment_cover=None).exclude(cover="").exclude(cover=None) + total = qs.count() + print('Creating attachments for {} album covers, this may take a while…'.format(total)) + from django.core.files.storage import FileSystemStorage + for i, album in enumerate(qs): + if isinstance(album.cover.storage._wrapped, FileSystemStorage): + try: + size = album.cover.size + except FileNotFoundError: + # can occur when file isn't found on disk or S3 + print(" Warning: cover file wasn't found in storage: {}".format(e.__class__)) + size = None + album_attachment_mapping[album] = Attachment( + file=album.cover, + size=None, + mimetype=get_mimetype(album.cover.name), + ) + print('Commiting changes…') Attachment.objects.bulk_create(album_attachment_mapping.values(), batch_size=2000) # map each attachment to the corresponding album # and bulk save