Configurable license.
authorRadek Czajka <rczajka@rczajka.pl>
Sat, 23 May 2020 23:47:07 +0000 (01:47 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Sat, 23 May 2020 23:47:07 +0000 (01:47 +0200)
src/archive/migrations/0009_auto_20200524_0139.py [new file with mode: 0644]
src/archive/migrations/0010_populate_license.py [new file with mode: 0644]
src/archive/models.py
src/archive/settings.py
src/youtube/models.py

diff --git a/src/archive/migrations/0009_auto_20200524_0139.py b/src/archive/migrations/0009_auto_20200524_0139.py
new file mode 100644 (file)
index 0000000..4d01e36
--- /dev/null
@@ -0,0 +1,27 @@
+# Generated by Django 3.0.4 on 2020-05-24 01:39
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('archive', '0008_remove_audiobook_youtube_file'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='License',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('uri', models.CharField(max_length=255, unique=True)),
+                ('name', models.CharField(max_length=255)),
+            ],
+        ),
+        migrations.AddField(
+            model_name='audiobook',
+            name='license',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='archive.License', verbose_name='license'),
+        ),
+    ]
diff --git a/src/archive/migrations/0010_populate_license.py b/src/archive/migrations/0010_populate_license.py
new file mode 100644 (file)
index 0000000..dc59bdc
--- /dev/null
@@ -0,0 +1,34 @@
+# Generated by Django 3.0.4 on 2020-05-24 01:40
+
+import json
+from django.db import migrations
+
+
+def populate_license(apps, schema_editor):
+    License = apps.get_model('archive.License')
+    Audiobook = apps.get_model('archive.Audiobook')
+    licenses = {}
+    for a in Audiobook.objects.all():
+        if a.mp3_tags:
+            tags = json.loads(a.mp3_tags)
+            uri = tags.get('license')
+            if not uri:
+                continue
+            if uri not in licenses:
+                licenses[uri], created = License.objects.get_or_create(uri=uri, defaults={"name": "?"})
+            a.license = licenses[uri]
+            a.save()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('archive', '0009_auto_20200524_0139'),
+    ]
+
+    operations = [
+        migrations.RunPython(
+            populate_license,
+            migrations.RunPython.noop
+        )
+    ]
index d76ed99..d8b85ad 100644 (file)
@@ -8,10 +8,15 @@ from django.utils.translation import gettext_lazy as _
 from django_pglocks import advisory_lock
 import requests
 from archive.constants import status
 from django_pglocks import advisory_lock
 import requests
 from archive.constants import status
-from archive.settings import FILES_SAVE_PATH, ADVERT, LICENSE, ORGANIZATION, PROJECT
+from archive.settings import FILES_SAVE_PATH, ADVERT, ORGANIZATION, PROJECT
 from archive.utils import OverwriteStorage, sha1_file
 
 
 from archive.utils import OverwriteStorage, sha1_file
 
 
+class License(models.Model):
+    uri = models.CharField(max_length=255, unique=True)
+    name = models.CharField(max_length=255)
+
+
 class Project(models.Model):
     """ an audiobook project, needed for specyfing sponsors """
 
 class Project(models.Model):
     """ an audiobook project, needed for specyfing sponsors """
 
@@ -68,6 +73,7 @@ class Audiobook(models.Model):
     url = models.URLField(max_length=255, verbose_name=_('book url'))
     translator = models.CharField(max_length=255, null=True, blank=True, verbose_name=_('translator'))
     modified = models.DateTimeField(null=True, editable=False)
     url = models.URLField(max_length=255, verbose_name=_('book url'))
     translator = models.CharField(max_length=255, null=True, blank=True, verbose_name=_('translator'))
     modified = models.DateTimeField(null=True, editable=False)
+    license = models.ForeignKey(License, models.PROTECT, null=True, blank=True, verbose_name=_('license'))
 
     # publishing process
     mp3_status = models.SmallIntegerField(null=True, editable=False, choices=status.choices)
 
     # publishing process
     mp3_status = models.SmallIntegerField(null=True, editable=False, choices=status.choices)
@@ -124,7 +130,7 @@ class Audiobook(models.Model):
             title += ' (tłum. %s)' % self.translator
 
         copyright = "%s %s. Licensed to the public under %s verify at %s" % (
             title += ' (tłum. %s)' % self.translator
 
         copyright = "%s %s. Licensed to the public under %s verify at %s" % (
-                self.date, ORGANIZATION, LICENSE, self.url)
+                self.date, ORGANIZATION, self.license.uri, self.url)
 
         comment = "\n".join((
             self.project.get_description(),
 
         comment = "\n".join((
             self.project.get_description(),
@@ -142,7 +148,7 @@ class Audiobook(models.Model):
             'date': self.date,
             'genre': 'Speech',
             'language': 'pol',
             'date': self.date,
             'genre': 'Speech',
             'language': 'pol',
-            'license': LICENSE,
+            'license': self.license.uri,
             'organization': ORGANIZATION,
             'title': title,
             'project': self.project.name,
             'organization': ORGANIZATION,
             'title': title,
             'project': self.project.name,
index 91921a8..77a8cbe 100644 (file)
@@ -49,18 +49,6 @@ except AttributeError:
     PROJECT = 'Wolne Lektury'
 
 
     PROJECT = 'Wolne Lektury'
 
 
-LICENSE = getattr(
-    settings,
-    'ARCHIVE_LICENSE',
-    'http://artlibre.org/licence/lal/pl/'
-)
-
-LICENSE_NAME = getattr(
-    settings, 'ARCHIVE_LICENSE_NAME',
-    'Licencja Wolnej Sztuki 1.3'
-)
-
-
 try:
     ORGANIZATION = settings.ARCHIVE_ORGANIZATION
 except AttributeError:
 try:
     ORGANIZATION = settings.ARCHIVE_ORGANIZATION
 except AttributeError:
index 027befd..39a1d2d 100644 (file)
@@ -5,7 +5,6 @@ from django.db import models
 from django.utils.translation import gettext_lazy as _
 from django.template import Template, Context
 from apiclient import youtube_call
 from django.utils.translation import gettext_lazy as _
 from django.template import Template, Context
 from apiclient import youtube_call
-from archive.settings import LICENSE, LICENSE_NAME
 from .utils import (
     concat_audio,
     concat_videos,
 from .utils import (
     concat_audio,
     concat_videos,
@@ -20,6 +19,9 @@ from .utils import (
 from .thumbnail import create_thumbnail
 
 
 from .thumbnail import create_thumbnail
 
 
+YOUTUBE_TITLE_LIMIT = 100
+
+
 class YouTube(models.Model):
     title_template = models.CharField(max_length=1024, blank=True)
     description_template = models.TextField(blank=True)
 class YouTube(models.Model):
     title_template = models.CharField(max_length=1024, blank=True)
     description_template = models.TextField(blank=True)
@@ -46,15 +48,13 @@ class YouTube(models.Model):
     def get_context(self, audiobook):
         return Context(dict(
             audiobook=audiobook,
     def get_context(self, audiobook):
         return Context(dict(
             audiobook=audiobook,
-            LICENSE=LICENSE,
-            LICENSE_NAME=LICENSE_NAME,
         ))
 
     def get_description(self, audiobook):
         return Template(self.description_template).render(self.get_context(audiobook))
 
     def get_title(self, audiobook):
         ))
 
     def get_description(self, audiobook):
         return Template(self.description_template).render(self.get_context(audiobook))
 
     def get_title(self, audiobook):
-        return Template(self.title_template).render(self.get_context(audiobook))
+        return Template(self.title_template).render(self.get_context(audiobook))[:YOUTUBE_TITLE_LIMIT]
 
     def get_data(self, audiobook):
         return dict(
 
     def get_data(self, audiobook):
         return dict(