mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
PEP8 fixes
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
"""Custom forms."""
|
||||
|
||||
from django import forms
|
||||
from django.http import QueryDict
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from django.forms.widgets import RadioFieldRenderer, RadioSelect, RadioInput
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.html import conditional_escape
|
||||
from django.http import QueryDict
|
||||
from django.utils.encoding import force_unicode
|
||||
from django.utils.html import conditional_escape
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
|
||||
from modoboa.extensions.admin.templatetags.admin_tags import gender
|
||||
|
||||
|
||||
@@ -20,6 +23,7 @@ class FiltersSetForm(forms.Form):
|
||||
|
||||
|
||||
class CustomRadioInput(RadioInput):
|
||||
|
||||
def __unicode__(self):
|
||||
return self.render()
|
||||
|
||||
@@ -39,13 +43,16 @@ class CustomRadioInput(RadioInput):
|
||||
|
||||
|
||||
class CustomRadioFieldRenderer(RadioFieldRenderer):
|
||||
|
||||
def __iter__(self):
|
||||
for i, choice in enumerate(self.choices):
|
||||
yield CustomRadioInput(self.name, self.value, self.attrs.copy(), choice, i)
|
||||
yield CustomRadioInput(
|
||||
self.name, self.value, self.attrs.copy(), choice, i)
|
||||
|
||||
def __getitem__(self, idx):
|
||||
choice = self.choices[idx]
|
||||
return CustomRadioInput(self.name, self.value, self.attrs.copy(), choice, idx)
|
||||
return CustomRadioInput(
|
||||
self.name, self.value, self.attrs.copy(), choice, idx)
|
||||
|
||||
def render(self):
|
||||
return mark_safe(u'\n'.join([force_unicode(w) for w in self]))
|
||||
@@ -56,6 +63,7 @@ class CustomRadioSelect(RadioSelect):
|
||||
|
||||
|
||||
class FilterForm(forms.Form):
|
||||
|
||||
def __init__(self, conditions, actions, request, *args, **kwargs):
|
||||
super(FilterForm, self).__init__(*args, **kwargs)
|
||||
|
||||
@@ -80,10 +88,18 @@ class FilterForm(forms.Form):
|
||||
]
|
||||
|
||||
self.cond_templates = [
|
||||
{"name": "Subject", "label": _("Subject"), "operators": self.header_operators},
|
||||
{"name": "From", "label": _("Sender"), "operators": self.header_operators},
|
||||
{"name": "To", "label": _("Recipient"), "operators": self.header_operators},
|
||||
{"name": "Cc", "label": _("Cc"), "operators": self.header_operators},
|
||||
{"name": "Subject",
|
||||
"label": _("Subject"),
|
||||
"operators": self.header_operators},
|
||||
{"name": "From",
|
||||
"label": _("Sender"),
|
||||
"operators": self.header_operators},
|
||||
{"name": "To",
|
||||
"label": _("Recipient"),
|
||||
"operators": self.header_operators},
|
||||
{"name": "Cc",
|
||||
"label": _("Cc"),
|
||||
"operators": self.header_operators},
|
||||
{"name": "size", "label": _("Size"),
|
||||
"operators": [("over", _("is greater than"), "number"),
|
||||
("under", _("is less than"), "number")]},
|
||||
@@ -160,10 +176,14 @@ class FilterForm(forms.Form):
|
||||
arg = args[cnt]
|
||||
aname = "action_arg_%d_%d" % (self.actions_cnt, cnt)
|
||||
if arg["type"] == "string":
|
||||
self.fields[aname] = forms.CharField(max_length=255, initial=value)
|
||||
self.fields[aname] = forms.CharField(
|
||||
max_length=255,
|
||||
initial=value)
|
||||
elif arg["type"] == "list":
|
||||
choices = getattr(self, arg["vloader"])(request)
|
||||
self.fields[aname] = forms.ChoiceField(initial=value, choices=choices)
|
||||
self.fields[aname] = forms.ChoiceField(
|
||||
initial=value,
|
||||
choices=choices)
|
||||
self.actions_cnt += 1
|
||||
|
||||
def _build_redirect_field(self, request, value):
|
||||
@@ -177,7 +197,10 @@ class FilterForm(forms.Form):
|
||||
for fd in folders:
|
||||
value = fd["path"] if "path" in fd else fd["name"]
|
||||
if parentmb:
|
||||
ret += [(value, fd["name"].replace("%s%s" % (parentmb, imapc.hdelimiter), ""))]
|
||||
ret += [
|
||||
(value, fd["name"].replace(
|
||||
"%s%s" % (parentmb, imapc.hdelimiter), ""))
|
||||
]
|
||||
else:
|
||||
ret += [(value, fd["name"])]
|
||||
if "sub" in fd:
|
||||
@@ -206,7 +229,10 @@ class FilterForm(forms.Form):
|
||||
argcpt = 0
|
||||
while True:
|
||||
try:
|
||||
naction += (self.cleaned_data["action_arg_%d_%d" % (cpt, argcpt)],)
|
||||
naction += (
|
||||
self.cleaned_data[
|
||||
"action_arg_%d_%d" %
|
||||
(cpt, argcpt)],)
|
||||
except KeyError:
|
||||
break
|
||||
argcpt += 1
|
||||
@@ -228,8 +254,12 @@ def build_filter_form_from_qdict(request):
|
||||
if cpt == int(request.POST["conds"]):
|
||||
break
|
||||
if "cond_target_%d" % i in request.POST:
|
||||
qdict["cond_target_%d" % cpt] = request.POST["cond_target_%d" % i]
|
||||
qdict["cond_operator_%d" % cpt] = request.POST["cond_operator_%d" % i]
|
||||
qdict["cond_target_%d" % cpt] = (
|
||||
request.POST["cond_target_%d" % i]
|
||||
)
|
||||
qdict["cond_operator_%d" % cpt] = (
|
||||
request.POST["cond_operator_%d" % i]
|
||||
)
|
||||
qdict["cond_value_%d" % cpt] = request.POST["cond_value_%d" % i]
|
||||
condtarget = request.POST["cond_target_%d" % i]
|
||||
condop = request.POST["cond_operator_%d" % i]
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
# coding: utf-8
|
||||
|
||||
from django.utils.translation import ugettext as _
|
||||
"""Internal tools."""
|
||||
|
||||
from sievelib.factory import FiltersSet
|
||||
from sievelib.managesieve import Client, Error
|
||||
from sievelib.parser import Parser
|
||||
from sievelib.factory import FiltersSet
|
||||
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from modoboa.lib import parameters
|
||||
from modoboa.lib.exceptions import ModoboaException
|
||||
from modoboa.lib.connections import ConnectionsManager, ConnectionError
|
||||
from modoboa.lib.exceptions import ModoboaException
|
||||
|
||||
|
||||
class SieveClientError(ModoboaException):
|
||||
@@ -19,7 +23,7 @@ class SieveClient(object):
|
||||
def __init__(self, user=None, password=None):
|
||||
try:
|
||||
ret, msg = self.login(user, password)
|
||||
except Error, e:
|
||||
except Error as e:
|
||||
raise ConnectionError(str(e))
|
||||
if not ret:
|
||||
raise ConnectionError(msg)
|
||||
@@ -38,7 +42,10 @@ class SieveClient(object):
|
||||
except Error:
|
||||
ret = False
|
||||
if not ret:
|
||||
return False, _("Connection to MANAGESIEVE server failed, check your configuration")
|
||||
return False, _(
|
||||
"Connection to MANAGESIEVE server failed, check your "
|
||||
"configuration"
|
||||
)
|
||||
return True, None
|
||||
|
||||
def logout(self):
|
||||
@@ -51,13 +58,13 @@ class SieveClient(object):
|
||||
if self.msc is not None:
|
||||
try:
|
||||
self.msc.capability()
|
||||
except Error, e:
|
||||
except Error as e:
|
||||
pass
|
||||
else:
|
||||
return
|
||||
try:
|
||||
ret, msg = self.login(user, password)
|
||||
except (Error, ssl.SSLError), e:
|
||||
except (Error, ssl.SSLError) as e:
|
||||
raise ConnectionError(e)
|
||||
if not ret:
|
||||
raise ConnectionError(msg)
|
||||
@@ -80,10 +87,11 @@ class SieveClient(object):
|
||||
return fs
|
||||
|
||||
def pushscript(self, name, content, active=False):
|
||||
if type(content) is unicode:
|
||||
if isinstance(content, unicode):
|
||||
content = content.encode("utf-8")
|
||||
if not self.msc.havespace(name, len(content)):
|
||||
error = "%s (%s)" % (_("Not enough space on server"), self.msc.errmsg)
|
||||
error = "%s (%s)" % (
|
||||
_("Not enough space on server"), self.msc.errmsg)
|
||||
raise SieveClientError(error)
|
||||
if not self.msc.putscript(name, content):
|
||||
raise SieveClientError(self.msc.errmsg)
|
||||
|
||||
@@ -34,7 +34,7 @@ def fset_menu(mode, setname):
|
||||
"img": "fa fa-plus",
|
||||
"label": _("New filter"),
|
||||
"url": reverse("sievefilters:filter_add",
|
||||
args=[setname]),
|
||||
args=[setname]),
|
||||
"modal": True,
|
||||
"autowidth": True,
|
||||
"modalcb": "filterform_cb"}
|
||||
@@ -45,7 +45,7 @@ def fset_menu(mode, setname):
|
||||
"img": "fa fa-download-alt",
|
||||
"label": _("Save filters set"),
|
||||
"url": reverse("sievefilters:fs_save",
|
||||
args=[setname])},
|
||||
args=[setname])},
|
||||
]
|
||||
|
||||
entries += [
|
||||
@@ -53,7 +53,7 @@ def fset_menu(mode, setname):
|
||||
"img": "fa fa-check",
|
||||
"label": _("Activate filters set"),
|
||||
"url": reverse("sievefilters:fs_activate",
|
||||
args=[setname])},
|
||||
args=[setname])},
|
||||
{"name": "removefs",
|
||||
"img": "fa fa-trash",
|
||||
"label": _("Remove filters set"),
|
||||
|
||||
@@ -2,7 +2,7 @@ if __name__ == "__main__":
|
||||
clt = ManageSieveClient("mail.koalabs.org", 2000)
|
||||
if clt.connect("tonio@ngyn.org", "aka/12;c", starttls=True):
|
||||
print clt.get_sasl_mechanisms()
|
||||
print clt.get_sieve_capabilities()
|
||||
print clt.get_sieve_capabilities()
|
||||
print clt.havespace("test", 45)
|
||||
|
||||
if not clt.putscript("myscript", """require ["fileinto", "envelope"];
|
||||
@@ -40,4 +40,3 @@ InvalidSieveCommand
|
||||
else:
|
||||
print clt.errmsg
|
||||
clt.logout()
|
||||
|
||||
|
||||
@@ -1,25 +1,31 @@
|
||||
# coding: utf-8
|
||||
from sievelib.managesieve import Error
|
||||
from sievelib.commands import BadArgument, BadValue
|
||||
|
||||
"""Custom views."""
|
||||
|
||||
from rfc6266 import build_header
|
||||
from django.shortcuts import render
|
||||
from django.http import HttpResponse
|
||||
from django.template.loader import render_to_string
|
||||
from sievelib.commands import BadArgument, BadValue
|
||||
from sievelib.managesieve import Error
|
||||
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.core.urlresolvers import reverse
|
||||
from modoboa.lib import parameters
|
||||
from modoboa.lib.web_utils import _render_error, \
|
||||
ajax_response, render_to_json_response
|
||||
from modoboa.lib.connections import ConnectionError
|
||||
from modoboa.lib.exceptions import BadRequest
|
||||
from modoboa.extensions.admin.lib import needs_mailbox
|
||||
from .lib import SieveClient, SieveClientError
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from .forms import (
|
||||
FilterForm, build_filter_form_from_qdict, build_filter_form_from_filter,
|
||||
FiltersSetForm
|
||||
)
|
||||
from .lib import SieveClient, SieveClientError
|
||||
from .templatetags.sfilters_tags import fset_menu
|
||||
from modoboa.extensions.admin.lib import needs_mailbox
|
||||
from modoboa.lib import parameters
|
||||
from modoboa.lib.connections import ConnectionError
|
||||
from modoboa.lib.exceptions import BadRequest
|
||||
from modoboa.lib.web_utils import (
|
||||
_render_error, ajax_response, render_to_json_response
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
@@ -30,12 +36,12 @@ def index(request, tplname="sievefilters/index.html"):
|
||||
try:
|
||||
sc = SieveClient(user=request.user.username,
|
||||
password=request.session["password"])
|
||||
except ConnectionError, e:
|
||||
except ConnectionError as e:
|
||||
return _render_error(request, user_context={"error": e})
|
||||
|
||||
try:
|
||||
active_script, scripts = sc.listscripts()
|
||||
except Error, e:
|
||||
except Error as e:
|
||||
return _render_error(request, user_context={"error": e})
|
||||
|
||||
if active_script is None:
|
||||
@@ -73,7 +79,7 @@ def getfs(request, name):
|
||||
error = None
|
||||
try:
|
||||
content = sc.getscript(name, format=editormode)
|
||||
except SieveClientError, e:
|
||||
except SieveClientError as e:
|
||||
error = str(e)
|
||||
else:
|
||||
if content is None:
|
||||
@@ -104,7 +110,8 @@ def build_filter_ctx(ctx, form):
|
||||
return ctx
|
||||
|
||||
|
||||
def submitfilter(request, setname, okmsg, tplname, tplctx, update=False, sc=None):
|
||||
def submitfilter(
|
||||
request, setname, okmsg, tplname, tplctx, update=False, sc=None):
|
||||
form = build_filter_form_from_qdict(request)
|
||||
if form.is_valid():
|
||||
if sc is None:
|
||||
@@ -169,11 +176,13 @@ def editfilter(request, setname, fname, tplname="sievefilters/filter.html"):
|
||||
sc = SieveClient(user=request.user.username,
|
||||
password=request.session["password"])
|
||||
if request.method == "POST":
|
||||
return submitfilter(request, setname, _("Filter modified"), tplname, ctx,
|
||||
update=True, sc=sc)
|
||||
return submitfilter(
|
||||
request, setname, _("Filter modified"), tplname, ctx,
|
||||
update=True, sc=sc
|
||||
)
|
||||
|
||||
fset = sc.getscript(setname, format="fset")
|
||||
if type(fname) is unicode:
|
||||
if isinstance(fname, unicode):
|
||||
fname = fname.encode("utf-8")
|
||||
f = fset.getfilter(fname)
|
||||
form = build_filter_form_from_filter(request, fname, f)
|
||||
@@ -199,13 +208,13 @@ def removefilter(request, setname, fname):
|
||||
@login_required
|
||||
@needs_mailbox()
|
||||
def savefs(request, name):
|
||||
if not "scriptcontent" in request.POST:
|
||||
if "scriptcontent" not in request.POST:
|
||||
return
|
||||
sc = SieveClient(user=request.user.username,
|
||||
password=request.session["password"])
|
||||
try:
|
||||
sc.pushscript(name, request.POST["scriptcontent"])
|
||||
except SieveClientError, e:
|
||||
except SieveClientError as e:
|
||||
error = str(e)
|
||||
return ajax_response(request, "ko", respmsg=error)
|
||||
return ajax_response(request, respmsg=_("Filters set saved"))
|
||||
@@ -258,7 +267,7 @@ def activate_filters_set(request, name):
|
||||
password=request.session["password"])
|
||||
try:
|
||||
sc.activatescript(name)
|
||||
except SieveClientError, e:
|
||||
except SieveClientError as e:
|
||||
return ajax_response(request, "ko", respmsg=str(e))
|
||||
return ajax_response(request, respmsg=_("Filters set activated"))
|
||||
|
||||
@@ -270,7 +279,7 @@ def download_filters_set(request, name):
|
||||
password=request.session["password"])
|
||||
try:
|
||||
script = sc.getscript(name)
|
||||
except SieveClientError, e:
|
||||
except SieveClientError as e:
|
||||
return ajax_response(request, "ko", respmsg=str(e))
|
||||
|
||||
resp = HttpResponse(script)
|
||||
@@ -285,7 +294,7 @@ def download_filters_set(request, name):
|
||||
def toggle_filter_state(request, setname, fname):
|
||||
sc = SieveClient(user=request.user.username,
|
||||
password=request.session["password"])
|
||||
if type(fname) is unicode:
|
||||
if isinstance(fname, unicode):
|
||||
fname = fname.encode("utf-8")
|
||||
fset = sc.getscript(setname, format="fset")
|
||||
if fset.is_filter_disabled(fname):
|
||||
|
||||
Reference in New Issue
Block a user