forked from rc/aircox
add website app, move articles to it, fix programs.models
This commit is contained in:
@ -1,19 +1,17 @@
|
||||
import os
|
||||
|
||||
# django
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.template.defaultfilters import slugify
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from django.utils import timezone as tz
|
||||
from django.utils.html import strip_tags
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.template.defaultfilters import slugify
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from django.utils import timezone as tz
|
||||
from django.utils.html import strip_tags
|
||||
|
||||
# extensions
|
||||
from taggit.managers import TaggableManager
|
||||
from taggit.managers import TaggableManager
|
||||
|
||||
import programs.settings as settings
|
||||
import programs.settings as settings
|
||||
|
||||
|
||||
def date_or_default (date, date_only = False):
|
||||
@ -29,28 +27,6 @@ def date_or_default (date, date_only = False):
|
||||
return date
|
||||
|
||||
|
||||
#class Model (models.Model):
|
||||
# @classmethod
|
||||
# def type (cl):
|
||||
# """
|
||||
# Return a string with the type of the model (class name lowered)
|
||||
# """
|
||||
# name = cl.__name__.lower()
|
||||
# return name
|
||||
|
||||
# @classmethod
|
||||
# def name (cl, plural = False):
|
||||
# """
|
||||
# Return the name of the model using meta.verbose_name
|
||||
# """
|
||||
# if plural:
|
||||
# return cl._meta.verbose_name_plural.title()
|
||||
# return cl._meta.verbose_name.title()
|
||||
#
|
||||
# class Meta:
|
||||
# abstract = True
|
||||
|
||||
|
||||
class Metadata (models.Model):
|
||||
"""
|
||||
meta is used to extend a model for future needs
|
||||
@ -73,16 +49,14 @@ class Metadata (models.Model):
|
||||
default = True,
|
||||
help_text = _('publication is public'),
|
||||
)
|
||||
enumerable = models.BooleanField(
|
||||
_('enumerable'),
|
||||
default = True,
|
||||
help_text = _('publication is listable'),
|
||||
)
|
||||
tags = TaggableManager(
|
||||
_('tags'),
|
||||
blank = True,
|
||||
)
|
||||
|
||||
def get_slug_name (self):
|
||||
return slugify(self.title)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
@ -108,28 +82,6 @@ class Publication (Metadata):
|
||||
help_text = _('comments are enabled on this publication'),
|
||||
)
|
||||
|
||||
def get_slug_name (self):
|
||||
return slugify(self.title)
|
||||
|
||||
def get_parents (self, order_by = "desc", include_fields = None):
|
||||
"""
|
||||
Return an array of the parents of the item.
|
||||
If include_fields is an array of files to include.
|
||||
"""
|
||||
# TODO: fields included
|
||||
# FIXME: parameter name + container
|
||||
parents = [ self ]
|
||||
while parents[-1].parent:
|
||||
parent = parents[-1].parent
|
||||
if parent not in parents:
|
||||
# avoid cycles
|
||||
parents.append(parent)
|
||||
parents = parents[1:]
|
||||
|
||||
if order_by == 'desc':
|
||||
return reversed(parents)
|
||||
return parents
|
||||
|
||||
@staticmethod
|
||||
def _exclude_args (allow_unpublished = False, prefix = ''):
|
||||
if allow_unpublished:
|
||||
@ -181,7 +133,7 @@ class Track (models.Model):
|
||||
)
|
||||
tags = TaggableManager( blank = True )
|
||||
# position can be used to specify a position in seconds for non-stop
|
||||
# programs
|
||||
# programs or a position in the playlist
|
||||
position = models.SmallIntegerField(
|
||||
default = 0,
|
||||
help_text=_('position in the playlist'),
|
||||
@ -389,11 +341,11 @@ class Schedule (models.Model):
|
||||
|
||||
# others
|
||||
for date in dates:
|
||||
ep_date = date
|
||||
first_date = date
|
||||
if self.rerun:
|
||||
ep_date -= self.date - self.rerun.date
|
||||
first_date -= self.date - self.rerun.date
|
||||
|
||||
episode = Episode.objects.filter(date = date,
|
||||
episode = Episode.objects.filter(date = first_date,
|
||||
parent = self.parent)
|
||||
episode = episode[0] if episode.count() else None
|
||||
|
||||
@ -418,7 +370,7 @@ class Schedule (models.Model):
|
||||
|
||||
class Diffusion (models.Model):
|
||||
Type = {
|
||||
'normal': 0x00, # simple diffusion (done/planed)
|
||||
'default': 0x00, # simple diffusion (done/planed)
|
||||
'unconfirmed': 0x01, # scheduled by the generator but not confirmed for diffusion
|
||||
'cancel': 0x02, # cancellation happened; used to inform users
|
||||
'restart': 0x03, # manual restart; used to remix/give up antenna
|
||||
@ -472,9 +424,8 @@ class Stream (models.Model):
|
||||
for key, value in Type.items():
|
||||
ugettext_lazy(key)
|
||||
|
||||
# FIXME: id as integer?
|
||||
name = models.CharField(
|
||||
_('name'),
|
||||
title = models.CharField(
|
||||
_('title'),
|
||||
max_length = 32,
|
||||
blank = True,
|
||||
null = True,
|
||||
@ -483,8 +434,6 @@ class Stream (models.Model):
|
||||
verbose_name = _('type'),
|
||||
choices = [ (y, x) for x,y in Type.items() ],
|
||||
)
|
||||
# FIXME unique value / suit's orderable
|
||||
#
|
||||
priority = models.SmallIntegerField(
|
||||
_('priority'),
|
||||
default = 0,
|
||||
@ -493,12 +442,7 @@ class Stream (models.Model):
|
||||
public = models.BooleanField(
|
||||
_('public'),
|
||||
default = True,
|
||||
help_text = _('content is public'),
|
||||
)
|
||||
enumerable = models.BooleanField(
|
||||
_('enumerable'),
|
||||
default = True,
|
||||
help_text = _('publication is listable'),
|
||||
help_text = _('program list is public'),
|
||||
)
|
||||
|
||||
# get info for:
|
||||
@ -509,39 +453,11 @@ class Stream (models.Model):
|
||||
# - stream/pgm
|
||||
|
||||
def __str__ (self):
|
||||
return self.name + ' / ' + str(self.priority)
|
||||
|
||||
|
||||
class Article (Publication):
|
||||
# FIXME: move to website?
|
||||
parent = models.ForeignKey(
|
||||
'self',
|
||||
verbose_name = _('parent'),
|
||||
blank = True, null = True,
|
||||
help_text = _('parent article'),
|
||||
)
|
||||
static_page = models.BooleanField(
|
||||
_('static page'),
|
||||
default = False,
|
||||
)
|
||||
focus = models.BooleanField(
|
||||
_('article is focus'),
|
||||
default = False,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Article')
|
||||
verbose_name_plural = _('Articles')
|
||||
return '#{} {}'.format(self.priority, self.title)
|
||||
|
||||
|
||||
class Program (Publication):
|
||||
parent = models.ForeignKey(
|
||||
Article,
|
||||
verbose_name = _('parent'),
|
||||
blank = True, null = True,
|
||||
help_text = _('parent article'),
|
||||
)
|
||||
stream = models.ForeignKey(
|
||||
Stream,
|
||||
verbose_name = _('stream'),
|
||||
)
|
||||
|
Reference in New Issue
Block a user