from emissions.models import SoundFile, Episode
-from .models import (SoundCell, EpisodeCell, EpisodeAutoSelectionCell,
- NewsItemAutoSelectionCell)
+from .models import SoundCell, EpisodeCell, EpisodeAutoSelectionCell, NewsItemAutoSelectionCell
class BaseSelect2Widget(Widget):
soundfile = SoundFile.objects.get(id=value)
except SoundFile.DoesNotExist:
return 'missing sound %s' % value
- return '%s - %s - %s' % (soundfile.episode.emission.title,
- soundfile.episode.title,
- soundfile.title or soundfile.id)
+ return '%s - %s - %s' % (
+ soundfile.episode.emission.title,
+ soundfile.episode.title,
+ soundfile.title or soundfile.id,
+ )
class SoundCellForm(forms.ModelForm):
class EpisodeCellForm(forms.ModelForm):
class Meta:
model = EpisodeCell
- fields = ('episode', )
+ fields = ('episode',)
def __init__(self, *args, **kwargs):
super(EpisodeCellForm, self).__init__(*args, **kwargs)
migrations.CreateModel(
name='SoundCell',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ (
+ 'id',
+ models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
+ ),
('placeholder', models.CharField(max_length=20)),
('order', models.PositiveIntegerField()),
('slug', models.SlugField(verbose_name='Slug', blank=True)),
migrations.CreateModel(
name='EpisodeCell',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ (
+ 'id',
+ models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
+ ),
('placeholder', models.CharField(max_length=20)),
('order', models.PositiveIntegerField()),
('slug', models.SlugField(verbose_name='Slug', blank=True)),
migrations.CreateModel(
name='EpisodeAutoSelectionCell',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ (
+ 'id',
+ models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
+ ),
('placeholder', models.CharField(max_length=20)),
('order', models.PositiveIntegerField()),
('slug', models.SlugField(verbose_name='Slug', blank=True)),
('category', models.ForeignKey(blank=True, to='emissions.Category', null=True)),
('groups', models.ManyToManyField(to='auth.Group', verbose_name='Groups', blank=True)),
('page', models.ForeignKey(to='data.Page')),
- ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')),
+ (
+ 'tags',
+ taggit.managers.TaggableManager(
+ to='taggit.Tag',
+ through='taggit.TaggedItem',
+ blank=True,
+ help_text='A comma-separated list of tags.',
+ verbose_name='Tags',
+ ),
+ ),
],
options={
'verbose_name': 'Automatic Episode Selection',
migrations.CreateModel(
name='NewsItemAutoSelectionCell',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ (
+ 'id',
+ models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
+ ),
('placeholder', models.CharField(max_length=20)),
('order', models.PositiveIntegerField()),
('slug', models.SlugField(verbose_name='Slug', blank=True)),
('future', models.BooleanField(default=True, verbose_name='Future Events Only')),
('groups', models.ManyToManyField(to='auth.Group', verbose_name='Groups', blank=True)),
('page', models.ForeignKey(to='data.Page')),
- ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')),
+ (
+ 'tags',
+ taggit.managers.TaggableManager(
+ to='taggit.Tag',
+ through='taggit.TaggedItem',
+ blank=True,
+ help_text='A comma-separated list of tags.',
+ verbose_name='Tags',
+ ),
+ ),
],
options={
'verbose_name': 'Automatic Newsitem Selection',
migrations.CreateModel(
name='Topik',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ (
+ 'id',
+ models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
+ ),
('image', models.ImageField(max_length=250, null=True, verbose_name='Image', blank=True)),
('got_focus', models.DateTimeField(default=None, null=True, blank=True)),
('has_focus', models.BooleanField(default=False)),
('page', models.ForeignKey(to='data.Page')),
],
- options={
- },
+ options={},
bases=(models.Model,),
),
]
migrations.CreateModel(
name='ItemTopik',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
- ('episode', models.ForeignKey(verbose_name='Episode', blank=True, to='emissions.Episode', null=True)),
- ('newsitem', models.ForeignKey(verbose_name='News Item', blank=True, to='emissions.NewsItem', null=True)),
- ('topik', models.ForeignKey(verbose_name=b'Topik', blank=True, to='panikombo.Topik', null=True)),
+ (
+ 'id',
+ models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
+ ),
+ (
+ 'episode',
+ models.ForeignKey(verbose_name='Episode', blank=True, to='emissions.Episode', null=True),
+ ),
+ (
+ 'newsitem',
+ models.ForeignKey(
+ verbose_name='News Item', blank=True, to='emissions.NewsItem', null=True
+ ),
+ ),
+ (
+ 'topik',
+ models.ForeignKey(verbose_name=b'Topik', blank=True, to='panikombo.Topik', null=True),
+ ),
],
- options={
- },
+ options={},
bases=(models.Model,),
),
]
migrations.AddField(
model_name='newsitemautoselectioncell',
name='category',
- field=models.ForeignKey(verbose_name='Category', blank=True, to='emissions.NewsCategory', null=True),
+ field=models.ForeignKey(
+ verbose_name='Category', blank=True, to='emissions.NewsCategory', null=True
+ ),
preserve_default=True,
),
]
migrations.CreateModel(
name='TopikCell',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ (
+ 'id',
+ models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True),
+ ),
('placeholder', models.CharField(max_length=20)),
('order', models.PositiveIntegerField()),
('slug', models.SlugField(verbose_name='Slug', blank=True)),
migrations.AddField(
model_name='episodeautoselectioncell',
name='period',
- field=models.PositiveSmallIntegerField(default=0, verbose_name='Period', choices=[(0, 'All'), (1, 'Future'), (2, 'Past')]),
+ field=models.PositiveSmallIntegerField(
+ default=0, verbose_name='Period', choices=[(0, 'All'), (1, 'Future'), (2, 'Past')]
+ ),
preserve_default=True,
),
]
migrations.AddField(
model_name='episodeautoselectioncell',
name='last_update_timestamp',
- field=models.DateTimeField(default=datetime.datetime(2017, 4, 18, 11, 54, 35, 51768), auto_now=True),
+ field=models.DateTimeField(
+ default=datetime.datetime(2017, 4, 18, 11, 54, 35, 51768), auto_now=True
+ ),
preserve_default=False,
),
migrations.AddField(
migrations.AddField(
model_name='episodecell',
name='last_update_timestamp',
- field=models.DateTimeField(default=datetime.datetime(2017, 4, 18, 11, 54, 36, 700929), auto_now=True),
+ field=models.DateTimeField(
+ default=datetime.datetime(2017, 4, 18, 11, 54, 36, 700929), auto_now=True
+ ),
preserve_default=False,
),
migrations.AddField(
migrations.AddField(
model_name='newsitemautoselectioncell',
name='last_update_timestamp',
- field=models.DateTimeField(default=datetime.datetime(2017, 4, 18, 11, 54, 39, 362967), auto_now=True),
+ field=models.DateTimeField(
+ default=datetime.datetime(2017, 4, 18, 11, 54, 39, 362967), auto_now=True
+ ),
preserve_default=False,
),
migrations.AddField(
migrations.AddField(
model_name='soundcell',
name='last_update_timestamp',
- field=models.DateTimeField(default=datetime.datetime(2017, 4, 18, 11, 54, 42, 662255), auto_now=True),
+ field=models.DateTimeField(
+ default=datetime.datetime(2017, 4, 18, 11, 54, 42, 662255), auto_now=True
+ ),
preserve_default=False,
),
migrations.AddField(
migrations.AddField(
model_name='topikcell',
name='last_update_timestamp',
- field=models.DateTimeField(default=datetime.datetime(2017, 4, 18, 11, 54, 44, 42144), auto_now=True),
+ field=models.DateTimeField(
+ default=datetime.datetime(2017, 4, 18, 11, 54, 44, 42144), auto_now=True
+ ),
preserve_default=False,
),
]
migrations.AddField(
model_name='itemtopik',
name='page',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='data.Page'),
+ field=models.ForeignKey(
+ blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='data.Page'
+ ),
),
migrations.AlterField(
model_name='itemtopik',
name='topik',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='panikombo.Topik', verbose_name='Topik'),
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ to='panikombo.Topik',
+ verbose_name='Topik',
+ ),
),
]
migrations.CreateModel(
name='SoundsCell',
fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ (
+ 'id',
+ models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
+ ),
('placeholder', models.CharField(max_length=20)),
('order', models.PositiveIntegerField()),
('slug', models.SlugField(blank=True, verbose_name='Slug')),
- ('extra_css_class', models.CharField(blank=True, max_length=100, verbose_name='Extra classes for CSS styling')),
+ (
+ 'extra_css_class',
+ models.CharField(
+ blank=True, max_length=100, verbose_name='Extra classes for CSS styling'
+ ),
+ ),
('public', models.BooleanField(default=True, verbose_name='Public')),
- ('restricted_to_unlogged', models.BooleanField(default=False, verbose_name='Restrict to unlogged users')),
+ (
+ 'restricted_to_unlogged',
+ models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
+ ),
('last_update_timestamp', models.DateTimeField(auto_now=True)),
- ('include_search_input', models.BooleanField(default=True, verbose_name='Include search input')),
+ (
+ 'include_search_input',
+ models.BooleanField(default=True, verbose_name='Include search input'),
+ ),
('include_fragments', models.BooleanField(default=True, verbose_name='Include fragments')),
- ('limit_to_focus', models.BooleanField(default=False, verbose_name='Limit to focused elements')),
+ (
+ 'limit_to_focus',
+ models.BooleanField(default=False, verbose_name='Limit to focused elements'),
+ ),
('count', models.PositiveSmallIntegerField(default=20, verbose_name='Count')),
('groups', models.ManyToManyField(blank=True, to='auth.Group', verbose_name='Groups')),
('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='data.Page')),
migrations.AddField(
model_name='soundscell',
name='sort_order',
- field=models.CharField(choices=[('-creation_timestamp', 'Reverse chronological (creation)'), ('-first_diffusion', 'Reverse chronological (diffusion)'), ('creation_timestamp', 'Chronological (creation)'), ('first_diffusion', 'Chronological (diffusion)'), ('?', 'Random')], default='-creation_timestamp', max_length=30, verbose_name='Sort order'),
+ field=models.CharField(
+ choices=[
+ ('-creation_timestamp', 'Reverse chronological (creation)'),
+ ('-first_diffusion', 'Reverse chronological (diffusion)'),
+ ('creation_timestamp', 'Chronological (creation)'),
+ ('first_diffusion', 'Chronological (diffusion)'),
+ ('?', 'Random'),
+ ],
+ default='-creation_timestamp',
+ max_length=30,
+ verbose_name='Sort order',
+ ),
),
]
migrations.AddField(
model_name='soundscell',
name='sound_format',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='emissions.Format', verbose_name='Limit to format'),
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ to='emissions.Format',
+ verbose_name='Limit to format',
+ ),
),
]
migrations.AddField(
model_name='soundscell',
name='maximal_duration',
- field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='Maximal duration (in minutes)'),
+ field=models.PositiveIntegerField(
+ blank=True, default=None, null=True, verbose_name='Maximal duration (in minutes)'
+ ),
),
migrations.AddField(
model_name='soundscell',
name='minimal_duration',
- field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='Minimal duration (in minutes)'),
+ field=models.PositiveIntegerField(
+ blank=True, default=None, null=True, verbose_name='Minimal duration (in minutes)'
+ ),
),
]
migrations.AddField(
model_name='soundscell',
name='tags',
- field=taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
+ field=taggit.managers.TaggableManager(
+ blank=True,
+ help_text='A comma-separated list of tags.',
+ through='taggit.TaggedItem',
+ to='taggit.Tag',
+ verbose_name='Tags',
+ ),
),
]
# coding: utf-8
import collections
-COMBO_PUBLIC_TEMPLATES = collections.OrderedDict({
- 'standard': {
- 'name': 'Page normale',
- 'template': 'combo/page_template_sidebar.html',
- 'placeholders': collections.OrderedDict({
- 'introduction': {
- 'name': 'Introduction',
- 'optional': True,
+COMBO_PUBLIC_TEMPLATES = collections.OrderedDict(
+ {
+ 'standard': {
+ 'name': 'Page normale',
+ 'template': 'combo/page_template_sidebar.html',
+ 'placeholders': collections.OrderedDict(
+ {
+ 'introduction': {
+ 'name': 'Introduction',
+ 'optional': True,
+ },
+ 'content': {
+ 'name': 'Contenu',
+ },
+ 'sidebar': {
+ 'name': 'Barre latérale',
+ },
+ }
+ ),
+ },
+ 'fullwidth': {
+ 'name': 'Page prenant toute la largeur',
+ 'template': 'combo/page_template_full_width.html',
+ 'placeholders': {
+ 'content': {
+ 'name': 'Contenu',
+ },
},
- 'content': {
- 'name': 'Contenu',
+ },
+ 'standard-about': {
+ 'name': 'Section « À propos »',
+ 'template': 'combo/page_template_about.html',
+ 'placeholders': {
+ 'content': {
+ 'name': 'Contenu',
+ },
},
- 'sidebar': {
- 'name': 'Barre latérale',
- },
- })
- },
- 'fullwidth': {
- 'name': 'Page prenant toute la largeur',
- 'template': 'combo/page_template_full_width.html',
- 'placeholders': {
- 'content': {
- 'name': 'Contenu',
- },
- }
- },
- 'standard-about': {
- 'name': 'Section « À propos »',
- 'template': 'combo/page_template_about.html',
- 'placeholders': {
- 'content': {
- 'name': 'Contenu',
- },
- }
- },
-})
+ },
+ }
+)
from emissions.models import Episode, NewsItem, SoundFile
+
@register_cell_class
class SoundCell(CellBase):
soundfile = models.ForeignKey('emissions.SoundFile', null=True)
def get_default_form_class(self):
from .forms import SoundCellForm
+
return SoundCellForm
def get_included_items(self):
if self.soundfile:
if self.soundfile.fragment:
return u'%s - %s - %s' % (
- self.soundfile.episode.emission.title,
- self.soundfile.episode.title,
- self.soundfile.title)
+ self.soundfile.episode.emission.title,
+ self.soundfile.episode.title,
+ self.soundfile.title,
+ )
else:
- return u'%s - %s' % (
- self.soundfile.episode.emission.title,
- self.soundfile.episode.title)
+ return u'%s - %s' % (self.soundfile.episode.emission.title, self.soundfile.episode.title)
return ''
def get_default_form_class(self):
from .forms import EpisodeCellForm
+
return EpisodeCellForm
def get_additional_label(self):
if self.episode:
- return u'%s - %s' % (
- self.episode.emission.title,
- self.episode.title)
+ return u'%s - %s' % (self.episode.emission.title, self.episode.title)
return ''
and_tags = models.CharField(_('And Tags'), max_length=100, blank=True)
category = models.ForeignKey('emissions.Category', null=True, blank=True)
period = models.PositiveSmallIntegerField(
- _('Period'), default=0,
- choices=((0, _('All')),
- (1, _('Future')),
- (2, _('Past'))))
+ _('Period'), default=0, choices=((0, _('All')), (1, _('Future')), (2, _('Past')))
+ )
template_name = 'panikombo/episode_auto_selection.html'
-
class Meta:
verbose_name = _('Automatic Episode Selection')
if self.period == 0:
episodes_queryset = episodes_queryset.extra(
- select={ 'first_diffusion': 'emissions_diffusion.datetime', },
- select_params=(False, True),
- where=['''datetime = (SELECT MIN(datetime) FROM emissions_diffusion
- WHERE episode_id = emissions_episode.id)'''],
- tables=['emissions_diffusion'])
+ select={
+ 'first_diffusion': 'emissions_diffusion.datetime',
+ },
+ select_params=(False, True),
+ where=[
+ '''datetime = (SELECT MIN(datetime) FROM emissions_diffusion
+ WHERE episode_id = emissions_episode.id)'''
+ ],
+ tables=['emissions_diffusion'],
+ )
episodes_queryset = episodes_queryset.order_by('first_diffusion').distinct()
elif self.period == 1:
episodes_queryset = episodes_queryset.extra(
- select={ 'first_diffusion': 'emissions_diffusion.datetime', },
- select_params=(False, True),
- where=['''datetime = (SELECT MIN(datetime) FROM emissions_diffusion
+ select={
+ 'first_diffusion': 'emissions_diffusion.datetime',
+ },
+ select_params=(False, True),
+ where=[
+ '''datetime = (SELECT MIN(datetime) FROM emissions_diffusion
WHERE episode_id = emissions_episode.id) AND
- datetime >= CURRENT_TIMESTAMP'''],
- tables=['emissions_diffusion'])
+ datetime >= CURRENT_TIMESTAMP'''
+ ],
+ tables=['emissions_diffusion'],
+ )
episodes_queryset = episodes_queryset.order_by('-first_diffusion').distinct()
elif self.period == 2:
episodes_queryset = episodes_queryset.extra(
- select={ 'first_diffusion': 'emissions_diffusion.datetime', },
- select_params=(False, True),
- where=['''datetime = (SELECT MIN(datetime) FROM emissions_diffusion
+ select={
+ 'first_diffusion': 'emissions_diffusion.datetime',
+ },
+ select_params=(False, True),
+ where=[
+ '''datetime = (SELECT MIN(datetime) FROM emissions_diffusion
WHERE episode_id = emissions_episode.id) AND
- datetime < CURRENT_TIMESTAMP'''],
- tables=['emissions_diffusion'])
+ datetime < CURRENT_TIMESTAMP'''
+ ],
+ tables=['emissions_diffusion'],
+ )
episodes_queryset = episodes_queryset.order_by('-first_diffusion').distinct()
return episodes_queryset
ctx = super(EpisodeAutoSelectionCell, self).get_cell_extra_context(context)
ctx['title'] = self.title
- if (self.category or self.period or self.tags.count()):
+ if self.category or self.period or self.tags.count():
ctx['episodes'] = self.get_included_items()
else:
ctx['episodes'] = []
def get_default_form_class(self):
from .forms import EpisodeAutoSelectionCellForm
+
return EpisodeAutoSelectionCellForm
def get_additional_label(self):
return self.title
return ''
+
@register_cell_class
class NewsItemAutoSelectionCell(CellBase):
title = models.CharField(_('Title'), max_length=50, blank=True)
tags = TaggableManager(_('Tags'), blank=True)
and_tags = models.CharField(_('And Tags'), max_length=100, blank=True)
future = models.BooleanField(_('Future Events Only'), default=True)
- category = models.ForeignKey('emissions.NewsCategory',
- verbose_name=_('Category'), null=True, blank=True)
+ category = models.ForeignKey('emissions.NewsCategory', verbose_name=_('Category'), null=True, blank=True)
template_name = 'panikombo/newsitem_auto_selection.html'
def get_default_form_class(self):
from .forms import NewsItemAutoSelectionCellForm
+
return NewsItemAutoSelectionCellForm
def get_additional_label(self):
class ItemTopik(models.Model):
- newsitem = models.ForeignKey('emissions.NewsItem', verbose_name=_('News Item'),
- null=True, blank=True)
- episode = models.ForeignKey('emissions.Episode', verbose_name=_('Episode'),
- null=True, blank=True)
+ newsitem = models.ForeignKey('emissions.NewsItem', verbose_name=_('News Item'), null=True, blank=True)
+ episode = models.ForeignKey('emissions.Episode', verbose_name=_('Episode'), null=True, blank=True)
page = models.ForeignKey('data.Page', null=True, blank=True)
include_search_input = models.BooleanField(_('Include search input'), default=True)
include_fragments = models.BooleanField(_('Include fragments'), default=True)
limit_to_focus = models.BooleanField(_('Limit to focused elements'), default=False)
- sound_format = models.ForeignKey('emissions.Format',
- verbose_name=_('Limit to format'), null=True, blank=True)
+ sound_format = models.ForeignKey(
+ 'emissions.Format', verbose_name=_('Limit to format'), null=True, blank=True
+ )
tags = TaggableManager(_('Tags'), blank=True)
minimal_duration = models.PositiveIntegerField(
- _('Minimal duration (in minutes)'),
- default=None, blank=True, null=True)
+ _('Minimal duration (in minutes)'), default=None, blank=True, null=True
+ )
maximal_duration = models.PositiveIntegerField(
- _('Maximal duration (in minutes)'),
- default=None, blank=True, null=True)
+ _('Maximal duration (in minutes)'), default=None, blank=True, null=True
+ )
count = models.PositiveSmallIntegerField(_('Count'), default=20)
- sort_order = models.CharField(_('Sort order'), default='-creation_timestamp',
- max_length=30,
- choices=[
- ('-creation_timestamp', _('Reverse chronological (creation)')),
- ('-first_diffusion', _('Reverse chronological (diffusion)')),
- ('creation_timestamp', _('Chronological (creation)')),
- ('first_diffusion', _('Chronological (diffusion)')),
- ('?', _('Random')),
- ]
- )
+ sort_order = models.CharField(
+ _('Sort order'),
+ default='-creation_timestamp',
+ max_length=30,
+ choices=[
+ ('-creation_timestamp', _('Reverse chronological (creation)')),
+ ('-first_diffusion', _('Reverse chronological (diffusion)')),
+ ('creation_timestamp', _('Chronological (creation)')),
+ ('first_diffusion', _('Chronological (diffusion)')),
+ ('?', _('Random')),
+ ],
+ )
class Meta:
verbose_name = _('Sounds')
soundfiles = soundfiles.filter(duration__lte=self.maximal_duration * 60)
if self.tags.exists():
soundfiles = soundfiles.filter(episode__tags__in=self.tags.all())
- soundfiles = soundfiles.select_related().extra(
- select={'first_diffusion': 'emissions_diffusion.datetime', },
- select_params=(False, True),
- where=['''datetime = (SELECT MIN(datetime)
+ soundfiles = (
+ soundfiles.select_related()
+ .extra(
+ select={
+ 'first_diffusion': 'emissions_diffusion.datetime',
+ },
+ select_params=(False, True),
+ where=[
+ '''datetime = (SELECT MIN(datetime)
FROM emissions_diffusion
- WHERE episode_id = emissions_episode.id)'''],
- tables=['emissions_diffusion'],).order_by(self.sort_order).distinct()
+ WHERE episode_id = emissions_episode.id)'''
+ ],
+ tables=['emissions_diffusion'],
+ )
+ .order_by(self.sort_order)
+ .distinct()
+ )
return {
'include_search_input': self.include_search_input,
- 'soundfiles': soundfiles[:self.count],
+ 'soundfiles': soundfiles[: self.count],
}
with open('VERSION', 'r') as v:
return v.read()
if os.path.exists('.git'):
- p = subprocess.Popen(['git', 'describe', '--dirty=.dirty', '--match=v*'],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ p = subprocess.Popen(
+ ['git', 'describe', '--dirty=.dirty', '--match=v*'],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ )
result = p.communicate()[0]
if p.returncode == 0:
result = result.decode('ascii').strip()[1:] # strip spaces/newlines and initial v
version = result
return version
else:
- return '0.0.post%s' % len(
- subprocess.check_output(
- ['git', 'rev-list', 'HEAD']).splitlines())
+ return '0.0.post%s' % len(subprocess.check_output(['git', 'rev-list', 'HEAD']).splitlines())
return '0.0'
def run(self):
try:
from django.core.management import call_command
+
for path, dirs, files in os.walk('panikombo'):
if 'locale' not in dirs:
continue
'compile_translations': compile_translations,
'install_lib': install_lib,
'sdist': sdist,
- }
+ },
)