Genre- and collection-specific thumbnails.
[audio.git] / src / youtube / migrations / 0012_move_thumbnail_definitions.py
diff --git a/src/youtube/migrations/0012_move_thumbnail_definitions.py b/src/youtube/migrations/0012_move_thumbnail_definitions.py
new file mode 100644 (file)
index 0000000..a54cf12
--- /dev/null
@@ -0,0 +1,52 @@
+# Generated by Django 3.0.6 on 2020-07-03 17:18
+
+from django.db import migrations
+import yaml
+
+
+def generate_versions(version_lists):
+    if not version_lists:
+        yield []
+    else:
+        for subversion in generate_versions(version_lists[1:]):
+            for version in version_lists[0]:
+                yield [version] + subversion
+
+
+def move_definitions(apps, schema_editor):
+    YouTube = apps.get_model('youtube', 'YouTube')
+    ThumbnailTemplate = apps.get_model('youtube', 'ThumbnailTemplate')
+    order = 1
+    for youtube in YouTube.objects.all():
+        src_def = yaml.load(youtube.thumbnail_definition)
+        version_lists = [
+            box['versions']
+            for box in src_def['boxes']
+        ]
+        for version in generate_versions(version_lists):
+            defn = yaml.dump(
+                {"boxes": version},
+                allow_unicode=True,
+                default_flow_style=False
+            )
+            ThumbnailTemplate.objects.create(
+                order=order,
+                is_active=True,
+                background=youtube.thumbnail_template,
+                definition=defn,
+            )
+            order += 1
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('youtube', '0011_thumbnailtemplate'),
+    ]
+
+    operations = [
+        migrations.RunPython(
+            move_definitions,
+            migrations.RunPython.noop
+        )
+    ]