From add0b463f5fc191161814a0eebf5d3e133ede6b0 Mon Sep 17 00:00:00 2001 From: Daniil Sharou Date: Tue, 16 Apr 2013 21:12:57 +0400 Subject: [PATCH 1/5] fix UnicodeEncodeError for dbref Fix "UnicodeEncodeError: 'ascii' codec can't encode character ..." error in case dbref contains non-ascii characters --- mongoengine/dereference.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mongoengine/dereference.py b/mongoengine/dereference.py index 997b7858..e1b0a038 100644 --- a/mongoengine/dereference.py +++ b/mongoengine/dereference.py @@ -115,7 +115,7 @@ class DeReference(object): object_map = {} for col, dbrefs in self.reference_map.iteritems(): keys = object_map.keys() - refs = list(set([dbref for dbref in dbrefs if str(dbref) not in keys])) + refs = list(set([dbref for dbref in dbrefs if dbref.encode('utf-8') not in keys])) if hasattr(col, 'objects'): # We have a document class for the refs references = col.objects.in_bulk(refs) for key, doc in references.iteritems(): From cc0a2cbc6f20756c5edac3c0785ac132be68df45 Mon Sep 17 00:00:00 2001 From: Daniil Sharou Date: Tue, 16 Apr 2013 22:34:33 +0400 Subject: [PATCH 2/5] fix UnicodeEncodeError for dbref Fix "UnicodeEncodeError: 'ascii' codec can't encode character ..." error in case dbref contains non-ascii characters --- mongoengine/dereference.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mongoengine/dereference.py b/mongoengine/dereference.py index e1b0a038..ed756157 100644 --- a/mongoengine/dereference.py +++ b/mongoengine/dereference.py @@ -115,7 +115,7 @@ class DeReference(object): object_map = {} for col, dbrefs in self.reference_map.iteritems(): keys = object_map.keys() - refs = list(set([dbref for dbref in dbrefs if dbref.encode('utf-8') not in keys])) + refs = list(set([dbref for dbref in dbrefs if unicode(dbref).encode('utf-8') not in keys])) if hasattr(col, 'objects'): # We have a document class for the refs references = col.objects.in_bulk(refs) for key, doc in references.iteritems(): From c2d77f51bba6e75d427f11845ad61ccca85b9803 Mon Sep 17 00:00:00 2001 From: daniil Date: Wed, 17 Apr 2013 12:14:07 +0400 Subject: [PATCH 3/5] test for #278 issue --- tests/test_dereference.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/test_dereference.py b/tests/test_dereference.py index 09001540..8caefd39 100644 --- a/tests/test_dereference.py +++ b/tests/test_dereference.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- from __future__ import with_statement import unittest @@ -1029,3 +1030,26 @@ class FieldTest(unittest.TestCase): self.assertTrue(tuple(x.items[0]) in tuples) self.assertTrue(x.items[0] in tuples) + def test_non_ascii_pk(self): + """ + Ensure that dbref conversion to string does not fail when + non-ascii characters are used in primary key + """ + class Brand(Document): + title = StringField(max_length=255, primary_key=True) + + class BrandGroup(Document): + title = StringField(max_length=255, primary_key=True) + brands = SortedListField(ReferenceField("Brand", dbref=True)) + + Brand.drop_collection() + BrandGroup.drop_collection() + + brand1 = Brand(title="Moschino").save() + brand2 = Brand(title=u"Денис Симачёв").save() + + BrandGroup(title="top_brands", brands=[brand1, brand2]).save() + brand_groups = BrandGroup.objects().all() + + self.assertEqual(2, len([brand for bg in brand_groups for brand in bg.brands])) + From 03bfd018621233629467d131c8af52764c05e559 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Wed, 17 Apr 2013 15:54:32 +0000 Subject: [PATCH 4/5] Updated field iteration for py2.5 --- mongoengine/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mongoengine/base.py b/mongoengine/base.py index a7eb17b5..1e1a0212 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -912,7 +912,7 @@ class BaseDocument(object): # We only want named arguments. field = iter(self._fields_ordered) for value in args: - name = next(field) + name = field.next() if name in values: raise TypeError("Multiple values for keyword argument '" + name + "'") values[name] = value From 3f4992329831d063448c18d7a3005204e289eb65 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Thu, 18 Apr 2013 13:21:36 +0000 Subject: [PATCH 5/5] Update AUTHORS and changelog (#278) --- AUTHORS | 3 ++- docs/changelog.rst | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 370f082c..1262669d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -137,4 +137,5 @@ that much better: * Benoit Louy * lraucy * hellysmile - * Jaepil Jeong \ No newline at end of file + * Jaepil Jeong + * Daniil Sharou diff --git a/docs/changelog.rst b/docs/changelog.rst index 14964955..386daa56 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -4,6 +4,7 @@ Changelog Changes in 0.7.10 ================= +- Fix UnicodeEncodeError for dbref (#278) - Allow construction using positional parameters (#268) - Updated EmailField length to support long domains (#243) - Added 64-bit integer support (#251)