From b58fa7e241bc909fdc8911b1a2b17c0326b195b3 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 3 Feb 2017 16:18:58 -0400 Subject: [PATCH] Return metadata type lookup values as list of unicode not list of strings. Fixed GitLab issue #310, thank for @fordguo for the find and fix suggestion. --- docs/releases/2.2.rst | 3 ++- mayan/apps/metadata/models.py | 5 +++-- mayan/apps/metadata/tests/test_models.py | 13 +++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/docs/releases/2.2.rst b/docs/releases/2.2.rst index e0c5c401f4..9c01310a9a 100644 --- a/docs/releases/2.2.rst +++ b/docs/releases/2.2.rst @@ -49,7 +49,7 @@ Other changes - Make the lock_manager.backends.file_lock.FileLock the new default locking backend. - Add view to clone a document page transformation to other pages. -- Document page transformation navigation bug fixed. +- Document page transformation navigation bug fixed. - Move test total to 359. - Increase test coverage to 81%. - New transformations added: @@ -128,6 +128,7 @@ Bugs fixed or issues closed * `GitLab issue #303 `_ Update urlpatterns in urls.py files to be a list of django.conf.urls.url() instances instead. * `GitLab issue #304 `_ Remove string view arguments of url() in urls.py files. * `GitLab issue #307 `_ Enter multiple Tags at once +* `GitLab issue #310 `_ Metadata's lookup with chinese messages when new document * `GitLab issue #311 `_ acl page return ContentType:Document * `GitLab issue #319 `_ TransformationResize issue with very "long" image * `GitLab issue #328 `_ Upgrade Warning/Error during performupgrade (v2.1.3 to v2.1.4) diff --git a/mayan/apps/metadata/models.py b/mayan/apps/metadata/models.py index 8ff7609517..b6aaeab76e 100644 --- a/mayan/apps/metadata/models.py +++ b/mayan/apps/metadata/models.py @@ -5,7 +5,7 @@ import shlex from django.core.exceptions import ValidationError from django.db import models from django.template import Context, Template -from django.utils.encoding import python_2_unicode_compatible +from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.module_loading import import_string from django.utils.translation import ugettext_lazy as _ @@ -97,7 +97,7 @@ class MetadataType(models.Model): splitter.whitespace = ','.encode('utf-8') splitter.whitespace_split = True splitter.commenters = ''.encode('utf-8') - return list(splitter) + return [force_text(e) for e in splitter] def get_default_value(self): template = Template(self.default) @@ -126,6 +126,7 @@ class MetadataType(models.Model): if self.lookup: lookup_options = self.get_lookup_values() + if value and value not in lookup_options: raise ValidationError( _('Value is not one of the provided options.') diff --git a/mayan/apps/metadata/tests/test_models.py b/mayan/apps/metadata/tests/test_models.py index 868a34b26a..a10fe48e13 100644 --- a/mayan/apps/metadata/tests/test_models.py +++ b/mayan/apps/metadata/tests/test_models.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.core.exceptions import ValidationError @@ -177,3 +178,15 @@ class MetadataTestCase(BaseTestCase): self.assertTrue( self.metadata_type.get_required_for(self.document_type) ) + + def test_unicode_lookup(self): + # Should NOT return a ValidationError, otherwise test fails + self.metadata_type.lookup = '测试1,测试2,test1,test2' + self.metadata_type.save() + self.metadata_type.validate_value(document_type=None, value='测试1') + + def test_non_unicode_lookup(self): + # Should NOT return a ValidationError, otherwise test fails + self.metadata_type.lookup = 'test1,test2' + self.metadata_type.save() + self.metadata_type.validate_value(document_type=None, value='test1')