def test_user_contact_sort_dict_is_not_none_for_emtpy_contacts(self): self.assertIsNotNone(SortHelpers().get_user_contact_sort_dict()) self.assertEqual( {u'albert.peter': u'Peter Albert', u'test_user_1_': u'Test User', u'inbox:client1': u'Inbox: Client1', u'inbox:arch': u'Inbox: Landesarchiv', u'hugo.boss': u'Boss Hugo', u'james.bond': u'Bond James'}, SortHelpers().get_user_contact_sort_dict())
def test_user_sort_dict_returns_a_dict_with_userid_as_key_fullname_as_value_includings_inboxes(self): self.assertEqual( {u'albert.peter': u'Peter Albert', u'test_user_1_': u'Test User', u'inbox:client1': u'Inbox: Client1', u'inbox:arch': u'Inbox: Landesarchiv', u'hugo.boss': u'Boss Hugo', u'james.bond': u'Bond James'}, SortHelpers().get_user_sort_dict())
def test_user_contact_sort_dict_extend_sort_dict_with_all_contacts(self): create(Builder('contact') .having(firstname=u'Lara', lastname=u'Croft', email=u'*****@*****.**')) create(Builder('contact') .having(firstname=u'Super', lastname=u'M\xe4n', email='*****@*****.**')) self.assertEqual( {u'albert.peter': u'Peter Albert', u'contact:croft-lara': u'Croft Lara', u'contact:man-super': u'M\xe4n Super', u'test_user_1_': u'Test User', u'inbox:client1': u'Inbox: Client1', u'inbox:arch': u'Inbox: Landesarchiv', u'hugo.boss': u'Boss Hugo', u'james.bond': u'Bond James'}, SortHelpers().get_user_contact_sort_dict())
def custom_sort(self, results, sort_on, sort_reverse): """We need to handle some sorting for special columns, which are not sortable in the catalog... """ if getattr(self, '_custom_sort_method', None) is not None: results = self._custom_sort_method(results, sort_on, sort_reverse) elif sort_on == 'sequence_number': splitter = re.compile(r'[/\., ]') def _sortable_data(brain): """Converts the "reference" into a tuple containing integers, which are converted well. Sorting "10" and "2" as strings results in wrong order.. """ value = getattr(brain, sort_on, '') if not isinstance(value, str) and not isinstance(value, unicode): return value parts = [] for part in splitter.split(value): part = part.strip() try: part = int(part) except ValueError: pass parts.append(part) return parts results = list(results) results.sort( lambda a, b: cmp(_sortable_data(a), _sortable_data(b))) if sort_reverse: results.reverse() elif sort_on == 'reference': # Get active reference formatter registry = getUtility(IRegistry) proxy = registry.forInterface(IReferenceNumberSettings) formatter = queryAdapter(IReferenceNumberFormatter, name=proxy.formatter) results = list(results) results.sort(key=formatter.sorter) if sort_reverse: results.reverse() # custom sort for sorting on the readable fullname # of the users, contacts and inboxes elif sort_on in ('responsible', 'Creator', 'checked_out', 'issuer', 'contact'): if sort_on in ('issuer', 'contact'): sort_dict = SortHelpers().get_user_contact_sort_dict() else: sort_dict = SortHelpers().get_user_sort_dict() def _sorter(a, b): return cmp( sort_dict.get(getattr(a, sort_on, ''), getattr(a, sort_on, '')), sort_dict.get(getattr(b, sort_on, ''), getattr(b, sort_on, '')), ) results = list(results) results.sort(_sorter, reverse=sort_reverse) elif sort_on == 'review_state': states = get_translated_transitions(self.context, self.request) def _state_sorter(a, b): return cmp( states.get(getattr(a, sort_on, ''), getattr(a, sort_on, '')), states.get(getattr(b, sort_on, ''), getattr(b, sort_on, '')), ) results = list(results) results.sort(_state_sorter, reverse=sort_reverse) elif sort_on == 'task_type': types = get_translated_types(self.context, self.request) def _type_sorter(a, b): return cmp( types.get(getattr(a, sort_on, ''), getattr(a, sort_on, '')), types.get(getattr(b, sort_on, ''), getattr(b, sort_on, '')), ) results = list(results) results.sort(_type_sorter, reverse=sort_reverse) elif sort_on == 'public_trial': values = translated_public_trial_terms(self.context, self.request) def _public_trial_sorter(a, b): return cmp( values.get(getattr(a, sort_on, ''), getattr(a, sort_on, '')), values.get(getattr(b, sort_on, ''), getattr(b, sort_on, '')), ) results = list(results) results.sort(_public_trial_sorter, reverse=sort_reverse) return results