diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-07-11 23:38:14 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-08-13 18:26:03 +0200 |
commit | a5593d66ea541dfbcd2597f81dcbc51965c51cfc (patch) | |
tree | e778fa93380d0244bfd8d115143996bad51612aa /ishtar_common/views.py | |
parent | 05495e0b37da09deb7b7d2e5629112a046042836 (diff) | |
download | Ishtar-a5593d66ea541dfbcd2597f81dcbc51965c51cfc.tar.bz2 Ishtar-a5593d66ea541dfbcd2597f81dcbc51965c51cfc.zip |
Manage alerts
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 1f8b46fd6..c713b9972 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -21,6 +21,7 @@ import csv import datetime import json import logging +import importlib import unicodedata import unicodecsv @@ -1676,6 +1677,19 @@ document_deletion_wizard = wizards.DocumentDeletionWizard.as_view( url_name='document_deletion',) +def get_bookmark(request, pk): + try: + sq = models.SearchQuery.objects.get( + pk=pk, + profile__person__ishtaruser__user_ptr=request.user) + except models.SearchQuery.DoesNotExist: + raise Http404() + slug = sq.content_type.model_class().SLUG + return redirect( + reverse(slug + '_search') + "?bookmark={}".format(sq.pk) + ) + + class SearchQueryMixin(object): """ Manage content type and profile init @@ -1736,3 +1750,39 @@ class BookmarkList(SearchQueryMixin, JSONResponseMixin, LoginRequiredMixin, 'bookmarks': [ {'label': sq.label, 'query': sq.query} for sq in q.all()] } + + +class AlertList(JSONResponseMixin, LoginRequiredMixin, + TemplateView): + def dispatch(self, request, *args, **kwargs): + if not request.user.pk: + raise Http404() + try: + self.profile = models.UserProfile.objects.get( + current=True, person__ishtaruser__user_ptr=request.user) + except models.UserProfile.DoesNotExist: + # no current profile + raise Http404() + return super(AlertList, self).dispatch(request, *args, **kwargs) + + def get_data(self, context): + q = models.SearchQuery.objects.filter( + profile=self.profile, + is_alert=True + ) + alerts = [] + for sq in q.all(): + model = sq.content_type.model_class() + module = model.__module__.split('.')[0] + views = importlib.import_module(module + '.views') + get_view = getattr(views, "get_" + model.SLUG) + nb = get_view( + self.request, + query={'search_vector': sq.query}, + count=True + ) + alerts.append( + {'label': sq.label, 'query_id': sq.pk, + 'number': nb} + ) + return {'alerts': alerts} |