コード例 #1
0
 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())
コード例 #2
0
 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())
コード例 #3
0
    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())
コード例 #4
0
    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