summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2015-01-29 16:18:59 +0000
committerMark Haines <mark.haines@matrix.org>2015-01-29 16:18:59 +0000
commit8e571cbed8c1eccea169589362fa977406f594a6 (patch)
tree4723970b6cf46305c1db16145d05acc026fea3e7 /synapse
parentMerge branch 'client_v2_filter' into client_v2_sync (diff)
parentMerge branch 'develop' into client_v2_filter (diff)
downloadsynapse-8e571cbed8c1eccea169589362fa977406f594a6.tar.xz
Merge branch 'client_v2_filter' into client_v2_sync
Diffstat (limited to 'synapse')
-rw-r--r--synapse/api/errors.py1
-rw-r--r--synapse/api/filtering.py19
-rw-r--r--synapse/push/__init__.py22
-rw-r--r--synapse/push/httppusher.py8
-rw-r--r--synapse/push/pusherpool.py2
-rw-r--r--synapse/rest/__init__.py2
-rw-r--r--synapse/rest/client/v1/push_rule.py29
-rw-r--r--synapse/storage/push_rule.py9
-rw-r--r--synapse/storage/pusher.py2
9 files changed, 54 insertions, 40 deletions
diff --git a/synapse/api/errors.py b/synapse/api/errors.py
index 5872e82d0f..ad478aa6b7 100644
--- a/synapse/api/errors.py
+++ b/synapse/api/errors.py
@@ -111,6 +111,7 @@ class NotFoundError(SynapseError):
             **kwargs
         )
 
+
 class AuthError(SynapseError):
     """An error raised when there was a problem authorising an event."""
 
diff --git a/synapse/api/filtering.py b/synapse/api/filtering.py
index 7e239138b7..e16c0e559f 100644
--- a/synapse/api/filtering.py
+++ b/synapse/api/filtering.py
@@ -74,7 +74,7 @@ class Filtering(object):
             defer.returnValue(self._filter_with_definition(events, definition))
         except KeyError:
             # return all events if definition isn't specified.
-            defer.returnValue(events)  
+            defer.returnValue(events)
 
     def _filter_with_definition(self, events, definition):
         return [e for e in events if self._passes_definition(definition, e)]
@@ -94,14 +94,12 @@ class Filtering(object):
         #   * For senders/rooms: Literal match only
         #   * "not_" checks take presedence (e.g. if "m.*" is in both 'types'
         #     and 'not_types' then it is treated as only being in 'not_types')
-        
+
         # room checks
         if hasattr(event, "room_id"):
             room_id = event.room_id
-            allow_rooms = definition["rooms"] if "rooms" in definition else None
-            reject_rooms = (
-                definition["not_rooms"] if "not_rooms" in definition else None
-            )
+            allow_rooms = definition.get("rooms", None)
+            reject_rooms = definition.get("not_rooms", None)
             if reject_rooms and room_id in reject_rooms:
                 return False
             if allow_rooms and room_id not in allow_rooms:
@@ -111,12 +109,8 @@ class Filtering(object):
         if hasattr(event, "sender"):
             # Should we be including event.state_key for some event types?
             sender = event.sender
-            allow_senders = (
-                definition["senders"] if "senders" in definition else None
-            )
-            reject_senders = (
-                definition["not_senders"] if "not_senders" in definition else None
-            )
+            allow_senders = definition.get("senders", None)
+            reject_senders = definition.get("not_senders", None)
             if reject_senders and sender in reject_senders:
                 return False
             if allow_senders and sender not in allow_senders:
@@ -176,7 +170,6 @@ class Filtering(object):
                 if key in user_filter["room"]:
                     self._check_definition(user_filter["room"][key])
 
-
     def _check_definition(self, definition):
         """Check if the provided definition is valid.
 
diff --git a/synapse/push/__init__.py b/synapse/push/__init__.py
index 10ac890482..472ede5480 100644
--- a/synapse/push/__init__.py
+++ b/synapse/push/__init__.py
@@ -56,6 +56,7 @@ class Pusher(object):
 
         # The last value of last_active_time that we saw
         self.last_last_active_time = 0
+        self.has_unread = True
 
     @defer.inlineCallbacks
     def _actions_for_event(self, ev):
@@ -180,6 +181,7 @@ class Pusher(object):
                 processed = True
             else:
                 rejected = yield self.dispatch_push(single_event, tweaks)
+                self.has_unread = True
                 if isinstance(rejected, list) or isinstance(rejected, tuple):
                     processed = True
                     for pk in rejected:
@@ -187,8 +189,8 @@ class Pusher(object):
                             # for sanity, we only remove the pushkey if it
                             # was the one we actually sent...
                             logger.warn(
-                                ("Ignoring rejected pushkey %s because we "
-                                "didn't send it"), pk
+                                ("Ignoring rejected pushkey %s because we"
+                                 " didn't send it"), pk
                             )
                         else:
                             logger.info(
@@ -234,8 +236,7 @@ class Pusher(object):
                     # of old notifications.
                     logger.warn("Giving up on a notification to user %s, "
                                 "pushkey %s",
-                                self.user_name, self.pushkey
-                    )
+                                self.user_name, self.pushkey)
                     self.backoff_delay = Pusher.INITIAL_BACKOFF
                     self.last_token = chunk['end']
                     self.store.update_pusher_last_token(
@@ -256,8 +257,7 @@ class Pusher(object):
                                 "Trying again in %dms",
                                 self.user_name,
                                 self.clock.time_msec() - self.failing_since,
-                                self.backoff_delay
-                    )
+                                self.backoff_delay)
                     yield synapse.util.async.sleep(self.backoff_delay / 1000.0)
                     self.backoff_delay *= 2
                     if self.backoff_delay > Pusher.MAX_BACKOFF:
@@ -290,9 +290,11 @@ class Pusher(object):
         if 'last_active' in state.state:
             last_active = state.state['last_active']
             if last_active > self.last_last_active_time:
-                logger.info("Resetting badge count for %s", self.user_name)
-                self.reset_badge_count()
                 self.last_last_active_time = last_active
+                if self.has_unread:
+                    logger.info("Resetting badge count for %s", self.user_name)
+                    self.reset_badge_count()
+                    self.has_unread = False
 
 
 def _value_for_dotted_key(dotted_key, event):
@@ -305,6 +307,7 @@ def _value_for_dotted_key(dotted_key, event):
         parts = parts[1:]
     return val
 
+
 def _tweaks_for_actions(actions):
     tweaks = {}
     for a in actions:
@@ -314,6 +317,7 @@ def _tweaks_for_actions(actions):
             tweaks['sound'] = a['set_sound']
     return tweaks
 
+
 class PusherConfigException(Exception):
     def __init__(self, msg):
-        super(PusherConfigException, self).__init__(msg)
\ No newline at end of file
+        super(PusherConfigException, self).__init__(msg)
diff --git a/synapse/push/httppusher.py b/synapse/push/httppusher.py
index e12b946727..ab128e31e5 100644
--- a/synapse/push/httppusher.py
+++ b/synapse/push/httppusher.py
@@ -71,11 +71,11 @@ class HttpPusher(Pusher):
                 # we may have to fetch this over federation and we
                 # can't trust it anyway: is it worth it?
                 #'from_display_name': 'Steve Stevington'
-                'counts': { #-- we don't mark messages as read yet so
-                # we have no way of knowing
+                'counts': {  # -- we don't mark messages as read yet so
+                             # we have no way of knowing
                     # Just set the badge to 1 until we have read receipts
                     'unread': 1,
-                #    'missed_calls': 2
+                    # 'missed_calls': 2
                 },
                 'devices': [
                     {
@@ -142,4 +142,4 @@ class HttpPusher(Pusher):
         rejected = []
         if 'rejected' in resp:
             rejected = resp['rejected']
-        defer.returnValue(rejected)
\ No newline at end of file
+        defer.returnValue(rejected)
diff --git a/synapse/push/pusherpool.py b/synapse/push/pusherpool.py
index 856defedac..4892c21e7b 100644
--- a/synapse/push/pusherpool.py
+++ b/synapse/push/pusherpool.py
@@ -149,4 +149,4 @@ class PusherPool:
             logger.info("Stopping pusher %s", fullid)
             self.pushers[fullid].stop()
             del self.pushers[fullid]
-        yield self.store.delete_pusher_by_app_id_pushkey(app_id, pushkey)
\ No newline at end of file
+        yield self.store.delete_pusher_by_app_id_pushkey(app_id, pushkey)
diff --git a/synapse/rest/__init__.py b/synapse/rest/__init__.py
index 90afd93333..1a84d94cd9 100644
--- a/synapse/rest/__init__.py
+++ b/synapse/rest/__init__.py
@@ -11,4 +11,4 @@
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
-# limitations under the License.
\ No newline at end of file
+# limitations under the License.
diff --git a/synapse/rest/client/v1/push_rule.py b/synapse/rest/client/v1/push_rule.py
index 64743a2f46..2b1e930326 100644
--- a/synapse/rest/client/v1/push_rule.py
+++ b/synapse/rest/client/v1/push_rule.py
@@ -30,9 +30,9 @@ class PushRuleRestServlet(ClientV1RestServlet):
         'sender': 1,
         'room': 2,
         'content': 3,
-        'override': 4
+        'override': 4,
     }
-    PRIORITY_CLASS_INVERSE_MAP = {v: k for k,v in PRIORITY_CLASS_MAP.items()}
+    PRIORITY_CLASS_INVERSE_MAP = {v: k for k, v in PRIORITY_CLASS_MAP.items()}
     SLIGHTLY_PEDANTIC_TRAILING_SLASH_ERROR = (
         "Unrecognised request: You probably wanted a trailing slash")
 
@@ -260,7 +260,9 @@ class PushRuleRestServlet(ClientV1RestServlet):
 
         if path == []:
             # we're a reference impl: pedantry is our job.
-            raise UnrecognizedRequestError(PushRuleRestServlet.SLIGHTLY_PEDANTIC_TRAILING_SLASH_ERROR)
+            raise UnrecognizedRequestError(
+                PushRuleRestServlet.SLIGHTLY_PEDANTIC_TRAILING_SLASH_ERROR
+            )
 
         if path[0] == '':
             defer.returnValue((200, rules))
@@ -271,7 +273,9 @@ class PushRuleRestServlet(ClientV1RestServlet):
         elif path[0] == 'device':
             path = path[1:]
             if path == []:
-                raise UnrecognizedRequestError(PushRuleRestServlet.SLIGHTLY_PEDANTIC_TRAILING_SLASH_ERROR)
+                raise UnrecognizedRequestError(
+                    PushRuleRestServlet.SLIGHTLY_PEDANTIC_TRAILING_SLASH_ERROR
+                )
             if path[0] == '':
                 defer.returnValue((200, rules['device']))
 
@@ -290,11 +294,13 @@ class PushRuleRestServlet(ClientV1RestServlet):
     def on_OPTIONS(self, _):
         return 200, {}
 
+
 def _add_empty_priority_class_arrays(d):
     for pc in PushRuleRestServlet.PRIORITY_CLASS_MAP.keys():
         d[pc] = []
     return d
 
+
 def _instance_handle_from_conditions(conditions):
     """
     Given a list of conditions, return the instance handle of the
@@ -305,9 +311,12 @@ def _instance_handle_from_conditions(conditions):
             return c['instance_handle']
     return None
 
+
 def _filter_ruleset_with_path(ruleset, path):
     if path == []:
-        raise UnrecognizedRequestError(PushRuleRestServlet.SLIGHTLY_PEDANTIC_TRAILING_SLASH_ERROR)
+        raise UnrecognizedRequestError(
+            PushRuleRestServlet.SLIGHTLY_PEDANTIC_TRAILING_SLASH_ERROR
+        )
 
     if path[0] == '':
         return ruleset
@@ -316,7 +325,9 @@ def _filter_ruleset_with_path(ruleset, path):
         raise UnrecognizedRequestError()
     path = path[1:]
     if path == []:
-        raise UnrecognizedRequestError(PushRuleRestServlet.SLIGHTLY_PEDANTIC_TRAILING_SLASH_ERROR)
+        raise UnrecognizedRequestError(
+            PushRuleRestServlet.SLIGHTLY_PEDANTIC_TRAILING_SLASH_ERROR
+        )
     if path[0] == '':
         return ruleset[template_kind]
     rule_id = path[0]
@@ -325,6 +336,7 @@ def _filter_ruleset_with_path(ruleset, path):
             return r
     raise NotFoundError
 
+
 def _priority_class_from_spec(spec):
     if spec['template'] not in PushRuleRestServlet.PRIORITY_CLASS_MAP.keys():
         raise InvalidRuleException("Unknown template: %s" % (spec['kind']))
@@ -335,6 +347,7 @@ def _priority_class_from_spec(spec):
 
     return pc
 
+
 def _priority_class_to_template_name(pc):
     if pc > PushRuleRestServlet.PRIORITY_CLASS_MAP['override']:
         # per-device
@@ -343,6 +356,7 @@ def _priority_class_to_template_name(pc):
     else:
         return PushRuleRestServlet.PRIORITY_CLASS_INVERSE_MAP[pc]
 
+
 def _rule_to_template(rule):
     template_name = _priority_class_to_template_name(rule['priority_class'])
     if template_name in ['override', 'underride']:
@@ -359,8 +373,9 @@ def _rule_to_template(rule):
         ret["pattern"] = thecond["pattern"]
         return ret
 
+
 def _strip_device_condition(rule):
-    for i,c in enumerate(rule['conditions']):
+    for i, c in enumerate(rule['conditions']):
         if c['kind'] == 'device':
             del rule['conditions'][i]
     return rule
diff --git a/synapse/storage/push_rule.py b/synapse/storage/push_rule.py
index c7b553292e..27502d2399 100644
--- a/synapse/storage/push_rule.py
+++ b/synapse/storage/push_rule.py
@@ -117,7 +117,7 @@ class PushRuleStore(SQLBaseStore):
         new_rule['priority'] = new_rule_priority
 
         sql = (
-            "SELECT COUNT(*) FROM "+PushRuleTable.table_name+
+            "SELECT COUNT(*) FROM " + PushRuleTable.table_name +
             " WHERE user_name = ? AND priority_class = ? AND priority = ?"
         )
         txn.execute(sql, (user_name, priority_class, new_rule_priority))
@@ -146,10 +146,11 @@ class PushRuleStore(SQLBaseStore):
 
         txn.execute(sql, new_rule.values())
 
-    def _add_push_rule_highest_priority_txn(self, txn, user_name, priority_class, **kwargs):
+    def _add_push_rule_highest_priority_txn(self, txn, user_name,
+                                            priority_class, **kwargs):
         # find the highest priority rule in that class
         sql = (
-            "SELECT COUNT(*), MAX(priority) FROM "+PushRuleTable.table_name+
+            "SELECT COUNT(*), MAX(priority) FROM " + PushRuleTable.table_name +
             " WHERE user_name = ? and priority_class = ?"
         )
         txn.execute(sql, (user_name, priority_class))
@@ -209,4 +210,4 @@ class PushRuleTable(Table):
         "actions",
     ]
 
-    EntryType = collections.namedtuple("PushRuleEntry", fields)
\ No newline at end of file
+    EntryType = collections.namedtuple("PushRuleEntry", fields)
diff --git a/synapse/storage/pusher.py b/synapse/storage/pusher.py
index 113cdc8a8e..f253c9e2c3 100644
--- a/synapse/storage/pusher.py
+++ b/synapse/storage/pusher.py
@@ -170,4 +170,4 @@ class PushersTable(Table):
         "failing_since"
     ]
 
-    EntryType = collections.namedtuple("PusherEntry", fields)
\ No newline at end of file
+    EntryType = collections.namedtuple("PusherEntry", fields)