mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-24 18:45:52 +03:00
Manhole: wrap coroutines in defer.ensureDeferred
automatically (#10602)
This commit is contained in:
parent
0db8cab72c
commit
19e51b14d2
3 changed files with 16 additions and 1 deletions
1
changelog.d/10602.feature
Normal file
1
changelog.d/10602.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
The Synapse manhole no longer needs coroutines to be wrapped in `defer.ensureDeferred`.
|
|
@ -67,7 +67,7 @@ This gives a Python REPL in which `hs` gives access to the
|
||||||
`synapse.server.HomeServer` object - which in turn gives access to many other
|
`synapse.server.HomeServer` object - which in turn gives access to many other
|
||||||
parts of the process.
|
parts of the process.
|
||||||
|
|
||||||
Note that any call which returns a coroutine will need to be wrapped in `ensureDeferred`.
|
Note that, prior to Synapse 1.41, any call which returns a coroutine will need to be wrapped in `ensureDeferred`.
|
||||||
|
|
||||||
As a simple example, retrieving an event from the database:
|
As a simple example, retrieving an event from the database:
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
import inspect
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
|
@ -20,6 +21,7 @@ from twisted.conch.insults import insults
|
||||||
from twisted.conch.manhole import ColoredManhole, ManholeInterpreter
|
from twisted.conch.manhole import ColoredManhole, ManholeInterpreter
|
||||||
from twisted.conch.ssh.keys import Key
|
from twisted.conch.ssh.keys import Key
|
||||||
from twisted.cred import checkers, portal
|
from twisted.cred import checkers, portal
|
||||||
|
from twisted.internet import defer
|
||||||
|
|
||||||
PUBLIC_KEY = (
|
PUBLIC_KEY = (
|
||||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHhGATaW4KhE23+7nrH4jFx3yLq9OjaEs5"
|
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHhGATaW4KhE23+7nrH4jFx3yLq9OjaEs5"
|
||||||
|
@ -141,3 +143,15 @@ class SynapseManholeInterpreter(ManholeInterpreter):
|
||||||
self.write("".join(lines))
|
self.write("".join(lines))
|
||||||
finally:
|
finally:
|
||||||
last_tb = ei = None
|
last_tb = ei = None
|
||||||
|
|
||||||
|
def displayhook(self, obj):
|
||||||
|
"""
|
||||||
|
We override the displayhook so that we automatically convert coroutines
|
||||||
|
into Deferreds. (Our superclass' displayhook will take care of the rest,
|
||||||
|
by displaying the Deferred if it's ready, or registering a callback
|
||||||
|
if it's not).
|
||||||
|
"""
|
||||||
|
if inspect.iscoroutine(obj):
|
||||||
|
super().displayhook(defer.ensureDeferred(obj))
|
||||||
|
else:
|
||||||
|
super().displayhook(obj)
|
||||||
|
|
Loading…
Reference in a new issue