diff --git a/docs/HISTORY.rst b/docs/HISTORY.rst
index bbab065..8189e45 100644
--- a/docs/HISTORY.rst
+++ b/docs/HISTORY.rst
@@ -11,6 +11,9 @@ Changelog
- Import/export translated titles of vocabularies instead of values. Closes #36.
[msom]
+- Use unicode for selectable fields. Fixes #29.
+ [msom]
+
0.26 (2015-01-21)
~~~~~~~~~~~~~~~~~
diff --git a/seantis/people/behaviors/person.py b/seantis/people/behaviors/person.py
index 523e309..a586d9e 100644
--- a/seantis/people/behaviors/person.py
+++ b/seantis/people/behaviors/person.py
@@ -27,8 +27,13 @@ def organizations(self, org_filter=None):
# organizations are defined in the general catalog, not the people
# catalog, which only contains people, therefore use 'portal_catalog'
+ titles = []
catalog = api.portal.get_tool('portal_catalog')
- titles = (catalog(UID=uid)[0].Title for uid in organizations)
+ for uid in organizations:
+ title = catalog(UID=uid)[0].Title
+ if isinstance(title, str):
+ title = title.decode('utf-8')
+ titles.append(title)
return sorted(titles, key=tools.unicode_collate_sortkey())
diff --git a/seantis/people/browser/list.py b/seantis/people/browser/list.py
index cedea25..3b70dd4 100644
--- a/seantis/people/browser/list.py
+++ b/seantis/people/browser/list.py
@@ -109,9 +109,10 @@ def column_values(self, column):
continue
if isinstance(value, list):
- map(unique_values.add, value)
+ for item in value:
+ unique_values.add(item.encode('utf-8'))
else:
- unique_values.add(value)
+ unique_values.add(value.encode('utf-8'))
return sorted(unique_values, key=tools.unicode_collate_sortkey())
diff --git a/seantis/people/content/list.py b/seantis/people/content/list.py
index 65349ed..873a838 100644
--- a/seantis/people/content/list.py
+++ b/seantis/people/content/list.py
@@ -58,8 +58,7 @@ def people(
if isinstance(filter, LetterFilter):
keyword_index = 'first_letter'
- # the catalog cannot deal with unicode filter values
- query[keyword_index] = {'query': filter.value.encode('utf-8')}
+ query[keyword_index] = {'query': filter.value}
if unrestricted_search:
return catalog.unrestrictedSearchResults(query)
diff --git a/seantis/people/profiles/default/metadata.xml b/seantis/people/profiles/default/metadata.xml
index ea9a48f..610067b 100644
--- a/seantis/people/profiles/default/metadata.xml
+++ b/seantis/people/profiles/default/metadata.xml
@@ -1,5 +1,5 @@
- 1009
+ 1010
profile-plone.app.dexterity:default
profile-collective.js.underscore:default
@@ -8,4 +8,4 @@
profile-plone.formwidget.autocomplete:default
profile-plone.app.relationfield:default
-
\ No newline at end of file
+
diff --git a/seantis/people/tests/test_list.py b/seantis/people/tests/test_list.py
index c7eb844..425ffe5 100644
--- a/seantis/people/tests/test_list.py
+++ b/seantis/people/tests/test_list.py
@@ -330,7 +330,8 @@ def test_list_view_filter(self):
klass='seantis.people.types.base.PersonBase'
).id
- countries = ['Österreich', 'Germany', 'Switzerland']
+ countries = [u'Österreich', u'Germany', u'Switzerland']
+ enc_countries = [c.encode('utf-8') for c in countries]
for c in countries:
api.content.create(
@@ -343,19 +344,19 @@ def test_list_view_filter(self):
self.assertEqual(len(view.people()), 3)
self.assertEqual(len(columns), 1)
+ self.assertEqual(view.column_values(columns[0]), enc_countries)
self.assertEqual(view.selected_column_value(columns[0]), '__all__')
- self.assertEqual(view.column_values(columns[0]), countries)
view.request['filter-country'] = 'Switzerland'
self.assertEqual(len(view.people()), 1)
- self.assertEqual(view.column_values(columns[0]), countries)
+ self.assertEqual(view.column_values(columns[0]), enc_countries)
self.assertEqual(view.selected_column_value(columns[0]), 'Switzerland')
view.request['filter-country'] = 'Österreich'
self.assertEqual(len(view.people()), 1)
- self.assertEqual(view.column_values(columns[0]), countries)
+ self.assertEqual(view.column_values(columns[0]), enc_countries)
self.assertEqual(view.selected_column_value(columns[0]), 'Österreich')
def test_list_view_compound_column_organizations(self):
diff --git a/seantis/people/upgrades.py b/seantis/people/upgrades.py
index e8b295c..0131a5e 100644
--- a/seantis/people/upgrades.py
+++ b/seantis/people/upgrades.py
@@ -85,3 +85,16 @@ def introduce_custom_catalog(context, profiles=None):
catalog.refreshCatalog(clear=1)
finally:
setSite(old_site)
+
+
+def reindex_selectable_fields(context):
+ # An unknown number of properties have change their type (from str to
+ # unicode), we need to clear the catalogs first to avoid unicode exceptions
+ # and rebuild it then to update the related indexes
+ catalog = api.portal.get_tool('portal_catalog')
+ catalog.manage_catalogClear()
+ catalog.manage_catalogRebuild()
+
+ catalog = api.portal.get_tool(catalog_id)
+ catalog.manage_catalogClear()
+ catalog.manage_catalogRebuild()
diff --git a/seantis/people/upgrades.zcml b/seantis/people/upgrades.zcml
index 4387a09..5094b45 100644
--- a/seantis/people/upgrades.zcml
+++ b/seantis/people/upgrades.zcml
@@ -2,14 +2,14 @@
xmlns="http://namespaces.zope.org/zope"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup">
-
-
-
-
-
-
+
+
-
\ No newline at end of file
+