diff --git a/colab/accounts/views.py b/colab/accounts/views.py index 232cdc7..f620188 100644 --- a/colab/accounts/views.py +++ b/colab/accounts/views.py @@ -65,12 +65,7 @@ class UserProfileDetailView(UserProfileBaseMixin, DetailView): count_types = OrderedDict() - # TODO: remove when mailman becomes a proxied plugin - messages = Message.objects.filter(from_address__user__pk=user.pk) - count_types[_('Emails')] = messages.count() - collaborations, count_types_extras = get_collaboration_data(user) - collaborations.extend(messages) collaborations.sort(key=lambda elem: elem.modified, reverse=True) @@ -84,6 +79,7 @@ class UserProfileDetailView(UserProfileBaseMixin, DetailView): query = query.order_by('-received_time') context['emails'] = query[:10] + messages = Message.objects.filter(from_address__user__pk=user.pk) count_by = 'thread__mailinglist__name' context['list_activity'] = dict(messages.values_list(count_by) .annotate(Count(count_by)) diff --git a/colab/home/views.py b/colab/home/views.py index 6fe0ade..0806e05 100644 --- a/colab/home/views.py +++ b/colab/home/views.py @@ -14,12 +14,8 @@ def dashboard(request): hottest_threads = [t.latest_message for t in highest_score_threads] latest_threads = Thread.objects.all()[:6] - latest_results, count_types = get_collaboration_data() - # NOTE: This code will cease to exist when super_archives - # become a plugin - messages = [t.latest_message for t in latest_threads] - latest_results.extend(messages) + latest_results, count_types = get_collaboration_data() latest_results.sort(key=lambda elem: elem.modified, reverse=True) context = { diff --git a/colab/proxy/utils/models.py b/colab/proxy/utils/models.py index 7232a26..9d61c9d 100644 --- a/colab/proxy/utils/models.py +++ b/colab/proxy/utils/models.py @@ -3,35 +3,21 @@ from django.conf import settings from colab.accounts.models import User -class CollaborationModel(models.Model): +class Collaboration(models.Model): ''' Class to define the fields of the collaboration block that are displayed at dashboard and profile pages. ''' - @property - def verbose_name(self): - raise NotImplemented - - @property - def tag(self): - return None - - @property - def title(self): - raise NotImplemented - - @property - def description(self): - return None - - @property - def url(self): - return None + tag = None + title = None + description = None + url = None + modified = None + type = None - @property - def modified(self): - return None + user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, + on_delete=models.SET_NULL) @property def modified_by(self): @@ -45,15 +31,11 @@ class CollaborationModel(models.Model): return self.user.get_absolute_url() return None - @property - def type(self): - return None - - user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, - on_delete=models.SET_NULL) - def update_user(self, user_name): - self.user = User.objects.filter(username=user_name).last() + try: + self.user = User.objects.get(username=user_name) + except User.DoesNotExist: + self.user = None class Meta: abstract = True diff --git a/colab/search/utils.py b/colab/search/utils.py index 2f7df8b..1c3caa1 100644 --- a/colab/search/utils.py +++ b/colab/search/utils.py @@ -6,8 +6,8 @@ from collections import OrderedDict from django.core.cache import cache from django.utils.translation import ugettext as _ from django.conf import settings -from colab.super_archives.models import Thread -from colab.proxy.utils.models import CollaborationModel +from colab.super_archives.models import Thread, Message +from colab.proxy.utils.models import Collaboration def get_collaboration_data(filter_by_user=None): @@ -20,29 +20,36 @@ def get_collaboration_data(filter_by_user=None): count_types = OrderedDict() count_types[_('Emails')] = Thread.objects.count() + if filter_by_user: + messages = Message.objects.filter(from_address__user__pk=filter_by_user.pk) + else: + latest_threads = Thread.objects.all()[:6] + messages = [t.latest_message for t in latest_threads] + + latest_results.extend(messages) + app_names = settings.PROXIED_APPS.keys() for app_name in app_names: - module = importlib - module = \ - module.import_module('colab.proxy.{}.models'.format(app_name)) + module = importlib \ + .import_module('colab.proxy.{}.models'.format(app_name)) for module_item_name in dir(module): module_item = getattr(module, module_item_name) if not inspect.isclass(module_item): continue - if not issubclass(module_item, CollaborationModel): + if not issubclass(module_item, Collaboration): continue - if module_item == CollaborationModel: + if module_item == Collaboration: continue - elements = module_item.objects + queryset = module_item.objects if filter_by_user: - elements = elements.filter( + elements = queryset.filter( user__username=filter_by_user) else: - elements = elements.all() + elements = queryset.all() latest_results.extend(elements) elements_count = elements.count() @@ -50,7 +57,7 @@ def get_collaboration_data(filter_by_user=None): if elements_count > 1: verbose_name = module_item._meta.verbose_name_plural.title() else: - verbose_name = module_item._meta.verbose_name_plural.title() + verbose_name = module_item._meta.verbose_name.title() if populate_count_types: count_types[verbose_name] = elements_count -- libgit2 0.21.2