diff --git a/panikdb/aa/models.py b/panikdb/aa/models.py index 712604d3880e049d13ac1c57a0fb5e5a5d21696f..bd1537cbc59e2c3e57ccec18d869b7e9ec64715f 100644 --- a/panikdb/aa/models.py +++ b/panikdb/aa/models.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import AbstractUser from django.core import validators from django.db import models -from ..emissions.models import Emission +from emissions.models import Emission class User(AbstractUser): emissions = models.ManyToManyField(Emission) diff --git a/panikdb/emissions/__init__.py b/panikdb/emissions/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/panikdb/emissions/admin.py b/panikdb/emissions/admin.py deleted file mode 100644 index 228c2b3bd9cc07ae7d98d7c0c0b5f1a7333f5b25..0000000000000000000000000000000000000000 --- a/panikdb/emissions/admin.py +++ /dev/null @@ -1,51 +0,0 @@ -from django.contrib import admin - -from .models import Emission, Episode, Category, Schedule, \ - SoundFile, NewsItem, NewsCategory, Nonstop - -class EmissionAdmin(admin.ModelAdmin): - prepopulated_fields = {'slug': ('title',)} - -admin.site.register(Emission, EmissionAdmin) - - -class EpisodeAdmin(admin.ModelAdmin): - prepopulated_fields = {'slug': ('title',)} - -admin.site.register(Episode, EpisodeAdmin) - - -class CategoryAdmin(admin.ModelAdmin): - pass - -admin.site.register(Category, CategoryAdmin) - - -class ScheduleAdmin(admin.ModelAdmin): - pass - -admin.site.register(Schedule, ScheduleAdmin) - - -class NewsCategoryAdmin(admin.ModelAdmin): - pass - -admin.site.register(NewsCategory, NewsCategoryAdmin) - - -class NewsItemAdmin(admin.ModelAdmin): - pass - -admin.site.register(NewsItem, NewsItemAdmin) - - -class SoundFileAdmin(admin.ModelAdmin): - pass - -admin.site.register(SoundFile, SoundFileAdmin) - - -class NonstopAdmin(admin.ModelAdmin): - pass - -admin.site.register(Nonstop, NonstopAdmin) diff --git a/panikdb/emissions/fixtures/nonstop.json b/panikdb/emissions/fixtures/nonstop.json deleted file mode 100644 index 8c0352fa127451c23352f60be0e4c1cc9fa0688e..0000000000000000000000000000000000000000 --- a/panikdb/emissions/fixtures/nonstop.json +++ /dev/null @@ -1,83 +0,0 @@ -[ - { - "fields": { - "end": "02:00:00", - "start": "22:00:00", - "title": "Biodiversit\u00e9" - }, - "model": "emissions.nonstop", - "pk": 1 - }, - { - "fields": { - "end": "05:00:00", - "start": "02:00:00", - "title": "R\u00eaveries" - }, - "model": "emissions.nonstop", - "pk": 2 - }, - { - "fields": { - "end": "07:30:00", - "start": "05:00:00", - "title": "La Panique" - }, - "model": "emissions.nonstop", - "pk": 3 - }, - { - "fields": { - "end": "10:00:00", - "start": "07:30:00", - "title": "Matin tranquille" - }, - "model": "emissions.nonstop", - "pk": 4 - }, - { - "fields": { - "end": "12:00:00", - "start": "10:00:00", - "title": "Up Beat Tempo" - }, - "model": "emissions.nonstop", - "pk": 5 - }, - { - "fields": { - "end": "13:00:00", - "start": "12:00:00", - "title": "L'heure de pointe" - }, - "model": "emissions.nonstop", - "pk": 6 - }, - { - "fields": { - "end": "16:00:00", - "start": "13:00:00", - "title": "Le Mange Disque" - }, - "model": "emissions.nonstop", - "pk": 7 - }, - { - "fields": { - "end": "19:00:00", - "start": "16:00:00", - "title": "Hop Bop and co" - }, - "model": "emissions.nonstop", - "pk": 8 - }, - { - "fields": { - "end": "22:00:00", - "start": "19:00:00", - "title": "Acouph\u00e8ne" - }, - "model": "emissions.nonstop", - "pk": 9 - } -] diff --git a/panikdb/emissions/forms.py b/panikdb/emissions/forms.py deleted file mode 100644 index 8c6477971b79722621290ec0ba811f38413a9efa..0000000000000000000000000000000000000000 --- a/panikdb/emissions/forms.py +++ /dev/null @@ -1,196 +0,0 @@ -import datetime -import re -import unicodedata -import os -import uuid - -from django import forms -from django.forms import fields - -from django.core.files.storage import DefaultStorage -from django.core.urlresolvers import reverse -from django.utils.safestring import mark_safe -from django.conf import settings -from django.template.loader import render_to_string - -from taggit.forms import TagWidget -import datetimewidget.widgets - -from .models import Emission, Episode, Diffusion, Schedule, SoundFile - - -DATETIME_OPTIONS = { - 'format': 'dd/mm/yyyy hh:ii', - 'language': 'fr', - 'weekStart': '1', - 'autoclose': 'true', - } - -class DateTimeWidget(datetimewidget.widgets.DateTimeWidget): - def __init__(self, *args, **kwargs): - super(DateTimeWidget, self).__init__(*args, options=DATETIME_OPTIONS, **kwargs) - - -def slugify(s): - s = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore').lower() - return re.sub(r'\W+', '-', s) - - -class DayAndHourWidget(forms.MultiWidget): - def __init__(self, attrs=None): - WEEKDAYS = [u'Lundi', u'Mardi', u'Mercredi', u'Jeudi', u'Vendredi', u'Samedi', u'Dimanche'] - widgets = ( - forms.Select(attrs=attrs, choices=([(weekday, WEEKDAYS[weekday]) for weekday in range(7)])), - forms.Select(attrs=attrs, choices=([(hour, hour) for hour in range(24)])), - forms.Select(attrs=attrs, choices=([(minute, str(minute).zfill(2)) for minute in range(60)])), - ) - super(DayAndHourWidget, self).__init__(widgets, attrs) - - def decompress(self, value): - if value: - return [value.weekday(), value.hour, value.minute] - return [None, None, None] - - def value_from_datadict(self, data, files, name): - # we only care about day/hour/minutes, but we conveniently use a - # datetime value to store that; we pick 2007 as reference year as - # it had its January 1st on a Monday. - data_list = [ - widget.value_from_datadict(data, files, name + '_%s' % i) - for i, widget in enumerate(self.widgets)] - - if data_list: - return datetime.datetime(2007, 1, int(data_list[0])+1, int(data_list[1]), int(data_list[2])) - return None - - -class JqueryFileUploadFileInput(forms.FileInput): - def render(self, name, value, attrs=None): - output = render_to_string('emissions/upload.html', { - 'upload_url': self.url, - 'files': self.files, - 'name': name, - 'STATIC_URL': settings.STATIC_URL}) - return mark_safe(output) - - -class JqueryFileUploadInput(forms.MultiWidget): - needs_multipart_form = True - upload_id_re = re.compile(r'^[a-z0-9A-Z-]+$') - upload_id = None - - def __init__(self, attrs=None, choices=[], max_filename_length=None): - self.max_filename_length = max_filename_length - widget_list = (forms.HiddenInput(attrs=attrs), - JqueryFileUploadFileInput(attrs=attrs)) - super(JqueryFileUploadInput, self).__init__(widget_list, attrs) - - def decompress(self, value): - # map python value to widget contents - if self.upload_id: - pass - elif isinstance(value, (list, tuple)) and value and value[0] is not None: - self.upload_id = str(value[0]) - else: - self.upload_id = str(uuid.uuid4()) - return [self.upload_id, None] - - def get_files_for_id(self, upload_id): - storage = DefaultStorage() - path = os.path.join('upload', upload_id) - if not storage.exists(path): - return - for filepath in storage.listdir(path)[1]: - name = os.path.basename(filepath) - yield storage.open(os.path.join(path, name)) - - def value_from_datadict(self, data, files, name): - ''' - If some file was submitted, that's the value, - If a regular hidden_id is present, use it to find uploaded files, - otherwise return an empty list - ''' - upload_id, file_input = super(JqueryFileUploadInput, self).value_from_datadict(data, files, name) - if file_input: - pass - elif JqueryFileUploadInput.upload_id_re.match(upload_id): - file_input = list(self.get_files_for_id(upload_id)) - else: - file_input = [] - return file_input[0] - - def render(self, name, value, attrs=None): - self.decompress(value) - self.widgets[1].url = '/upload/%s/' % self.upload_id - self.widgets[1].url = reverse('upload', kwargs={'transaction_id': self.upload_id}) - if self.max_filename_length: - self.widgets[1].url += '?max_filename_length=%d' % self.max_filename_length - self.widgets[1].files = '/upload/%s/' % self.get_files_for_id(self.upload_id) - output = super(JqueryFileUploadInput, self).render(name, value, - attrs) - fileinput_id = '%s_%s' % (attrs['id'], '1') - return output - - -class EmissionForm(forms.ModelForm): - class Meta: - model = Emission - exclude = ('slug',) - - def save(self, commit=True): - if not self.instance.slug: - self.instance.slug = slugify(self.instance.title) - return super(EmissionForm, self).save(commit=commit) - - -class EpisodeForm(forms.ModelForm): - class Meta: - model = Episode - exclude = ('slug',) - widgets = {'emission': forms.HiddenInput(), - 'tags': TagWidget()} - - def save(self, commit=True): - if not self.instance.slug: - self.instance.slug = slugify(self.instance.title) - return super(EpisodeForm, self).save(commit=commit) - - -class EpisodeNewForm(EpisodeForm): - diffusion = forms.DateTimeField(label='First Diffusion', - widget=DateTimeWidget) - - def save(self, commit=True): - episode = super(EpisodeNewForm, self).save(commit=commit) - diffusion = Diffusion() - diffusion.episode_id = episode.id - diffusion.datetime = self.cleaned_data.get('diffusion') - diffusion.save() - return episode - - -class ScheduleForm(forms.ModelForm): - class Meta: - model = Schedule - widgets = { - 'emission': forms.HiddenInput(), - 'datetime': DayAndHourWidget(), - } - - -class SoundFileForm(forms.ModelForm): - class Meta: - model = SoundFile - widgets = { - 'episode': forms.HiddenInput(), - 'file': JqueryFileUploadInput(), - } - - -class DiffusionForm(forms.ModelForm): - class Meta: - model = Diffusion - widgets = { - 'episode': forms.HiddenInput(), - 'datetime': DateTimeWidget(), - } diff --git a/panikdb/emissions/management/__init__.py b/panikdb/emissions/management/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/panikdb/emissions/management/commands/__init__.py b/panikdb/emissions/management/commands/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/panikdb/emissions/management/commands/_spip2html.py b/panikdb/emissions/management/commands/_spip2html.py deleted file mode 100644 index 70fdb070ba2d4f6aff42ec86e993d8fb5a1490ce..0000000000000000000000000000000000000000 --- a/panikdb/emissions/management/commands/_spip2html.py +++ /dev/null @@ -1,1073 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Code scavenged from Glasnost -# By: Odile Bénassy -# Romain Chantereau -# Nicolas Clapiès -# Pierre-Antoine Dejace -# Thierry Dulieu -# Florent Monnier -# Cédric Musso -# Frédéric Péters -# Benjamin Poussin -# Emmanuel Raviart -# Sébastien Régnier -# Emmanuel Saracco -# -# Copyright (C) 2000, 2001 Easter-eggs & Emmanuel Raviart -# Copyright (C) 2002 Odile Bénassy, Code Lutin, Thierry Dulieu, Easter-eggs, -# Entr'ouvert, Frédéric Péters, Benjamin Poussin, Emmanuel Raviart, -# Emmanuel Saracco & Théridion -# Copyright (C) 2003 Odile Bénassy, Romain Chantereau, Nicolas Clapiès, -# Code Lutin, Pierre-Antoine Dejace, Thierry Dulieu, Easter-eggs, -# Entr'ouvert, Florent Monnier, Cédric Musso, Ouvaton, Frédéric Péters, -# Benjamin Poussin, Rodolphe Quiédeville, Emmanuel Raviart, Sébastien -# Régnier, Emmanuel Saracco, Théridion & Vecam -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import re -import sys - -_non_id_chars = re.compile('[^a-z0-9]+') -_non_id_at_ends = re.compile('^[-0-9]+|-+$') - -def enhanceTypo(s): - # typographic junkie - # idea from: http://daringfireball.net/projects/smartypants/ - s = s.replace('...', '…') # ellipsis (...) - s = s.replace(' -- ', ' — ') # em-dash - s = s.replace('(c)', '© ') # copyright symbol - return s - - -def parseSpipLink(link): - link = link.replace('\n', ' ') - matchObject = re.match( - r'(?Palias|art(icle)?|atom|book|card|election|file|'\ - 'grade|group|heading|im(g|age)?|person(ne)?|rubri(c|que)'\ - ') *(?P\S+) *(?P