aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaleb Forbes Davis V <caldavis@gmail.com>2011-07-12 23:58:25 -0500
committerCaleb Forbes Davis V <caldavis@gmail.com>2011-07-13 00:03:49 -0500
commitcc7ff3c50513ae169abab196f32de97af30e6744 (patch)
tree4d5a707f97b5412c026e2438d52b240c3dfd40d5
parent4451219560a4d991a8c4d04e9dffa99fb092bd5b (diff)
downloadmediagoblin-cc7ff3c50513ae169abab196f32de97af30e6744.tar.lz
mediagoblin-cc7ff3c50513ae169abab196f32de97af30e6744.tar.xz
mediagoblin-cc7ff3c50513ae169abab196f32de97af30e6744.zip
enforces maximum tag length with (in)appropriate messaging
-rw-r--r--mediagoblin/edit/views.py4
-rw-r--r--mediagoblin/submit/views.py4
-rw-r--r--mediagoblin/util.py26
3 files changed, 29 insertions, 5 deletions
diff --git a/mediagoblin/edit/views.py b/mediagoblin/edit/views.py
index 0432024e..df0a0d52 100644
--- a/mediagoblin/edit/views.py
+++ b/mediagoblin/edit/views.py
@@ -63,7 +63,9 @@ def edit_media(request, media):
media['description']))
media['slug'] = request.POST['slug']
- media['tags'] = convert_to_tag_list(request.POST['tags'])
+
+ # Process the user's folksonomy "tags"
+ media['tags'] = convert_to_tag_list(request)
media.save()
return redirect(request, "mediagoblin.user_pages.media_home",
diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py
index 46ec4cea..bda77b1d 100644
--- a/mediagoblin/submit/views.py
+++ b/mediagoblin/submit/views.py
@@ -60,7 +60,9 @@ def submit_start(request):
entry['media_type'] = u'image' # heh
entry['uploader'] = request.user['_id']
- entry['tags'] = convert_to_tag_list(request.POST.get('tags'))
+
+ # Process the user's folksonomy "tags"
+ entry['tags'] = convert_to_tag_list(request)
# Save, just so we can get the entry id for the sake of using
# it to generate the file path
diff --git a/mediagoblin/util.py b/mediagoblin/util.py
index 951bdd51..44e64258 100644
--- a/mediagoblin/util.py
+++ b/mediagoblin/util.py
@@ -372,19 +372,39 @@ def clean_html(html):
TAGS_DELIMITER = u' '
TAGS_CASE_SENSITIVE = False
+TAGS_MAX_LENGTH = 50
-def convert_to_tag_list(tag_string):
+def convert_to_tag_list(request):
"""
- Filter input from a "tags" field,
+ Filter input from any "tags" field in the session,
Strips trailing, leading, and internal whitespace, and also converts
- the user input into an array of tags
+ the "tags" text into an array of tags
"""
+ tag_string = request.POST.get('tags')
taglist = []
if tag_string:
+
+ # Strip out internal, trailing, and leading whitespace
stripped_tag_string = u' '.join(tag_string.strip().split())
+
+ # Split the tag string into a list of tags
for tag in stripped_tag_string.split(TAGS_DELIMITER):
+
+ # 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: