Fix #5079 - tags unicity is on the slug, not the name
Signed-off-by: Loic Dachary <loic@dachary.org> Signed-off-by: Andrew Browning <ayleph@thisshitistemp.com>
This commit is contained in:
parent
05f26e3abc
commit
679f729221
@ -33,6 +33,10 @@ def test_list_of_dicts_conversion(test_app):
|
|||||||
assert text.convert_to_tag_list_of_dicts('echo,echo') == [{'name': u'echo',
|
assert text.convert_to_tag_list_of_dicts('echo,echo') == [{'name': u'echo',
|
||||||
'slug': u'echo'}]
|
'slug': u'echo'}]
|
||||||
|
|
||||||
|
# When checking for duplicates, use the slug, not the tag
|
||||||
|
assert text.convert_to_tag_list_of_dicts('echo,#echo') == [{'name': u'#echo',
|
||||||
|
'slug': u'echo'}]
|
||||||
|
|
||||||
# Make sure converting the list of dicts to a string works
|
# Make sure converting the list of dicts to a string works
|
||||||
assert text.media_tags_as_string([{'name': u'yin', 'slug': u'yin'},
|
assert text.media_tags_as_string([{'name': u'yin', 'slug': u'yin'},
|
||||||
{'name': u'yang', 'slug': u'yang'}]) == \
|
{'name': u'yang', 'slug': u'yang'}]) == \
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import collections
|
||||||
import wtforms
|
import wtforms
|
||||||
import markdown
|
import markdown
|
||||||
from lxml.html.clean import Cleaner
|
from lxml.html.clean import Cleaner
|
||||||
@ -60,7 +61,7 @@ def convert_to_tag_list_of_dicts(tag_string):
|
|||||||
Strips trailing, leading, and internal whitespace, and also converts
|
Strips trailing, leading, and internal whitespace, and also converts
|
||||||
the "tags" text into an array of tags
|
the "tags" text into an array of tags
|
||||||
"""
|
"""
|
||||||
taglist = []
|
slug_to_name = collections.OrderedDict()
|
||||||
if tag_string:
|
if tag_string:
|
||||||
|
|
||||||
# Strip out internal, trailing, and leading whitespace
|
# Strip out internal, trailing, and leading whitespace
|
||||||
@ -69,11 +70,10 @@ def convert_to_tag_list_of_dicts(tag_string):
|
|||||||
# Split the tag string into a list of tags
|
# Split the tag string into a list of tags
|
||||||
for tag in stripped_tag_string.split(','):
|
for tag in stripped_tag_string.split(','):
|
||||||
tag = tag.strip()
|
tag = tag.strip()
|
||||||
# Ignore empty or duplicate tags
|
# Ignore empty tags or duplicate slugs
|
||||||
if tag and tag not in [t['name'] for t in taglist]:
|
if tag:
|
||||||
taglist.append({'name': tag,
|
slug_to_name[url.slugify(tag)] = tag
|
||||||
'slug': url.slugify(tag)})
|
return [{'name': v, 'slug': k} for (k,v) in slug_to_name.iteritems()]
|
||||||
return taglist
|
|
||||||
|
|
||||||
|
|
||||||
def media_tags_as_string(media_entry_tags):
|
def media_tags_as_string(media_entry_tags):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user