Merge pull request #868 from tonioo/feature/django19

Feature: Django19
This commit is contained in:
Antoine Nguyen
2016-04-30 13:35:59 +02:00
30 changed files with 65 additions and 52 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ from django.db import models
from django.utils.encoding import python_2_unicode_compatible, smart_text
from django.utils.translation import ugettext as _, ugettext_lazy
import reversion
from reversion import revisions as reversion
from modoboa.core import signals as core_signals
from modoboa.lib.email_utils import split_mailbox
+4 -3
View File
@@ -1,12 +1,13 @@
"""Models related to domains management."""
from django.contrib.contenttypes import generic
from django.db import models
from django.db.models.manager import Manager
from django.utils.encoding import python_2_unicode_compatible, smart_text
from django.utils.translation import ugettext as _, ugettext_lazy
import reversion
from django.contrib.contenttypes.fields import GenericRelation
from reversion import revisions as reversion
from modoboa.core.models import User, ObjectAccess
from modoboa.core import signals as core_signals
@@ -41,7 +42,7 @@ class Domain(AdminObject):
help_text=ugettext_lazy("Check to activate this domain"),
default=True
)
owners = generic.GenericRelation(ObjectAccess)
owners = GenericRelation(ObjectAccess)
type = models.CharField(default="domain", max_length=20)
objects = DomainManager()
+3 -3
View File
@@ -4,9 +4,9 @@ from django.db import models
from django.utils.encoding import python_2_unicode_compatible, smart_text
from django.utils.translation import ugettext as _, ugettext_lazy
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.fields import GenericRelation
import reversion
from reversion import revisions as reversion
from modoboa.core import models as core_models
from modoboa.core import signals as core_signals
@@ -46,7 +46,7 @@ class DomainAlias(AdminObject):
default=True
)
owners = generic.GenericRelation(core_models.ObjectAccess)
owners = GenericRelation(core_models.ObjectAccess)
objects = DomainAliasManager()
+1 -1
View File
@@ -10,7 +10,7 @@ from django.db.models.manager import Manager
from django.utils.encoding import python_2_unicode_compatible, smart_text
from django.utils.translation import ugettext as _, ugettext_lazy
import reversion
from reversion import revisions as reversion
from .base import AdminObject
from .domain import Domain
+1 -1
View File
@@ -1,4 +1,4 @@
{% load i18n form_tags %}{% load url from future %}
{% load i18n form_tags %}
<h2>{% trans "Forward" %} <small>{% trans "Automatically forward emails to another address" %}</small></h2>
<hr>
<form class="form-horizontal" method="POST" action="{% url 'user_forward' %}"
@@ -1,5 +1,5 @@
{% extends "admin/listing.html" %}
{% load admin_tags lib_tags i18n %}{% load url from future %}
{% load admin_tags lib_tags i18n %}
{% load static %}
{% block pagetitle %}{% trans "Identities" %}{% endblock %}
+4 -3
View File
@@ -5,6 +5,7 @@ Admin extension tags.
from django import template
from django.core.urlresolvers import reverse
from django.template.loader import render_to_string
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _, ugettext_lazy
from modoboa.lib import events
@@ -192,7 +193,7 @@ def identity_actions(user, ident):
return render_actions(actions)
@register.assignment_tag
@register.simple_tag
def check_identity_status(identity):
"""Check if identity is enabled or not."""
if identity.__class__.__name__ == "User":
@@ -232,7 +233,7 @@ def domain_aliases(domain):
res = ''
for alias in domain.aliases.all():
res += '%s<br/>' % alias.name
return res
return mark_safe(res)
@register.simple_tag
@@ -283,4 +284,4 @@ def get_extra_admin_content(user, target, currentpage):
res = events.raiseQueryEvent(
"ExtraAdminContent", user, target, currentpage
)
return "".join(res)
return mark_safe("".join(res))
+2 -1
View File
@@ -1,3 +1,4 @@
"""Alias related views."""
from django.contrib.auth.decorators import (
login_required, permission_required
@@ -7,7 +8,7 @@ from django.db import IntegrityError
from django.shortcuts import render
from django.utils.translation import ugettext as _, ungettext
import reversion
from reversion import revisions as reversion
from modoboa.core import signals as core_signals
from modoboa.lib.exceptions import PermDeniedException, Conflict
+4 -6
View File
@@ -1,6 +1,4 @@
"""
Domain related views.
"""
"""Domain related views."""
from django.http import HttpResponseRedirect
from django.utils.translation import ugettext as _, ungettext
@@ -11,7 +9,7 @@ from django.contrib.auth.decorators import (
login_required, permission_required, user_passes_test
)
import reversion
from reversion import revisions as reversion
from modoboa.core.models import User
from modoboa.core import signals as core_signals
@@ -38,8 +36,8 @@ def index(request):
@login_required
@user_passes_test(
lambda u: u.has_perm("admin.view_domains")
or u.has_perm("admin.view_mailboxes")
lambda u: u.has_perm("admin.view_domains") or
u.has_perm("admin.view_mailboxes")
)
def _domains(request):
sort_order, sort_dir = get_sort_order(request.GET, "name")
+1 -1
View File
@@ -7,7 +7,7 @@ from django.shortcuts import render
from django.utils.translation import ugettext as _, ungettext
from django.views.decorators.csrf import ensure_csrf_cookie
import reversion
from reversion import revisions as reversion
from modoboa.core.models import User
from modoboa.lib import parameters, events
+1 -1
View File
@@ -10,7 +10,7 @@ from django.db import transaction
from django.shortcuts import render
from django.utils.translation import ugettext as _
import reversion
from reversion import revisions as reversion
from modoboa.lib import events
from modoboa.lib.exceptions import ModoboaException, Conflict
+1 -1
View File
@@ -3,7 +3,7 @@
from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _
import reversion
from reversion import revisions as reversion
from modoboa.lib.web_utils import (
render_to_json_response, _render_to_string
+2
View File
@@ -7,6 +7,7 @@ import getpass
import os
import sys
import django
from django.template import Context, Template
import dj_database_url
@@ -167,6 +168,7 @@ class PostfixMapsCommand(Command):
def handle(self, parsed_args):
"""Command entry point."""
django.setup()
dbinfo = None
if parsed_args.dburl:
dbinfo = dj_database_url.config(default=parsed_args.dburl[0])
+1 -1
View File
@@ -6,7 +6,7 @@ from django.db.models.signals import post_delete
from django.dispatch import receiver
from django.utils.translation import ugettext as _
import reversion
from reversion import revisions as reversion
@receiver(reversion.post_revision_commit)
+3 -3
View File
@@ -6,14 +6,14 @@ from django.contrib.auth.hashers import make_password, is_password_usable
from django.contrib.auth.models import (
UserManager, Group, PermissionsMixin
)
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.utils import timezone
from django.utils.encoding import python_2_unicode_compatible, smart_text
from django.utils.translation import ugettext as _, ugettext_lazy
import reversion
from reversion import revisions as reversion
from modoboa.core.password_hashers import get_password_hasher
from modoboa.lib import events, parameters
@@ -470,7 +470,7 @@ class ObjectAccess(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
content_object = GenericForeignKey('content_type', 'object_id')
is_owner = models.BooleanField(default=False)
class Meta:
+1 -1
View File
@@ -1,4 +1,4 @@
{% load i18n lib_tags %}{% load url from future %}
{% load i18n lib_tags %}
<h2>{% trans "Parameters" %} <small>{% trans "Configure Modoboa" %}</small></h2><hr />
<form id="settings_form" method="POST" action="{% url 'core:parameter_save' %}" class="form-horizontal">{% csrf_token %}
{% include "common/parameters.html" %}
@@ -1,4 +1,4 @@
{% load i18n %}{% load url from future %}
{% load i18n %}
<h2>{% trans "Preferences" %} <small>{% trans "Customize Modoboa" %}</small></h2>
<hr>
{% if forms %}
@@ -1,5 +1,4 @@
{% load i18n form_tags %}
{% load url from future %}
<h2>{% trans "Profile" %} <small>{% trans "Update your personal information" %}</small></h2>
<hr>
+7 -5
View File
@@ -7,6 +7,7 @@ from django.contrib.sessions.models import Session
from django.core.urlresolvers import reverse
from django.template.loader import render_to_string
from django.utils import timezone
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
from modoboa.lib import events
@@ -149,11 +150,12 @@ def visirule(field):
field.html_name not in field.form.visirules:
return ""
rule = field.form.visirules[field.html_name]
return " data-visibility-field='%s' data-visibility-value='%s' " \
% (rule["field"], rule["value"])
return mark_safe(
" data-visibility-field='{}' data-visibility-value='{}' "
.format(rule["field"], rule["value"]))
@register.assignment_tag
@register.simple_tag
def get_version():
import pkg_resources
return pkg_resources.get_distribution("modoboa").version
@@ -234,10 +236,10 @@ def display_messages(msgs):
else:
timeout = "undefined"
return """
return mark_safe("""
<script type="text/javascript">
$(document).ready(function() {
$('body').notify('%s', '%s', %s);
});
</script>
""" % (level, text, timeout)
""" % (level, text, timeout))
+1 -1
View File
@@ -2,7 +2,7 @@
from django.utils.translation import ugettext as _
from django.contrib.sites.models import get_current_site
from django.contrib.sites.shortcuts import get_current_site
from modoboa.core.extensions import exts_pool
from modoboa.lib import parameters
+11 -4
View File
@@ -1,19 +1,26 @@
# coding: utf-8
from Crypto.Cipher import AES
"""Crypto related utilities."""
import base64
import random
import string
from Crypto.Cipher import AES
from modoboa.lib import parameters
def random_key(l=16):
"""Generate a random key
"""Generate a random key.
:param integer l: the key's length
:return: a string
"""
char_set = string.digits + string.letters + string.punctuation
return ''.join(random.sample(char_set * l, l))
population = string.digits + string.letters + string.punctuation
while True:
key = "".join(random.sample(population * l, l))
if len(key) == l:
return key
def encrypt(clear):
+4 -1
View File
@@ -1,7 +1,10 @@
import reversion
"""Modoboa Lib models."""
from django.db import models
from django.conf import settings
from reversion import revisions as reversion
class Parameter(models.Model):
name = models.CharField(max_length=255)
+2 -1
View File
@@ -4,6 +4,7 @@ Form rendering tags.
from django import forms
from django import template
from django.utils.safestring import mark_safe
from django.template.loader import render_to_string
from modoboa.lib.form_utils import SeparatorField
@@ -20,7 +21,7 @@ def render_form(form, tpl=None):
ret = ""
for field in form:
ret += "%s\n" % render_field(field)
return ret
return mark_safe(ret)
def configure_field_classes(field):
+1 -1
View File
@@ -4,7 +4,7 @@ from django.db import models
from django.db.models.manager import Manager
from django.utils.translation import ugettext as _, ugettext_lazy
import reversion
from reversion import revisions as reversion
from modoboa.admin import models as admin_models
from modoboa.lib import parameters
+1 -1
View File
@@ -69,7 +69,7 @@ TwocolsNav.prototype = {
toggle_field_visibility: function($field, $parent, value) {
if ($parent.attr("disabled") === undefined &&
$field.attr("data-visibility-value") == value) {
$field.attr("data-visibility-value") === value) {
$field.attr("disabled", null);
$field.show();
this.propagate_change($field);
-1
View File
@@ -1,5 +1,4 @@
<!DOCTYPE html>
{% load url from future %}
{% load static %}
<html lang="{{ LANGUAGE_CODE }}">
<head>
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE html>
{% load static %}
{% load i18n core_tags lib_tags %}{% load url from future %}
{% load i18n core_tags lib_tags %}
<html lang="{{ LANGUAGE_CODE }}">
<head>
<meta charset="utf-8" />
@@ -1,7 +1,6 @@
<!DOCTYPE html>
{% load i18n core_tags lib_tags form_tags %}
{% load static %}
{% load url from future %}
<html lang="{{ LANGUAGE_CODE }}">
<head>
<meta charset="utf-8" />
+3 -3
View File
@@ -1,5 +1,5 @@
django<=1.8.99
django-reversion==1.9.3
django>=1.9,<=1.9.99
django-reversion==1.10.2
dj-database-url
pycrypto
argparse
@@ -9,7 +9,7 @@ bcrypt==2.0.0
django-versionfield2>=0.3.3
requests
django-xforwardedfor-middleware
django-passwords==0.3.4
django-passwords==0.3.10
rfc6266
progressbar==2.3
djangorestframework==3.3.1
+2 -2
View File
@@ -83,9 +83,9 @@ AUTHENTICATION_BACKENDS = (
'modoboa.lib.authbackends.SimpleBackend',
)
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + [
'modoboa.core.context_processors.top_notifications',
)
]
ROOT_URLCONF = 'test_project.urls'