forked from MirrorHub/synapse
Allow additional_resources to implement Resource directly (#6686)
AdditionalResource really doesn't add any value, and it gets in the way for resources which want to support child resources or the like. So, if the resource object already implements the IResource interface, don't bother wrapping it.
This commit is contained in:
parent
feee819973
commit
8039685051
2 changed files with 12 additions and 2 deletions
1
changelog.d/6686.misc
Normal file
1
changelog.d/6686.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Allow additional_resources to implement IResource directly.
|
|
@ -31,7 +31,7 @@ from prometheus_client import Gauge
|
||||||
from twisted.application import service
|
from twisted.application import service
|
||||||
from twisted.internet import defer, reactor
|
from twisted.internet import defer, reactor
|
||||||
from twisted.python.failure import Failure
|
from twisted.python.failure import Failure
|
||||||
from twisted.web.resource import EncodingResourceWrapper, NoResource
|
from twisted.web.resource import EncodingResourceWrapper, IResource, NoResource
|
||||||
from twisted.web.server import GzipEncoderFactory
|
from twisted.web.server import GzipEncoderFactory
|
||||||
from twisted.web.static import File
|
from twisted.web.static import File
|
||||||
|
|
||||||
|
@ -109,7 +109,16 @@ class SynapseHomeServer(HomeServer):
|
||||||
for path, resmodule in additional_resources.items():
|
for path, resmodule in additional_resources.items():
|
||||||
handler_cls, config = load_module(resmodule)
|
handler_cls, config = load_module(resmodule)
|
||||||
handler = handler_cls(config, module_api)
|
handler = handler_cls(config, module_api)
|
||||||
resources[path] = AdditionalResource(self, handler.handle_request)
|
if IResource.providedBy(handler):
|
||||||
|
resource = handler
|
||||||
|
elif hasattr(handler, "handle_request"):
|
||||||
|
resource = AdditionalResource(self, handler.handle_request)
|
||||||
|
else:
|
||||||
|
raise ConfigError(
|
||||||
|
"additional_resource %s does not implement a known interface"
|
||||||
|
% (resmodule["module"],)
|
||||||
|
)
|
||||||
|
resources[path] = resource
|
||||||
|
|
||||||
# try to find something useful to redirect '/' to
|
# try to find something useful to redirect '/' to
|
||||||
if WEB_CLIENT_PREFIX in resources:
|
if WEB_CLIENT_PREFIX in resources:
|
||||||
|
|
Loading…
Reference in a new issue