General A/B testing.
[wolnelektury.git] / src / catalogue / utils.py
index ec938ea..d17ead0 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -186,56 +185,6 @@ class MultiQuerySet(object):
                     continue
 
 
                     continue
 
 
-class SortedMultiQuerySet(MultiQuerySet):
-    def __init__(self, *args, **kwargs):
-        self.order_by = kwargs.pop('order_by', None)
-        self.sortfn = kwargs.pop('sortfn', None)
-        if self.order_by is not None:
-            self.sortfn = lambda a, b: cmp((getattr(a, f) for f in self.order_by),
-                                           (getattr(b, f) for f in self.order_by))
-        super(SortedMultiQuerySet, self).__init__(*args, **kwargs)
-
-    def __getitem__(self, item):
-        sort_heads = [0] * len(self.querysets)
-        try:
-            (offset, stop, step) = item.indices(self.count())
-        except AttributeError:
-            # it's not a slice - make it one
-            return self[item:item + 1][0]
-        items = []
-        total_len = stop - offset
-        skipped = 0
-        i_s = range(len(sort_heads))
-
-        while len(items) < total_len:
-            candidate = None
-            candidate_i = None
-            for i in i_s:
-                def get_next():
-                    return self.querysets[i][sort_heads[i]]
-                try:
-                    if candidate is None:
-                        candidate = get_next()
-                        candidate_i = i
-                    else:
-                        competitor = get_next()
-                        if self.sortfn(candidate, competitor) > 0:
-                            candidate = competitor
-                            candidate_i = i
-                except IndexError:
-                    continue  # continue next sort_head
-            # we have no more elements:
-            if candidate is None:
-                break
-            sort_heads[candidate_i] += 1
-            if skipped < offset:
-                skipped += 1
-                continue  # continue next item
-            items.append(candidate)
-
-        return items
-
-
 def truncate_html_words(s, num, end_text='...'):
     """Truncates HTML to a certain number of words (not counting tags and
     comments). Closes opened tags if they were correctly closed in the given
 def truncate_html_words(s, num, end_text='...'):
     """Truncates HTML to a certain number of words (not counting tags and
     comments). Closes opened tags if they were correctly closed in the given
@@ -249,7 +198,7 @@ def truncate_html_words(s, num, end_text='...'):
     s = force_text(s)
     length = int(num)
     if length <= 0:
     s = force_text(s)
     length = int(num)
     if length <= 0:
-        return u''
+        return ''
     html4_singlets = ('br', 'col', 'link', 'base', 'img', 'param', 'area', 'hr', 'input')
     # Set up regular expressions
     re_words = re.compile(r'&.*?;|<.*?>|(\w[\w-]*)', re.U)
     html4_singlets = ('br', 'col', 'link', 'base', 'img', 'param', 'area', 'hr', 'input')
     # Set up regular expressions
     re_words = re.compile(r'&.*?;|<.*?>|(\w[\w-]*)', re.U)