diff options
author | Caleb Forbes Davis V <caldavis@gmail.com> | 2011-07-12 23:58:25 -0500 |
---|---|---|
committer | Caleb Forbes Davis V <caldavis@gmail.com> | 2011-07-13 00:03:49 -0500 |
commit | cc7ff3c50513ae169abab196f32de97af30e6744 (patch) | |
tree | 4d5a707f97b5412c026e2438d52b240c3dfd40d5 | |
parent | 4451219560a4d991a8c4d04e9dffa99fb092bd5b (diff) | |
download | mediagoblin-cc7ff3c50513ae169abab196f32de97af30e6744.tar.lz mediagoblin-cc7ff3c50513ae169abab196f32de97af30e6744.tar.xz mediagoblin-cc7ff3c50513ae169abab196f32de97af30e6744.zip |
enforces maximum tag length with (in)appropriate messaging
-rw-r--r-- | mediagoblin/edit/views.py | 4 | ||||
-rw-r--r-- | mediagoblin/submit/views.py | 4 | ||||
-rw-r--r-- | mediagoblin/util.py | 26 |
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: |