Browse Source

Move misago_forms template tag to misago_admin_forms

rafalp 6 years ago
parent
commit
675f0c8a85

+ 54 - 0
misago/admin/forms.py

@@ -0,0 +1,54 @@
+from django.forms import DateTimeField, RadioSelect, TypedChoiceField, ValidationError
+from django.utils.translation import ugettext_lazy as _
+
+from misago.core.utils import parse_iso8601_string
+
+
+class IsoDateTimeField(DateTimeField):
+    input_formats = ['iso8601']
+
+    def prepare_value(self, value):
+        try:
+            return value.isoformat()
+        except AttributeError:
+            return value
+
+    def to_python(self, value):
+        """
+        Validates that the input can be converted to a datetime. Returns a
+        Python datetime.datetime object.
+        """
+        if value in self.empty_values:
+            return None
+
+        try:
+            return parse_iso8601_string(value)
+        except ValueError:
+            raise ValidationError(self.error_messages['invalid'], code='invalid')
+
+
+class YesNoSwitchBase(TypedChoiceField):
+    def prepare_value(self, value):
+        """normalize bools to binary 1/0 so field works on them too"""
+        if value in (True, 'True', 'true', 1, '1'):
+            return 1
+        else:
+            return 0
+
+    def clean(self, value):
+        return self.prepare_value(value)
+
+
+def YesNoSwitch(**kwargs):
+    yes_label = kwargs.pop('yes_label', _("Yes"))
+    no_label = kwargs.pop('no_label', _("No"))
+
+    return YesNoSwitchBase(
+        coerce=int,
+        choices=[
+            (1, yes_label),
+            (0, no_label),
+        ],
+        widget=RadioSelect(attrs={'class': 'yesno-switch'}),
+        **kwargs
+    )

+ 0 - 0
misago/admin/templatetags/__init__.py


+ 0 - 0
misago/core/templatetags/misago_forms.py → misago/admin/templatetags/misago_admin_forms.py


+ 28 - 0
misago/admin/tests/test_forms.py

@@ -0,0 +1,28 @@
+from django import forms
+from django.test import TestCase
+
+from misago.admin.forms import YesNoSwitch
+
+
+class YesNoForm(forms.Form):
+    test_field = YesNoSwitch(label='Hello!')
+
+
+class YesNoSwitchTests(TestCase):
+    def test_valid_inputs(self):
+        """YesNoSwitch returns valid values for valid input"""
+        for true in ('1', 'True', 'true', 1, True):
+            form = YesNoForm({'test_field': true})
+            form.full_clean()
+            self.assertEqual(form.cleaned_data['test_field'], 1)
+
+        for false in ('0', 'False', 'false', 'egebege', False, 0):
+            form = YesNoForm({'test_field': false})
+            form.full_clean()
+            self.assertEqual(form.cleaned_data['test_field'], 0)
+
+    def test_dontstripme_input_is_ignored(self):
+        """YesNoSwitch returns valid values for invalid input"""
+        form = YesNoForm({'test_field': '221'})
+        form.full_clean()
+        self.assertFalse(form.cleaned_data.get('test_field'))

+ 88 - 0
misago/admin/tests/test_templatetags.py

@@ -0,0 +1,88 @@
+from django import forms
+from django.template import Context, Template, TemplateSyntaxError
+from django.test import TestCase
+
+
+class TestForm(forms.Form):
+    somefield = forms.CharField(label="Hello!", max_length=255)
+
+
+class FormRowTests(TestCase):
+    def setUp(self):
+        self.context = Context({'form': TestForm()})
+
+    def test_form_row_no_args(self):
+        """form_row with no args renders form row"""
+        tpl_content = """
+{% load misago_admin_forms %}
+
+{% form_row form.somefield %}
+"""
+
+        tpl = Template(tpl_content)
+        render = tpl.render(self.context).strip()
+        self.assertIn('id_somefield', render)
+
+    def test_form_row_with_args(self):
+        """form_row with args renders form row"""
+        tpl_content = """
+{% load misago_admin_forms %}
+
+{% form_row form.somefield "col-md-3" "col-md-9" %}
+"""
+
+        tpl = Template(tpl_content)
+        render = tpl.render(self.context).strip()
+
+        self.assertIn('id_somefield', render)
+        self.assertIn('col-md-3', render)
+        self.assertIn('col-md-9', render)
+
+    def test_form_row_with_value_args(self):
+        """form_row with values args renders form row"""
+        tpl_content = """
+{% load misago_admin_forms %}
+
+{% with label="col-md-3" field="col-md-9" %}
+    {% form_row form.somefield label field %}
+{% endwith %}
+"""
+
+        tpl = Template(tpl_content)
+        render = tpl.render(self.context).strip()
+        self.assertIn('id_somefield', render)
+        self.assertIn('col-md-3', render)
+        self.assertIn('col-md-9', render)
+
+    def test_form_row_with_no_args(self):
+        """form_row with no args raises exception"""
+        tpl_content = """
+{% load misago_admin_forms %}
+
+{% form_row %}
+"""
+
+        with self.assertRaises(TemplateSyntaxError):
+            Template(tpl_content)
+
+    def test_form_row_with_two_args(self):
+        """form_row with two args raises exception"""
+        tpl_content = """
+{% load misago_admin_forms %}
+
+{% form_row form.somefield "col-md-9" %}
+"""
+
+        with self.assertRaises(TemplateSyntaxError):
+            Template(tpl_content)
+
+    def test_form_row_with_four_args(self):
+        """form_row with four args raises exception"""
+        tpl_content = """
+{% load misago_admin_forms %}
+
+{% form_row form.somefield "col-md-9" "col-md-9" "col-md-9" %}
+"""
+
+        with self.assertRaises(TemplateSyntaxError):
+            Template(tpl_content)

+ 1 - 87
misago/core/tests/test_templatetags.py

@@ -1,5 +1,4 @@
-from django import forms
-from django.template import Context, Template, TemplateSyntaxError
+from django.template import Context, Template
 from django.test import TestCase, override_settings
 
 from misago.core.templatetags import misago_batch
@@ -102,91 +101,6 @@ class BatchTests(TestCase):
             self.assertEqual(test_yield, yields[i])
 
 
-class TestForm(forms.Form):
-    somefield = forms.CharField(label="Hello!", max_length=255)
-
-
-class FormRowTests(TestCase):
-    def setUp(self):
-        self.context = Context({'form': TestForm()})
-
-    def test_form_row_no_args(self):
-        """form_row with no args renders form row"""
-        tpl_content = """
-{% load misago_forms %}
-
-{% form_row form.somefield %}
-"""
-
-        tpl = Template(tpl_content)
-        render = tpl.render(self.context).strip()
-        self.assertIn('id_somefield', render)
-
-    def test_form_row_with_args(self):
-        """form_row with args renders form row"""
-        tpl_content = """
-{% load misago_forms %}
-
-{% form_row form.somefield "col-md-3" "col-md-9" %}
-"""
-
-        tpl = Template(tpl_content)
-        render = tpl.render(self.context).strip()
-
-        self.assertIn('id_somefield', render)
-        self.assertIn('col-md-3', render)
-        self.assertIn('col-md-9', render)
-
-    def test_form_row_with_value_args(self):
-        """form_row with values args renders form row"""
-        tpl_content = """
-{% load misago_forms %}
-
-{% with label="col-md-3" field="col-md-9" %}
-    {% form_row form.somefield label field %}
-{% endwith %}
-"""
-
-        tpl = Template(tpl_content)
-        render = tpl.render(self.context).strip()
-        self.assertIn('id_somefield', render)
-        self.assertIn('col-md-3', render)
-        self.assertIn('col-md-9', render)
-
-    def test_form_row_with_no_args(self):
-        """form_row with no args raises exception"""
-        tpl_content = """
-{% load misago_forms %}
-
-{% form_row %}
-"""
-
-        with self.assertRaises(TemplateSyntaxError):
-            Template(tpl_content)
-
-    def test_form_row_with_two_args(self):
-        """form_row with two args raises exception"""
-        tpl_content = """
-{% load misago_forms %}
-
-{% form_row form.somefield "col-md-9" %}
-"""
-
-        with self.assertRaises(TemplateSyntaxError):
-            Template(tpl_content)
-
-    def test_form_row_with_four_args(self):
-        """form_row with four args raises exception"""
-        tpl_content = """
-{% load misago_forms %}
-
-{% form_row form.somefield "col-md-9" "col-md-9" "col-md-9" %}
-"""
-
-        with self.assertRaises(TemplateSyntaxError):
-            Template(tpl_content)
-
-
 class MockUser(object):
     id = 12
     pk = 12

+ 1 - 1
misago/templates/misago/admin/agreements/form.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/agreements/list.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/list.html" %}
-{% load i18n misago_capture misago_forms %}
+{% load i18n misago_capture misago_admin_forms %}
 
 
 {% block page-actions %}

+ 1 - 1
misago/templates/misago/admin/attachments/list.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/list.html" %}
-{% load i18n misago_capture misago_forms %}
+{% load i18n misago_capture misago_admin_forms %}
 
 
 {% block table-header %}

+ 1 - 1
misago/templates/misago/admin/attachmenttypes/form.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/bans/form.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/bans/list.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/list.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block page-actions %}

+ 1 - 1
misago/templates/misago/admin/categories/form.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/categoryroles/form.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/conf/group.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/conf/index.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}{% trans active_group.name %} | {{ block.super }}{% endblock %}

+ 1 - 1
misago/templates/misago/admin/datadownloads/form.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/datadownloads/list.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/list.html" %}
-{% load i18n misago_avatars misago_forms %}
+{% load i18n misago_avatars misago_admin_forms %}
 
 
 {% block page-actions %}

+ 1 - 1
misago/templates/misago/admin/ranks/form.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/roles/form.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/users/ban.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_avatars misago_capture misago_forms %}
+{% load i18n misago_avatars misago_capture misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/users/delete.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_avatars misago_capture misago_forms %}
+{% load i18n misago_avatars misago_capture misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/users/edit.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/users/list.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/list.html" %}
-{% load i18n misago_avatars misago_forms %}
+{% load i18n misago_avatars misago_admin_forms %}
 
 
 {% block page-actions %}

+ 1 - 1
misago/templates/misago/admin/users/new.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}

+ 1 - 1
misago/templates/misago/admin/warnings/form.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/form.html" %}
-{% load i18n misago_forms %}
+{% load i18n misago_admin_forms %}
 
 
 {% block title %}