Commit bcbde82dc2f3e2df8a9facbf5e57c44f24091c21
1 parent
3ecd9d8a
Exists in
master
and in
3 other branches
Moved collaboration to super_archives and plugins
Signed-off-by: Macartur Sousa <macartur.sc@gmail.com> Signed-off-by: Sergio Oliveira <seocam@seocam.com>
Showing
5 changed files
with
107 additions
and
98 deletions
Show diff stats
colab/accounts/views.py
... | ... | @@ -13,7 +13,8 @@ from django.http import Http404 |
13 | 13 | |
14 | 14 | from colab.super_archives.models import (EmailAddress, |
15 | 15 | EmailAddressValidation) |
16 | -from colab.search.utils import get_collaboration_data, get_visible_threads | |
16 | +from colab.plugins.utils.collaborations import (get_collaboration_data, | |
17 | + get_visible_threads) | |
17 | 18 | from colab.accounts.models import User |
18 | 19 | |
19 | 20 | from .forms import (UserCreationForm, ListsForm, UserUpdateForm) | ... | ... |
colab/home/views.py
... | ... | @@ -2,7 +2,7 @@ from django.conf import settings |
2 | 2 | from django.shortcuts import render |
3 | 3 | from django.http import HttpResponse, Http404 |
4 | 4 | |
5 | -from colab.search.utils import get_collaboration_data | |
5 | +from colab.plugins.utils.collaborations import get_collaboration_data | |
6 | 6 | from colab.super_archives.models import Thread |
7 | 7 | from colab.accounts.utils import mailman |
8 | 8 | from colab.accounts.models import User | ... | ... |
... | ... | @@ -0,0 +1,67 @@ |
1 | +import importlib | |
2 | +import inspect | |
3 | + | |
4 | +from collections import OrderedDict | |
5 | + | |
6 | +from django.core.cache import cache | |
7 | +from django.utils.translation import ugettext as _ | |
8 | +from django.conf import settings | |
9 | + | |
10 | +from colab.plugins.utils.models import Collaboration | |
11 | +from colab.super_archives.utils.collaborations import (get_visible_threads, | |
12 | + count_threads) | |
13 | + | |
14 | + | |
15 | +def get_collaboration_data(logged_user, filter_by_user=None): | |
16 | + username = getattr(filter_by_user, 'username', '') | |
17 | + cache_key = 'home_chart-{}'.format(username) | |
18 | + count_types = cache.get(cache_key) | |
19 | + | |
20 | + latest_results = [] | |
21 | + populate_count_types = False | |
22 | + | |
23 | + if count_types is None: | |
24 | + populate_count_types = True | |
25 | + count_types = OrderedDict() | |
26 | + | |
27 | + count_types[_('Emails')] = count_threads() | |
28 | + | |
29 | + messages = get_visible_threads(logged_user, filter_by_user) | |
30 | + | |
31 | + latest_results.extend(messages) | |
32 | + | |
33 | + for app in settings.COLAB_APPS.values(): | |
34 | + module = importlib.import_module('{}.models'.format(app.get('name'))) | |
35 | + | |
36 | + for module_item_name in dir(module): | |
37 | + module_item = getattr(module, module_item_name) | |
38 | + if not inspect.isclass(module_item): | |
39 | + continue | |
40 | + if not issubclass(module_item, Collaboration): | |
41 | + continue | |
42 | + if module_item == Collaboration: | |
43 | + continue | |
44 | + | |
45 | + queryset = module_item.objects | |
46 | + | |
47 | + if filter_by_user: | |
48 | + elements = queryset.filter( | |
49 | + user__username=filter_by_user) | |
50 | + else: | |
51 | + elements = queryset.all() | |
52 | + | |
53 | + latest_results.extend(elements) | |
54 | + elements_count = elements.count() | |
55 | + | |
56 | + if elements_count > 1: | |
57 | + verbose_name = module_item._meta.verbose_name_plural.title() | |
58 | + else: | |
59 | + verbose_name = module_item._meta.verbose_name.title() | |
60 | + | |
61 | + if populate_count_types: | |
62 | + count_types[verbose_name] = elements_count | |
63 | + | |
64 | + if populate_count_types: | |
65 | + cache.set(cache_key, count_types, 30) | |
66 | + | |
67 | + return latest_results, count_types | ... | ... |
colab/search/utils.py
... | ... | @@ -1,96 +0,0 @@ |
1 | -import importlib | |
2 | -import inspect | |
3 | - | |
4 | -from collections import OrderedDict | |
5 | - | |
6 | -from django.core.cache import cache | |
7 | -from django.utils.translation import ugettext as _ | |
8 | -from django.conf import settings | |
9 | -from django.db.models import Q as Condition | |
10 | - | |
11 | -from colab.super_archives.models import Thread, Message | |
12 | -from colab.plugins.utils.models import Collaboration | |
13 | -from colab.accounts.utils import mailman | |
14 | - | |
15 | - | |
16 | -def get_visible_threads_queryset(logged_user): | |
17 | - queryset = Thread.objects | |
18 | - listnames_for_user = [] | |
19 | - if logged_user: | |
20 | - lists_for_user = mailman.get_user_mailinglists(logged_user) | |
21 | - listnames_for_user = mailman.extract_listname_from_list(lists_for_user) | |
22 | - | |
23 | - user_lists = Condition(mailinglist__name__in=listnames_for_user) | |
24 | - public_lists = Condition(mailinglist__is_private=False) | |
25 | - queryset = Thread.objects.filter(user_lists | public_lists) | |
26 | - | |
27 | - return queryset | |
28 | - | |
29 | - | |
30 | -def get_visible_threads(logged_user, filter_by_user=None): | |
31 | - thread_qs = get_visible_threads_queryset(logged_user) | |
32 | - | |
33 | - if filter_by_user: | |
34 | - message_qs = Message.objects.filter(thread__in=thread_qs) | |
35 | - messages = message_qs.filter( | |
36 | - from_address__user__pk=filter_by_user.pk) | |
37 | - else: | |
38 | - latest_threads = thread_qs.all() | |
39 | - messages = [t.latest_message for t in latest_threads] | |
40 | - | |
41 | - return messages | |
42 | - | |
43 | - | |
44 | -def get_collaboration_data(logged_user, filter_by_user=None): | |
45 | - username = getattr(filter_by_user, 'username', '') | |
46 | - cache_key = 'home_chart-{}'.format(username) | |
47 | - count_types = cache.get(cache_key) | |
48 | - | |
49 | - latest_results = [] | |
50 | - populate_count_types = False | |
51 | - | |
52 | - if count_types is None: | |
53 | - populate_count_types = True | |
54 | - count_types = OrderedDict() | |
55 | - visible_threads = get_visible_threads(logged_user, filter_by_user) | |
56 | - count_types[_('Emails')] = len(visible_threads) | |
57 | - | |
58 | - messages = get_visible_threads(logged_user, filter_by_user) | |
59 | - | |
60 | - latest_results.extend(messages) | |
61 | - | |
62 | - for app in settings.COLAB_APPS.values(): | |
63 | - module = importlib.import_module('{}.models'.format(app.get('name'))) | |
64 | - | |
65 | - for module_item_name in dir(module): | |
66 | - module_item = getattr(module, module_item_name) | |
67 | - if not inspect.isclass(module_item): | |
68 | - continue | |
69 | - if not issubclass(module_item, Collaboration): | |
70 | - continue | |
71 | - if module_item == Collaboration: | |
72 | - continue | |
73 | - | |
74 | - queryset = module_item.objects | |
75 | - | |
76 | - if filter_by_user: | |
77 | - elements = queryset.filter( | |
78 | - user__username=filter_by_user) | |
79 | - else: | |
80 | - elements = queryset.all() | |
81 | - | |
82 | - latest_results.extend(elements) | |
83 | - elements_count = elements.count() | |
84 | - | |
85 | - if elements_count > 1: | |
86 | - verbose_name = module_item._meta.verbose_name_plural.title() | |
87 | - else: | |
88 | - verbose_name = module_item._meta.verbose_name.title() | |
89 | - | |
90 | - if populate_count_types: | |
91 | - count_types[verbose_name] = elements_count | |
92 | - | |
93 | - if populate_count_types: | |
94 | - cache.set(cache_key, count_types, 30) | |
95 | - | |
96 | - return latest_results, count_types |
... | ... | @@ -0,0 +1,37 @@ |
1 | + | |
2 | +from django.db.models import Q | |
3 | + | |
4 | +from colab.accounts.utils import mailman | |
5 | +from colab.super_archives.models import Thread, Message | |
6 | + | |
7 | + | |
8 | +def count_threads(): | |
9 | + return Thread.objects.count() | |
10 | + | |
11 | + | |
12 | +def get_visible_threads_queryset(logged_user): | |
13 | + queryset = Thread.objects | |
14 | + listnames_for_user = [] | |
15 | + if logged_user: | |
16 | + lists_for_user = mailman.get_user_mailinglists(logged_user) | |
17 | + listnames_for_user = mailman.extract_listname_from_list(lists_for_user) | |
18 | + | |
19 | + user_lists = Q(mailinglist__name__in=listnames_for_user) | |
20 | + public_lists = Q(mailinglist__is_private=False) | |
21 | + queryset = Thread.objects.filter(user_lists | public_lists) | |
22 | + | |
23 | + return queryset | |
24 | + | |
25 | + | |
26 | +def get_visible_threads(logged_user, filter_by_user=None): | |
27 | + thread_qs = get_visible_threads_queryset(logged_user) | |
28 | + | |
29 | + if filter_by_user: | |
30 | + message_qs = Message.objects.filter(thread__in=thread_qs) | |
31 | + messages = message_qs.filter( | |
32 | + from_address__user__pk=filter_by_user.pk) | |
33 | + else: | |
34 | + latest_threads = thread_qs.all() | |
35 | + messages = [t.latest_message for t in latest_threads] | |
36 | + | |
37 | + return messages | ... | ... |