import wtforms
+from mediagoblin.util import tag_length_validator, TOO_LONG_TAG_WARNING
class EditForm(wtforms.Form):
slug = wtforms.TextField(
'Slug')
description = wtforms.TextAreaField('Description of this work')
- tags = wtforms.TextField('Tags')
+ tags = wtforms.TextField(
+ 'Tags',
+ [tag_length_validator])
class EditProfileForm(wtforms.Form):
bio = wtforms.TextAreaField('Bio',
else:
media['title'] = request.POST['title']
media['description'] = request.POST.get('description')
+ media['tags'] = convert_to_tag_list(request.POST.get('tags'))
md = markdown.Markdown(
safe_mode = 'escape')
media['description']))
media['slug'] = request.POST['slug']
-
- # Process the user's folksonomy "tags"
- media['tags'] = convert_to_tag_list(request)
media.save()
return redirect(request, "mediagoblin.user_pages.media_home",
import wtforms
+from mediagoblin.util import tag_length_validator, TOO_LONG_TAG_WARNING
class SubmitStartForm(wtforms.Form):
[wtforms.validators.Length(min=0, max=500)])
description = wtforms.TextAreaField('Description of this work')
file = wtforms.FileField('File')
- tags = wtforms.TextField('Tags')
+ tags = wtforms.TextField(
+ 'Tags',
+ [tag_length_validator])
from math import ceil
from string import strip
import copy
+import wtforms
from babel.localedata import exists
import jinja2
TAGS_CASE_SENSITIVE = False
TAGS_MAX_LENGTH = 50
-def convert_to_tag_list(request):
+def convert_to_tag_list(tag_string):
"""
- Filter input from any "tags" field in the session,
+ Filter input from incoming string containing user tags,
Strips trailing, leading, and internal whitespace, and also converts
the "tags" text into an array of tags
"""
- tag_string = request.POST.get('tags')
taglist = []
if tag_string:
# Do not permit duplicate tags
if tag.strip() and tag not in taglist:
- # Enforce maximum tag length
- if len(tag) > TAGS_MAX_LENGTH:
- tag = tag[:TAGS_MAX_LENGTH] + u'...'
- messages.add_message(
- request, messages.WARNING, \
- u'Tag truncated to ' + unicode(TAGS_MAX_LENGTH) + \
- u' characters.')
- messages.add_message(
- request, messages.INFO, \
- u'Why the long tag? Seriously.')
-
if TAGS_CASE_SENSITIVE:
taglist.append(tag.strip())
else:
return taglist
+TOO_LONG_TAG_WARNING = \
+ u'Tags must be shorter than %s characters. Tags that are too long: %s'
+
+def tag_length_validator(form, field):
+ """
+ Make sure tags do not exceed the maximum tag length.
+ """
+ tags = convert_to_tag_list(field.data)
+ too_long_tags = [
+ tag for tag in tags
+ if len(tag) > TAGS_MAX_LENGTH]
+
+ if too_long_tags:
+ raise wtforms.ValidationError(
+ TOO_LONG_TAG_WARNING % (
+ TAGS_MAX_LENGTH, ', '.join(too_long_tags)))
+
+
MARKDOWN_INSTANCE = markdown.Markdown(safe_mode='escape')
def cleaned_markdown_conversion(text):