Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 29 #37

Merged
merged 2 commits into from
Feb 3, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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)
~~~~~~~~~~~~~~~~~

Expand Down
7 changes: 6 additions & 1 deletion seantis/people/behaviors/person.py
Original file line number Diff line number Diff line change
Expand Up @@ -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())

Expand Down
5 changes: 3 additions & 2 deletions seantis/people/browser/list.py
Original file line number Diff line number Diff line change
Expand Up @@ -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())

Expand Down
3 changes: 1 addition & 2 deletions seantis/people/content/list.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions seantis/people/profiles/default/metadata.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<metadata>
<version>1009</version>
<version>1010</version>
<dependencies>
<dependency>profile-plone.app.dexterity:default</dependency>
<dependency>profile-collective.js.underscore:default</dependency>
Expand All @@ -8,4 +8,4 @@
<dependency>profile-plone.formwidget.autocomplete:default</dependency>
<dependency>profile-plone.app.relationfield:default</dependency>
</dependencies>
</metadata>
</metadata>
9 changes: 5 additions & 4 deletions seantis/people/tests/test_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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):
Expand Down
13 changes: 13 additions & 0 deletions seantis/people/upgrades.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
21 changes: 14 additions & 7 deletions seantis/people/upgrades.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
xmlns="http://namespaces.zope.org/zope"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup">

<genericsetup:upgradeStep
<genericsetup:upgradeStep
title="Import new 'first_letter' index."
source="1000" destination="1001"
profile="seantis.people:default"
handler=".setuphandler.add_catalog_indexes"
/>

<genericsetup:upgradeStep
<genericsetup:upgradeStep
title="Import new 'membership_person' index."
source="1001" destination="1002"
profile="seantis.people:default"
Expand Down Expand Up @@ -37,34 +37,41 @@
handler=".upgrades.upgrade_membership_title"
/>

<genericsetup:upgradeStep
<genericsetup:upgradeStep
title="Import new 'is_active_person' index."
source="1005" destination="1006"
profile="seantis.people:default"
handler=".setuphandler.add_catalog_indexes"
/>

<genericsetup:upgradeStep
<genericsetup:upgradeStep
title="Adds export action."
source="1006" destination="1007"
profile="seantis.people:default"
handler=".upgrades.update_people_list"
/>

<genericsetup:upgradeStep
<genericsetup:upgradeStep
title="Introduces custom catalog."
source="1007" destination="1008"
profile="seantis.people:default"
handler=".upgrades.introduce_custom_catalog"
/>

<genericsetup:upgradeStep
<genericsetup:upgradeStep
title="Updates global allow."
source="1008" destination="1009"
profile="seantis.people:default"
handler=".upgrades.update_people_list"
/>

<genericsetup:upgradeStep
title="Updates global allow."
source="1009" destination="1010"
profile="seantis.people:default"
handler=".upgrades.reindex_selectable_fields"
/>

<!-- PHZ Upgrades -->
<genericsetup:upgradeStep
title="Remove import action from detail view."
Expand All @@ -88,4 +95,4 @@
handler=".upgrades.upgrade_standard_type_info"
/>

</configure>
</configure>