summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2015-01-23 10:37:38 +0000
committerMark Haines <mark.haines@matrix.org>2015-01-23 10:37:38 +0000
commit7256def8e43bf5ab982cb7e785fb1334a1ef4ab8 (patch)
tree44c5eb1754851f7467bb1ec4a0ee7dee7524af17
parentMerge pull request #30 from matrix-org/client_api_restructure (diff)
downloadsynapse-7256def8e43bf5ab982cb7e785fb1334a1ef4ab8.tar.xz
Merge rest servlets into the client json resource object
-rwxr-xr-xsynapse/app/homeserver.py5
-rw-r--r--synapse/rest/client/v1/__init__.py18
-rw-r--r--synapse/server.py10
-rw-r--r--tests/rest/client/v1/test_presence.py9
-rw-r--r--tests/rest/client/v1/test_profile.py4
5 files changed, 18 insertions, 28 deletions
diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index cd24bbdc79..fabe8ddacb 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -37,6 +37,7 @@ from synapse.api.urls import (
 from synapse.config.homeserver import HomeServerConfig
 from synapse.crypto import context_factory
 from synapse.util.logcontext import LoggingContext
+from synapse.rest.client.v1 import ClientV1RestResource
 
 from daemonize import Daemonize
 import twisted.manhole.telnet
@@ -59,7 +60,7 @@ class SynapseHomeServer(HomeServer):
         return MatrixFederationHttpClient(self)
 
     def build_resource_for_client(self):
-        return JsonResource()
+        return ClientV1RestResource(self)
 
     def build_resource_for_federation(self):
         return JsonResource()
@@ -224,8 +225,6 @@ def setup():
         content_addr=config.content_addr,
     )
 
-    hs.register_servlets()
-
     hs.create_resource_tree(
         web_client=config.webclient,
         redirect_root_to_web_client=True,
diff --git a/synapse/rest/client/v1/__init__.py b/synapse/rest/client/v1/__init__.py
index 88ec9cd27d..8bb89b2f6a 100644
--- a/synapse/rest/client/v1/__init__.py
+++ b/synapse/rest/client/v1/__init__.py
@@ -19,22 +19,18 @@ from . import (
     voip, admin,
 )
 
+from synapse.http.server import JsonResource
 
-class RestServletFactory(object):
 
-    """ A factory for creating REST servlets.
-
-    These REST servlets represent the entire client-server REST API. Generally
-    speaking, they serve as wrappers around events and the handlers that
-    process them.
-
-    See synapse.events for information on synapse events.
-    """
+class ClientV1RestResource(JsonResource):
+    """A resource for version 1 of the matrix client API."""
 
     def __init__(self, hs):
-        client_resource = hs.get_resource_for_client()
+        JsonResource.__init__(self)
+        self.register_servlets(self, hs)
 
-        # TODO(erikj): There *must* be a better way of doing this.
+    @staticmethod
+    def register_servlets(client_resource, hs):
         room.register_servlets(hs, client_resource)
         events.register_servlets(hs, client_resource)
         register.register_servlets(hs, client_resource)
diff --git a/synapse/server.py b/synapse/server.py
index e9add8e2b4..476d809374 100644
--- a/synapse/server.py
+++ b/synapse/server.py
@@ -24,7 +24,6 @@ from synapse.events.utils import serialize_event
 from synapse.notifier import Notifier
 from synapse.api.auth import Auth
 from synapse.handlers import Handlers
-from synapse.rest.client.v1 import RestServletFactory
 from synapse.state import StateHandler
 from synapse.storage import DataStore
 from synapse.types import UserID, RoomAlias, RoomID, EventID
@@ -203,9 +202,6 @@ class HomeServer(BaseHomeServer):
     def build_auth(self):
         return Auth(self)
 
-    def build_rest_servlet_factory(self):
-        return RestServletFactory(self)
-
     def build_state_handler(self):
         return StateHandler(self)
 
@@ -229,9 +225,3 @@ class HomeServer(BaseHomeServer):
             clock=self.get_clock(),
             hostname=self.hostname,
         )
-
-    def register_servlets(self):
-        """ Register all servlets associated with this HomeServer.
-        """
-        # Simply building the ServletFactory is sufficient to have it register
-        self.get_rest_servlet_factory()
diff --git a/tests/rest/client/v1/test_presence.py b/tests/rest/client/v1/test_presence.py
index 0b6f7cfccb..783720ac29 100644
--- a/tests/rest/client/v1/test_presence.py
+++ b/tests/rest/client/v1/test_presence.py
@@ -25,6 +25,8 @@ from ....utils import MockHttpResource, MockKey
 from synapse.api.constants import PresenceState
 from synapse.handlers.presence import PresenceHandler
 from synapse.server import HomeServer
+from synapse.rest.client.v1 import presence
+from synapse.rest.client.v1 import events
 
 
 OFFLINE = PresenceState.OFFLINE
@@ -86,7 +88,7 @@ class PresenceStateTestCase(unittest.TestCase):
             return defer.succeed([])
         room_member_handler.get_rooms_for_user = get_rooms_for_user
 
-        hs.register_servlets()
+        presence.register_servlets(hs, self.mock_resource)
 
         self.u_apple = hs.parse_userid(myid)
 
@@ -172,7 +174,7 @@ class PresenceListTestCase(unittest.TestCase):
 
         hs.get_auth().get_user_by_token = _get_user_by_token
 
-        hs.register_servlets()
+        presence.register_servlets(hs, self.mock_resource)
 
         self.u_apple = hs.parse_userid("@apple:test")
         self.u_banana = hs.parse_userid("@banana:test")
@@ -283,7 +285,8 @@ class PresenceEventStreamTestCase(unittest.TestCase):
 
         hs.get_auth().get_user_by_req = _get_user_by_req
 
-        hs.register_servlets()
+        presence.register_servlets(hs, self.mock_resource)
+        events.register_servlets(hs, self.mock_resource)
 
         hs.handlers.room_member_handler = Mock(spec=[])
 
diff --git a/tests/rest/client/v1/test_profile.py b/tests/rest/client/v1/test_profile.py
index 47cfb10a6d..5b5c3edc22 100644
--- a/tests/rest/client/v1/test_profile.py
+++ b/tests/rest/client/v1/test_profile.py
@@ -25,6 +25,8 @@ from ....utils import MockHttpResource, MockKey
 from synapse.api.errors import SynapseError, AuthError
 from synapse.server import HomeServer
 
+from synapse.rest.client.v1 import profile
+
 myid = "@1234ABCD:test"
 PATH_PREFIX = "/_matrix/client/api/v1"
 
@@ -61,7 +63,7 @@ class ProfileTestCase(unittest.TestCase):
 
         hs.get_handlers().profile_handler = self.mock_handler
 
-        hs.register_servlets()
+        profile.register_servlets(hs, self.mock_resource)
 
     @defer.inlineCallbacks
     def test_get_my_name(self):