mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-14 11:57:44 +00: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
|
||||
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:
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
# 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.
|
||||
import inspect
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
|
@ -20,6 +21,7 @@ from twisted.conch.insults import insults
|
|||
from twisted.conch.manhole import ColoredManhole, ManholeInterpreter
|
||||
from twisted.conch.ssh.keys import Key
|
||||
from twisted.cred import checkers, portal
|
||||
from twisted.internet import defer
|
||||
|
||||
PUBLIC_KEY = (
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHhGATaW4KhE23+7nrH4jFx3yLq9OjaEs5"
|
||||
|
@ -141,3 +143,15 @@ class SynapseManholeInterpreter(ManholeInterpreter):
|
|||
self.write("".join(lines))
|
||||
finally:
|
||||
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