Seminar | models | Pridan nahled titulky cisla.
This commit is contained in:
parent
374a97e28a
commit
03696d79ab
2 changed files with 67 additions and 2 deletions
24
seminar/migrations/0080_auto_20200408_2221.py
Normal file
24
seminar/migrations/0080_auto_20200408_2221.py
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# Generated by Django 2.2.9 on 2020-04-08 20:21
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import seminar.models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('seminar', '0079_clanek_resitelsky'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='cislo',
|
||||||
|
name='titulka_nahled',
|
||||||
|
field=models.ImageField(blank=True, help_text='Obrázek titulní strany, generuje se automaticky', null=True, upload_to='', verbose_name='Obrázek titulní strany'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='cislo',
|
||||||
|
name='pdf',
|
||||||
|
field=models.FileField(blank=True, help_text='PDF čísla, které si mohou řešitelé stáhnout', null=True, upload_to=seminar.models.cislo_pdf_filename, verbose_name='pdf'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,6 +1,9 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
|
import subprocess
|
||||||
|
import pathlib
|
||||||
|
import tempfile
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib import auth
|
from django.contrib import auth
|
||||||
|
@ -27,6 +30,7 @@ from unidecode import unidecode # Používám pro získání ID odkazu (ještě
|
||||||
|
|
||||||
from polymorphic.models import PolymorphicModel
|
from polymorphic.models import PolymorphicModel
|
||||||
|
|
||||||
|
|
||||||
class SeminarModelBase(models.Model):
|
class SeminarModelBase(models.Model):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -407,7 +411,11 @@ class Rocnik(SeminarModelBase):
|
||||||
|
|
||||||
def cislo_pdf_filename(self, filename):
|
def cislo_pdf_filename(self, filename):
|
||||||
rocnik = str(self.rocnik.rocnik)
|
rocnik = str(self.rocnik.rocnik)
|
||||||
return os.path.join('cislo', 'pdf', rocnik, '{}-{}.pdf'.format(rocnik, self.poradi))
|
return pathlib.Path('cislo', 'pdf', rocnik, '{}-{}.pdf'.format(rocnik, self.poradi))
|
||||||
|
|
||||||
|
def cislo_png_filename(self, filename):
|
||||||
|
rocnik = str(self.rocnik.rocnik)
|
||||||
|
return pathlib.Path('cislo', 'png', rocnik, '{}-{}.png'.format(rocnik, self.poradi))
|
||||||
|
|
||||||
@reversion.register(ignore_duplicates=True)
|
@reversion.register(ignore_duplicates=True)
|
||||||
class Cislo(SeminarModelBase):
|
class Cislo(SeminarModelBase):
|
||||||
|
@ -451,7 +459,10 @@ class Cislo(SeminarModelBase):
|
||||||
help_text='Neveřejná poznámka k číslu (plain text)')
|
help_text='Neveřejná poznámka k číslu (plain text)')
|
||||||
|
|
||||||
pdf = models.FileField('pdf', upload_to=cislo_pdf_filename, null=True, blank=True,
|
pdf = models.FileField('pdf', upload_to=cislo_pdf_filename, null=True, blank=True,
|
||||||
help_text='Pdf čísla, které si mohou řešitelé stáhnout')
|
help_text='PDF čísla, které si mohou řešitelé stáhnout')
|
||||||
|
|
||||||
|
titulka_nahled = models.ImageField('Obrázek titulní strany', upload_to=cislo_png_filename, null=True, blank=True,
|
||||||
|
help_text='Obrázek titulní strany, generuje se automaticky')
|
||||||
|
|
||||||
# má OneToOneField s:
|
# má OneToOneField s:
|
||||||
# CisloNode
|
# CisloNode
|
||||||
|
@ -488,6 +499,35 @@ class Cislo(SeminarModelBase):
|
||||||
return None
|
return None
|
||||||
return cs[i]
|
return cs[i]
|
||||||
|
|
||||||
|
def vygeneruj_nahled(self):
|
||||||
|
VYSKA = 594
|
||||||
|
sirka = int(VYSKA*210/297)
|
||||||
|
if not self.pdf:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
# Pokud obrázek neexistuje nebo není aktuální, vytvoř jej
|
||||||
|
if not self.titulka_nahled or os.path.getmtime(self.titulka_nahled.path) < os.path.getmtime(self.pdf.path):
|
||||||
|
png_filename = pathlib.Path(tempfile.mkdtemp(), 'nahled.png')
|
||||||
|
|
||||||
|
subprocess.call([
|
||||||
|
"convert",
|
||||||
|
"-density", "300x300",
|
||||||
|
"-geometry", "{}x{}".format(VYSKA, sirka),
|
||||||
|
"-background", "white",
|
||||||
|
"-flatten",
|
||||||
|
"{}[0]".format(self.pdf.path), # titulní strana
|
||||||
|
png_filename
|
||||||
|
])
|
||||||
|
|
||||||
|
with open(png_filename,'rb') as f:
|
||||||
|
self.titulka_nahled.save('',f,True)
|
||||||
|
|
||||||
|
png_filename.unlink()
|
||||||
|
png_filename.parent.rmdir()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, rocnik, cislo):
|
def get(cls, rocnik, cislo):
|
||||||
try:
|
try:
|
||||||
|
@ -499,6 +539,7 @@ class Cislo(SeminarModelBase):
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
self.vygeneruj_nahled()
|
||||||
# *Node.save() aktualizuje název *Nodu.
|
# *Node.save() aktualizuje název *Nodu.
|
||||||
try:
|
try:
|
||||||
self.cislonode.save()
|
self.cislonode.save()
|
||||||
|
|
Loading…
Reference in a new issue