From f5b24e189d00bca88681623167caedc0689cbb5e Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 3 Feb 2018 18:19:15 +0200 Subject: [PATCH] Move StateStore to its own file --- mautrix_appservice/appservice.py | 51 +----------------------- mautrix_appservice/state_store.py | 65 +++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 50 deletions(-) create mode 100644 mautrix_appservice/state_store.py diff --git a/mautrix_appservice/appservice.py b/mautrix_appservice/appservice.py index 8361a0d7..8a25e5e9 100644 --- a/mautrix_appservice/appservice.py +++ b/mautrix_appservice/appservice.py @@ -23,56 +23,7 @@ from aiohttp import web from functools import partial from contextlib import contextmanager from .intent_api import HTTPAPI - - -class StateStore: - def __init__(self): - self.memberships = {} - self.power_levels = {} - - def _get_membership(self, room, user): - return self.memberships.get(room, {}).get(user, "left") - - def is_joined(self, room, user): - return self._get_membership(room, user) == "join" - - def _set_membership(self, room, user, membership): - if room not in self.memberships: - self.memberships[room] = {} - self.memberships[room][user] = membership - - def joined(self, room, user): - return self._set_membership(room, user, "join") - - def invited(self, room, user): - return self._set_membership(room, user, "invite") - - def left(self, room, user): - return self._set_membership(room, user, "left") - - def has_power_level_data(self, room): - return room in self.power_levels - - def has_power_level(self, room, user, event): - room_levels = self.power_levels.get(room, {}) - required = room_levels["events"].get(event, 95) - has = room_levels["users"].get(user, 0) - return has >= required - - def set_power_level(self, room, user, level): - if not room in self.power_levels: - self.power_levels[room] = { - "users": {}, - "events": {}, - } - self.power_levels[room]["users"][user] = level - - def set_power_levels(self, room, content): - if "events" not in content: - content["events"] = {} - if "users" not in content: - content["users"] = {} - self.power_levels[room] = content +from .state_store import StateStore class AppService: diff --git a/mautrix_appservice/state_store.py b/mautrix_appservice/state_store.py new file mode 100644 index 00000000..bdfa211a --- /dev/null +++ b/mautrix_appservice/state_store.py @@ -0,0 +1,65 @@ +# -*- coding: future_fstrings -*- +# matrix-appservice-python - A Matrix Application Service framework written in Python. +# Copyright (C) 2018 Tulir Asokan +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +class StateStore: + def __init__(self): + self.memberships = {} + self.power_levels = {} + + def _get_membership(self, room, user): + return self.memberships.get(room, {}).get(user, "left") + + def is_joined(self, room, user): + return self._get_membership(room, user) == "join" + + def _set_membership(self, room, user, membership): + if room not in self.memberships: + self.memberships[room] = {} + self.memberships[room][user] = membership + + def joined(self, room, user): + return self._set_membership(room, user, "join") + + def invited(self, room, user): + return self._set_membership(room, user, "invite") + + def left(self, room, user): + return self._set_membership(room, user, "left") + + def has_power_level_data(self, room): + return room in self.power_levels + + def has_power_level(self, room, user, event): + room_levels = self.power_levels.get(room, {}) + required = room_levels["events"].get(event, 95) + has = room_levels["users"].get(user, 0) + return has >= required + + def set_power_level(self, room, user, level): + if not room in self.power_levels: + self.power_levels[room] = { + "users": {}, + "events": {}, + } + self.power_levels[room]["users"][user] = level + + def set_power_levels(self, room, content): + if "events" not in content: + content["events"] = {} + if "users" not in content: + content["users"] = {} + self.power_levels[room] = content