Mercurial > libervia-pubsub
comparison sat_pubsub/pgsql_storage.py @ 323:8496af26be45
mam: added filtering by category
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 07 Jan 2016 16:20:43 +0100 |
parents | 54d90c73b8b5 |
children | e73e42b4f6ff |
comparison
equal
deleted
inserted
replaced
322:54d90c73b8b5 | 323:8496af26be45 |
---|---|
55 | 55 |
56 from zope.interface import implements | 56 from zope.interface import implements |
57 | 57 |
58 from twisted.internet import defer | 58 from twisted.internet import defer |
59 from twisted.words.protocols.jabber import jid | 59 from twisted.words.protocols.jabber import jid |
60 from twisted.python import log | |
60 | 61 |
61 from wokkel import generic | 62 from wokkel import generic |
62 from wokkel.pubsub import Subscription | 63 from wokkel.pubsub import Subscription |
63 | 64 |
64 from sat_pubsub import error | 65 from sat_pubsub import error |
699 | 700 |
700 arguments query, args, authorized_groups, unrestricted and ext_data are the same as for | 701 arguments query, args, authorized_groups, unrestricted and ext_data are the same as for |
701 _getItems | 702 _getItems |
702 """ | 703 """ |
703 # SOURCES | 704 # SOURCES |
705 query.append("FROM nodes INNER JOIN items USING (node_id)") | |
706 | |
704 if unrestricted: | 707 if unrestricted: |
705 query.append("""FROM nodes | 708 query_filters = ["WHERE node_id=%s"] |
706 INNER JOIN items USING (node_id) | |
707 WHERE node_id=%s""") | |
708 args.append(self.nodeDbId) | 709 args.append(self.nodeDbId) |
709 else: | 710 else: |
711 query.append("LEFT JOIN item_groups_authorized USING (item_id)") | |
710 args.append(self.nodeDbId) | 712 args.append(self.nodeDbId) |
711 if authorized_groups: | 713 if authorized_groups: |
712 get_groups = " or (items.access_model='roster' and groupname in %s)" | 714 get_groups = " or (items.access_model='roster' and groupname in %s)" |
713 args.append(authorized_groups) | 715 args.append(authorized_groups) |
714 else: | 716 else: |
715 get_groups = "" | 717 get_groups = "" |
716 | 718 |
717 query.append("""FROM nodes | 719 query_filters = ["WHERE node_id=%s AND (items.access_model='open'" + get_groups + ")"] |
718 INNER JOIN items USING (node_id) | |
719 LEFT JOIN item_groups_authorized USING (item_id) | |
720 WHERE node_id=%s AND | |
721 (items.access_model='open'""" + get_groups + ")") | |
722 | 720 |
723 # FILTERS | 721 # FILTERS |
724 if 'filters' in ext_data: # MAM filters | 722 if 'filters' in ext_data: # MAM filters |
725 for filter_ in ext_data['filters']: | 723 for filter_ in ext_data['filters']: |
726 if filter_.var == 'start': | 724 if filter_.var == 'start': |
727 query.append("AND date>=%s") | 725 query_filters.append("AND date>=%s") |
728 args.append(filter_.value) | 726 args.append(filter_.value) |
729 if filter_.var == 'end': | 727 elif filter_.var == 'end': |
730 query.append("AND date<=%s") | 728 query_filters.append("AND date<=%s") |
731 args.append(filter_.value) | 729 args.append(filter_.value) |
732 if filter_.var == 'with': | 730 elif filter_.var == 'with': |
733 jid_s = filter_.value | 731 jid_s = filter_.value |
734 if '/' in jid_s: | 732 if '/' in jid_s: |
735 query.append("AND publisher=%s") | 733 query_filters.append("AND publisher=%s") |
736 args.append(filter_.value) | 734 args.append(filter_.value) |
737 else: | 735 else: |
738 query.append("AND publisher LIKE %s") | 736 query_filters.append("AND publisher LIKE %s") |
739 args.append(u"{}%".format(filter_.value)) | 737 args.append(u"{}%".format(filter_.value)) |
738 elif filter_.var == const.MAM_FILTER_CATEGORY: | |
739 query.append("LEFT JOIN item_categories USING (item_id)") | |
740 query_filters.append("AND category=%s") | |
741 args.append(filter_.value) | |
742 else: | |
743 log.msg("WARNING: unknown filter: {}".format(filter_.encode('utf-8'))) | |
744 | |
745 query.extend(query_filters) | |
740 | 746 |
741 return "ORDER BY item_id DESC" | 747 return "ORDER BY item_id DESC" |
742 | 748 |
743 def _getItems(self, cursor, authorized_groups, unrestricted, maxItems, ext_data): | 749 def _getItems(self, cursor, authorized_groups, unrestricted, maxItems, ext_data): |
744 self._checkNodeExists(cursor) | 750 self._checkNodeExists(cursor) |