web/lib/tagging/forms.py
changeset 11 f236caaceb43
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/tagging/forms.py	Fri Jan 22 18:23:34 2010 +0100
@@ -0,0 +1,40 @@
+"""
+Tagging components for Django's form library.
+"""
+from django import forms
+from django.utils.translation import ugettext as _
+
+from tagging import settings
+from tagging.models import Tag
+from tagging.utils import parse_tag_input
+
+class TagAdminForm(forms.ModelForm):
+    class Meta:
+        model = Tag
+
+    def clean_name(self):
+        value = self.cleaned_data['name']
+        tag_names = parse_tag_input(value)
+        if len(tag_names) > 1:
+            raise forms.ValidationError(_('Multiple tags were given.'))
+        elif len(tag_names[0]) > settings.MAX_TAG_LENGTH:
+            raise forms.ValidationError(
+                _('A tag may be no more than %s characters long.') %
+                    settings.MAX_TAG_LENGTH)
+        return value
+
+class TagField(forms.CharField):
+    """
+    A ``CharField`` which validates that its input is a valid list of
+    tag names.
+    """
+    def clean(self, value):
+        value = super(TagField, self).clean(value)
+        if value == u'':
+            return value
+        for tag_name in parse_tag_input(value):
+            if len(tag_name) > settings.MAX_TAG_LENGTH:
+                raise forms.ValidationError(
+                    _('Each tag may be no more than %s characters long.') %
+                        settings.MAX_TAG_LENGTH)
+        return value