models.py: add catalog pdf path helpers
This commit is contained in:
@ -1,7 +1,9 @@
|
|||||||
from django.db import models
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.postgres.fields import JSONField
|
from django.contrib.postgres.fields import JSONField
|
||||||
|
from django.db import models
|
||||||
import datetime
|
import datetime
|
||||||
|
import os.path
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
class Season(models.Model):
|
class Season(models.Model):
|
||||||
@ -26,6 +28,8 @@ def unix_datetime(date):
|
|||||||
|
|
||||||
|
|
||||||
class Catalog(models.Model):
|
class Catalog(models.Model):
|
||||||
|
PDF_DIR = 'catalogs'
|
||||||
|
PDF_URL = 'export/catalogs'
|
||||||
owner = models.ForeignKey(settings.AUTH_USER_MODEL,
|
owner = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE)
|
||||||
season = models.ForeignKey(Season, on_delete=models.PROTECT)
|
season = models.ForeignKey(Season, on_delete=models.PROTECT)
|
||||||
@ -38,10 +42,34 @@ class Catalog(models.Model):
|
|||||||
sections = models.PositiveIntegerField(default=0)
|
sections = models.PositiveIntegerField(default=0)
|
||||||
materials = models.PositiveIntegerField(default=0)
|
materials = models.PositiveIntegerField(default=0)
|
||||||
data = JSONField(null=True)
|
data = JSONField(null=True)
|
||||||
|
# build_progress = models.PositiveIntegerField(default=0)
|
||||||
|
|
||||||
# JSONField docs:
|
# JSONField docs:
|
||||||
# https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/fields/#jsonfield
|
# https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/fields/#jsonfield
|
||||||
|
|
||||||
|
|
||||||
|
def pdf_name(self):
|
||||||
|
pdf = "{}-{}-{}".format(self.season.id, self.name, self.id)
|
||||||
|
pdf = re.sub(r'\s+', r'_', pdf)
|
||||||
|
pdf = re.sub(r'[^\w\-]', r'', pdf)
|
||||||
|
pdf += '.pdf'
|
||||||
|
return pdf
|
||||||
|
|
||||||
|
def pdf_url(self):
|
||||||
|
return "http://{}/{}/{}/{}".format(settings.PUBLIC_WEB_HOST,
|
||||||
|
self.PDF_URL,
|
||||||
|
self.season.id,
|
||||||
|
self.pdf_name())
|
||||||
|
|
||||||
|
def pdf_file(self):
|
||||||
|
return os.path.join(settings.ASSET_DIR,
|
||||||
|
self.PDF_DIR,
|
||||||
|
self.season.id,
|
||||||
|
self.pdf_name())
|
||||||
|
|
||||||
|
def pdf_exists(self):
|
||||||
|
return os.path.isfile(self.pdf_file())
|
||||||
|
|
||||||
def summary(self):
|
def summary(self):
|
||||||
return {
|
return {
|
||||||
'id': self.id,
|
'id': self.id,
|
||||||
@ -57,4 +85,5 @@ class Catalog(models.Model):
|
|||||||
'pages': self.pages,
|
'pages': self.pages,
|
||||||
'sections': self.sections,
|
'sections': self.sections,
|
||||||
'materials': self.materials,
|
'materials': self.materials,
|
||||||
|
'pdf': self.pdf_url(),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user