rename system in config. Add default config in each apps

This commit is contained in:
Oskar Hahn 2012-04-14 12:52:56 +02:00
parent 15a34fda97
commit 6f377453bc
31 changed files with 128 additions and 68 deletions

View File

@ -10,7 +10,7 @@
:license: GNU GPL, see LICENSE for more details.
"""
from system import config
from config.models import config
def is_summary():

View File

@ -19,7 +19,7 @@ from django.db import models
from mptt.models import MPTTModel, TreeForeignKey
from system import config
from config.models import config
from projector.projector import SlideMixin
from projector.api import register_slidemodel
@ -140,3 +140,15 @@ from projector.api import register_slidefunc
from agenda.slides import agenda_show
register_slidefunc(_('Agenda'), agenda_show)
from django.dispatch import receiver
from openslides.config.signals import default_config_value
@receiver(default_config_value, dispatch_uid="agenda_default_config")
def default_config(sender, key, **kwargs):
return {
'agenda_countdown_time': 60,
}.get(key)

View File

@ -1,4 +1,4 @@
{% extends "system/base_system.html" %}
{% extends "config/base_config.html" %}
{% load i18n %}

View File

@ -21,7 +21,7 @@ from utils.pdf import stylesheet
from utils.views import TemplateView, RedirectView, UpdateView, CreateView, DeleteView, PDFView, FormView
from utils.template import Tab
from system import config
from config.models import config
from projector.api import get_active_slide, set_active_slide
@ -201,7 +201,7 @@ class AgendaPDF(PDFView):
class Config(FormView):
permission_required = 'system.can_manage_system'
permission_required = 'config.can_manage_config'
form_class = ConfigForm
template_name = 'agenda/config.html'

View File

@ -21,7 +21,7 @@ from projector.api import register_slidemodel
from projector.models import SlideMixin
from participant.models import Profile
from system import config
from config.models import config
from utils.utils import _propper_unicode
from utils.translation_ext import xugettext as _
from poll.models import BaseOption, BasePoll, CountVotesCast, CountInvalid, Vote
@ -527,3 +527,17 @@ class ApplicationPoll(BasePoll, CountInvalid, CountVotesCast):
def get_absolute_url(self):
return reverse('application_poll_view', args=[self.id])
from django.dispatch import receiver
from openslides.config.signals import default_config_value
@receiver(default_config_value, dispatch_uid="application_default_config")
def default_config(sender, key, **kwargs):
return {
'application_min_supporters': 4,
'application_preamble': 'Die Versammlung möge beschließen,',
'application_pdf_ballot_papers_selection': '1',
'application_pdf_title': _('Applications'),
}.get(key)

View File

@ -1,4 +1,4 @@
{% extends "system/base_system.html" %}
{% extends "config/base_config.html" %}
{% load i18n %}

View File

@ -29,7 +29,7 @@ from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import PageBreak, Paragraph, Spacer, Table, TableStyle
from system import config
from config.models import config
from settings import SITE_ROOT
from utils.pdf import stylesheet
from utils.views import PDFView
@ -777,7 +777,7 @@ class ApplicationPollPDF(PDFView):
class Config(FormView):
permission_required = 'system.can_manage_system'
permission_required = 'config.can_manage_config'
form_class = ConfigForm
template_name = 'application/config.html'

View File

@ -144,3 +144,14 @@ class AssignmentPoll(BasePoll, CountInvalid, CountVotesCast, PublishPollMixin):
CountInvalid.append_pollform_fields(self, fields)
CountVotesCast.append_pollform_fields(self, fields)
from django.dispatch import receiver
from openslides.config.signals import default_config_value
@receiver(default_config_value, dispatch_uid="assignment_default_config")
def default_config(sender, key, **kwargs):
return {
'assignment_pdf_ballot_papers_selection': '1',
'assignment_pdf_title': _('Elections'),
}.get(key)

View File

@ -1,4 +1,4 @@
{% extends "system/base_system.html" %}
{% extends "config/base_config.html" %}
{% load i18n %}

View File

@ -21,7 +21,7 @@ from utils.pdf import print_assignment, print_assignment_poll
from utils.views import FormView
from utils.template import Tab
from system import config
from config.models import config
from poll.views import PollFormView
@ -271,7 +271,7 @@ def set_elected(request, assignment_id, profile_id, elected=True):
class Config(FormView):
permission_required = 'system.can_manage_system'
permission_required = 'config.can_manage_config'
form_class = ConfigForm
template_name = 'assignment/config.html'

View File

@ -0,0 +1 @@

View File

@ -1,10 +1,10 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.system.forms
openslides.config.forms
~~~~~~~~~~~~~~~~~~~~~~~
Forms for the system app.
Forms for the config app.
:copyright: 2011 by the OpenSlides team, see AUTHORS.
:license: GNU GPL, see LICENSE for more details.
@ -14,7 +14,7 @@ from django.forms import Form, CharField, TextInput, BooleanField, IntegerField,
from django.utils.translation import ugettext as _
from utils.forms import CssClassMixin
from system import config
from models import config
class SystemConfigForm(Form, CssClassMixin):

View File

@ -1,10 +1,10 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.system.models
openslides.config.models
~~~~~~~~~~~~~~~~~~~~~~~~
Models for the system app.
Models for the config app.
:copyright: 2011 by the OpenSlides team, see AUTHORS.
:license: GNU GPL, see LICENSE for more details.
@ -13,21 +13,12 @@ from pickle import dumps, loads
import base64
from django.db import models
from django.dispatch import receiver
from utils.translation_ext import xugettext as _
DEFAULT_DATA = {
'event_name': 'OpenSlides',
'event_description': 'Presentation and voting system',
'agenda_countdown_time': 60,
'application_min_supporters': 4,
'application_preamble': 'Die Versammlung möge beschließen,',
'application_pdf_ballot_papers_selection': '1',
'application_pdf_title': _('Applications'),
'assignment_pdf_ballot_papers_selection': '1',
'assignment_pdf_title': _('Elections'),
'system_url': 'http://127.0.0.1:8000',
'system_welcometext': 'Welcome to OpenSlides!',
}
from openslides.config.signals import default_config_value
class ConfigStore(models.Model):
key = models.CharField(max_length=100, primary_key=True)
@ -39,9 +30,10 @@ class ConfigStore(models.Model):
class Meta:
verbose_name = 'config'
permissions = (
('can_manage_system', _("Can manage system configuration", fixstr=True)),
('can_manage_config', _("Can manage config configuration", fixstr=True)),
)
# TODO:
# I used base64 to save pickled Data, there has to be another way see:
# http://stackoverflow.com/questions/2524970/djangounicodedecodeerror-while-storing-pickled-data
@ -57,13 +49,15 @@ class Config(object):
self.config
except AttributeError:
self.load_config()
try:
return self.config[key]
except KeyError:
pass
try:
return DEFAULT_DATA[key]
except KeyError:
for receiver, value in default_config_value.send(sender='config', key=key):
if value is not None:
return value
return None
def __setitem__(self, key, value):
@ -79,6 +73,21 @@ class Config(object):
self.load_config()
self.config[key] = value
config = Config()
@receiver(default_config_value, dispatch_uid="config_default_config")
def default_config(sender, key, **kwargs):
return {
'event_name': 'OpenSlides',
'event_description': 'Presentation and voting system',
'system_url': 'http://127.0.0.1:8000',
'system_welcometext': 'Welcome to OpenSlides!',
}.get(key)
from django.dispatch import receiver
from django.core.urlresolvers import reverse
from django.utils.importlib import import_module
@ -88,7 +97,7 @@ from openslides.utils.signals import template_manipulation
@receiver(template_manipulation, dispatch_uid="system_base_system")
@receiver(template_manipulation, dispatch_uid="config_submenu")
def set_submenu(sender, request, context, **kwargs):
if not request.path.startswith('/config/'):
return None

View File

@ -0,0 +1,15 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.config.signals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Defines Signals for the config.
:copyright: 2011 by the OpenSlides team, see AUTHORS.
:license: GNU GPL, see LICENSE for more details.
"""
from django.dispatch import Signal
default_config_value = Signal(providing_args=['key'])

View File

@ -1,4 +1,4 @@
{% extends "system/base_system.html" %}
{% extends "config/base_config.html" %}
{% load i18n %}
@ -13,8 +13,8 @@
<button class="button" type="submit">
<span class="icon ok">{%trans 'Save' %}</span>
</button>
<a href='{% url config_system %}'>
<button class="button" type="button" onclick="window.location='{% url config_system %}'">
<a href='{% url config_config %}'>
<button class="button" type="button" onclick="window.location='{% url config_config %}'">
<span class="icon cancel">{%trans 'Cancel' %}</span>
</button>
</a>

View File

@ -1,4 +1,4 @@
{% extends "system/base_system.html" %}
{% extends "config/base_config.html" %}
{% load i18n %}

View File

@ -1,10 +1,10 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.system.urls
openslides.config.urls
~~~~~~~~~~~~~~~~~~~~~~
URL list for the system app.
URL list for the config app.
:copyright: 2011 by the OpenSlides team, see AUTHORS.
:license: GNU GPL, see LICENSE for more details.
@ -17,7 +17,7 @@ import settings
from views import GeneralConfig
urlpatterns = patterns('system.views',
urlpatterns = patterns('config.views',
url(r'^general/$',
GeneralConfig.as_view(),
name='config_general',

View File

@ -1,10 +1,10 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.system.views
openslides.config.views
~~~~~~~~~~~~~~~~~~~~~~~
Views for the system app.
Views for the config app.
:copyright: 2011 by the OpenSlides team, see AUTHORS.
:license: GNU GPL, see LICENSE for more details.
@ -21,15 +21,15 @@ from utils.utils import template, permission_required
from utils.views import FormView
from utils.template import Tab
from system.forms import SystemConfigForm, EventConfigForm
from forms import SystemConfigForm, EventConfigForm
from system import config
from models import config
class GeneralConfig(FormView):
permission_required = 'system.can_manage_system'
permission_required = 'config.can_manage_config'
form_class = EventConfigForm
template_name = 'system/general.html'
template_name = 'config/general.html'
def get_initial(self):
return {
@ -55,9 +55,9 @@ class GeneralConfig(FormView):
class Config(FormView):
permission_required = 'system.can_manage_system'
permission_required = 'config.can_manage_config'
form_class = SystemConfigForm
template_name = 'system/system.html'
template_name = 'config/config.html'
def get_initial(self):
return {
@ -93,6 +93,6 @@ def register_tab(request):
return Tab(
title=_('Configuration'),
url=reverse('config_general'),
permission=request.user.has_perm('system.can_manage_system'),
permission=request.user.has_perm('config.can_manage_config'),
selected=selected,
)

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.system.opennslides_settings
openslides.opennslides_settings
~~~~~~~~~~~~~~~~~~~~~~~~~~~
OpenSlides default settings.
@ -103,7 +103,7 @@ INSTALLED_APPS = (
'application',
'assignment',
'participant',
'system',
'config',
)
TEMPLATE_CONTEXT_PROCESSORS = (

View File

@ -23,7 +23,7 @@ from agenda.models import Item
from application.models import Application
from assignment.models import Assignment
from participant.models import Profile
from system.models import ConfigStore
from config.models import ConfigStore
USER_VISIBLE_PERMISSIONS = reduce(list.__add__, [
[p[0] for p in Item._meta.permissions],

View File

@ -42,7 +42,7 @@ from utils.utils import (template, permission_required, gen_confirm_form,
ajax_request, decodedict, encodedict)
from utils.pdf import print_userlist, print_passwords
from utils.template import Tab
from system import config
from config.models import config
from django.db.models import Avg, Max, Min, Count

View File

@ -1,4 +1,4 @@
from system import config
from config.models import config
from projector import SLIDE, Slide

View File

@ -3,9 +3,10 @@ from django.db import models
from api import register_slidemodel
from projector import SlideMixin
from system import config
from config.models import config
from utils.translation_ext import xugettext as _
class ProjectorSlide(models.Model, SlideMixin):
prefix = 'ProjectorSlide'

View File

@ -3,7 +3,7 @@ from time import time
from django.dispatch import receiver
from django.utils.translation import ugettext as _
from system import config
from config.models import config
from openslides.projector.signals import projector_messages

View File

@ -26,7 +26,7 @@ from utils.utils import template, permission_required, \
from utils.template import render_block_to_string
from utils.template import Tab
from system import config
from config.models import config
from api import get_active_slide, set_active_slide
from projector import SLIDE

View File

@ -1,3 +0,0 @@
from system.models import Config
# TODO: Test that this is not thead-save
config = Config()

View File

@ -29,7 +29,7 @@ urlpatterns = patterns('',
(r'^application/', include('application.urls')),
(r'^assignment/', include('assignment.urls')),
(r'^participant/', include('participant.urls')),
(r'^config/', include('system.urls')),
(r'^config/', include('config.urls')),
(r'^projector/', include('projector.urls')),
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_DOC_ROOT}),
(r'^i18n/', include('django.conf.urls.i18n')),

View File

@ -1,5 +1,5 @@
from django.contrib.auth.models import Permission
from system import config
from config.models import config
class AnonymousAuth(object):
"""

View File

@ -36,7 +36,7 @@ from openslides.agenda.models import Item
from openslides.application.models import Application
from openslides.assignment.models import Assignment
from openslides.participant.models import Profile
from system import config
from config.models import config
from openslides.settings import SITE_ROOT
from openslides.utils.utils import permission_required

View File

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*-
from django import template
from system import config
from config.models import config
register = template.Library()