--- /dev/null
+# Generated by Django 4.0.8 on 2026-04-24 11:40
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('catalogue', '0056_book_isbn_mp3'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='book',
+ name='can_sell_mp3',
+ field=models.BooleanField(default=True, verbose_name='do sprzedaży mp3'),
+ ),
+ ]
from random import randint
import os.path
import re
+import requests
from slugify import slugify
from sortify import sortify
from urllib.request import urlretrieve
preview_key = models.CharField(max_length=32, blank=True, null=True)
findable = models.BooleanField('wyszukiwalna', default=True, db_index=True)
can_sell = models.BooleanField('do sprzedaży', default=True)
+ can_sell_mp3 = models.BooleanField('do sprzedaży mp3', default=True)
isbn_mp3 = models.CharField('ISBN audiobooka', max_length=32, blank=True)
# files generated during publication
narrators.append(t)
self.narrators.set(narrators)
+ def update_can_sell_mp3(self):
+ ret = True
+ for child in self.get_children():
+ child.update_can_sell_mp3()
+ if not child.can_sell_mp3:
+ ret = False
+ if self.has_mp3_file():
+ audio_items = requests.get(f'https://audio.wolnelektury.pl/archive/book/{self.slug}.json').json()['items']
+ if not all(x['project']['can_sell'] for x in audio_items):
+ ret = False
+ self.can_sell_audio = ret
+
@classmethod
@transaction.atomic
def repopulate_ancestors(cls):
for c in b.get_children():
fs.extend(get_for_single(c))
return fs
- return get_for_single(b)
+ return get_for_single(obj)
def get_price(self, obj):
- duration = obj.get_audiobooks(True)[2]
+ duration = obj.get_audiobooks(True, True)[2]
if not duration:
return None
duration /= 60
return ctx
def get_queryset(self):
- return Book.objects.exclude(isbn_mp3='')
+ return Book.objects.filter(parent=None, can_sell_mp3=True).exclude(isbn_mp3='')