result = {}
else:
result = initial
-
+
for tag in tags:
result.setdefault(tag.category, []).append(tag)
return result
class AttachmentHttpResponse(HttpResponse):
"""Response serving a file to be downloaded.
"""
- def __init__ (self, file_path, file_name, mimetype):
+ def __init__(self, file_path, file_name, mimetype):
super(AttachmentHttpResponse, self).__init__(mimetype=mimetype)
self['Content-Disposition'] = 'attachment; filename=%s' % file_name
self.file_path = file_path
def __init__(self, *args, **kwargs):
self.querysets = args
self._count = None
-
+
def count(self):
if not self._count:
self._count = sum(len(qs) for qs in self.querysets)
return self._count
-
+
def __len__(self):
return self.count()
-
+
def __getitem__(self, item):
try:
indices = (offset, stop, step) = item.indices(self.count())
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, self.order_by),
+ self.sortfn = lambda a, b: cmp(getattr(a, self.order_by),
getattr(b, self.order_by))
super(SortedMultiQuerySet, self).__init__(*args, **kwargs)
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
- sort_heads[i] += 1
# 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