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 +