Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
synapse
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Monitor
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Maunium
synapse
Commits
eab59d75
Unverified
Commit
eab59d75
authored
4 years ago
by
Patrick Cloke
Committed by
GitHub
4 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Convert the room handler to async/await. (#7396)
parent
032e5a2a
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
changelog.d/7396.misc
+1
-0
1 addition, 0 deletions
changelog.d/7396.misc
synapse/handlers/room.py
+18
-24
18 additions, 24 deletions
synapse/handlers/room.py
with
19 additions
and
24 deletions
changelog.d/7396.misc
0 → 100644
+
1
−
0
View file @
eab59d75
Convert the room handler to async/await.
This diff is collapsed.
Click to expand it.
synapse/handlers/room.py
+
18
−
24
View file @
eab59d75
...
@@ -25,8 +25,6 @@ from collections import OrderedDict
...
@@ -25,8 +25,6 @@ from collections import OrderedDict
from
six
import
iteritems
,
string_types
from
six
import
iteritems
,
string_types
from
twisted.internet
import
defer
from
synapse.api.constants
import
EventTypes
,
JoinRules
,
RoomCreationPreset
from
synapse.api.constants
import
EventTypes
,
JoinRules
,
RoomCreationPreset
from
synapse.api.errors
import
AuthError
,
Codes
,
NotFoundError
,
StoreError
,
SynapseError
from
synapse.api.errors
import
AuthError
,
Codes
,
NotFoundError
,
StoreError
,
SynapseError
from
synapse.api.room_versions
import
KNOWN_ROOM_VERSIONS
,
RoomVersion
from
synapse.api.room_versions
import
KNOWN_ROOM_VERSIONS
,
RoomVersion
...
@@ -103,8 +101,7 @@ class RoomCreationHandler(BaseHandler):
...
@@ -103,8 +101,7 @@ class RoomCreationHandler(BaseHandler):
self
.
third_party_event_rules
=
hs
.
get_third_party_event_rules
()
self
.
third_party_event_rules
=
hs
.
get_third_party_event_rules
()
@defer.inlineCallbacks
async
def
upgrade_room
(
def
upgrade_room
(
self
,
requester
:
Requester
,
old_room_id
:
str
,
new_version
:
RoomVersion
self
,
requester
:
Requester
,
old_room_id
:
str
,
new_version
:
RoomVersion
):
):
"""
Replace a room with a new room with a different version
"""
Replace a room with a new room with a different version
...
@@ -117,7 +114,7 @@ class RoomCreationHandler(BaseHandler):
...
@@ -117,7 +114,7 @@ class RoomCreationHandler(BaseHandler):
Returns:
Returns:
Deferred[unicode]: the new room id
Deferred[unicode]: the new room id
"""
"""
yield
self
.
ratelimit
(
requester
)
await
self
.
ratelimit
(
requester
)
user_id
=
requester
.
user
.
to_string
()
user_id
=
requester
.
user
.
to_string
()
...
@@ -138,7 +135,7 @@ class RoomCreationHandler(BaseHandler):
...
@@ -138,7 +135,7 @@ class RoomCreationHandler(BaseHandler):
# If this user has sent multiple upgrade requests for the same room
# If this user has sent multiple upgrade requests for the same room
# and one of them is not complete yet, cache the response and
# and one of them is not complete yet, cache the response and
# return it to all subsequent requests
# return it to all subsequent requests
ret
=
yield
self
.
_upgrade_response_cache
.
wrap
(
ret
=
await
self
.
_upgrade_response_cache
.
wrap
(
(
old_room_id
,
user_id
),
(
old_room_id
,
user_id
),
self
.
_upgrade_room
,
self
.
_upgrade_room
,
requester
,
requester
,
...
@@ -856,8 +853,7 @@ class RoomCreationHandler(BaseHandler):
...
@@ -856,8 +853,7 @@ class RoomCreationHandler(BaseHandler):
for
(
etype
,
state_key
),
content
in
initial_state
.
items
():
for
(
etype
,
state_key
),
content
in
initial_state
.
items
():
await
send
(
etype
=
etype
,
state_key
=
state_key
,
content
=
content
)
await
send
(
etype
=
etype
,
state_key
=
state_key
,
content
=
content
)
@defer.inlineCallbacks
async
def
_generate_room_id
(
def
_generate_room_id
(
self
,
creator_id
:
str
,
is_public
:
str
,
room_version
:
RoomVersion
,
self
,
creator_id
:
str
,
is_public
:
str
,
room_version
:
RoomVersion
,
):
):
# autogen room IDs and try to create it. We may clash, so just
# autogen room IDs and try to create it. We may clash, so just
...
@@ -869,7 +865,7 @@ class RoomCreationHandler(BaseHandler):
...
@@ -869,7 +865,7 @@ class RoomCreationHandler(BaseHandler):
gen_room_id
=
RoomID
(
random_string
,
self
.
hs
.
hostname
).
to_string
()
gen_room_id
=
RoomID
(
random_string
,
self
.
hs
.
hostname
).
to_string
()
if
isinstance
(
gen_room_id
,
bytes
):
if
isinstance
(
gen_room_id
,
bytes
):
gen_room_id
=
gen_room_id
.
decode
(
"
utf-8
"
)
gen_room_id
=
gen_room_id
.
decode
(
"
utf-8
"
)
yield
self
.
store
.
store_room
(
await
self
.
store
.
store_room
(
room_id
=
gen_room_id
,
room_id
=
gen_room_id
,
room_creator_user_id
=
creator_id
,
room_creator_user_id
=
creator_id
,
is_public
=
is_public
,
is_public
=
is_public
,
...
@@ -888,8 +884,7 @@ class RoomContextHandler(object):
...
@@ -888,8 +884,7 @@ class RoomContextHandler(object):
self
.
storage
=
hs
.
get_storage
()
self
.
storage
=
hs
.
get_storage
()
self
.
state_store
=
self
.
storage
.
state
self
.
state_store
=
self
.
storage
.
state
@defer.inlineCallbacks
async
def
get_event_context
(
self
,
user
,
room_id
,
event_id
,
limit
,
event_filter
):
def
get_event_context
(
self
,
user
,
room_id
,
event_id
,
limit
,
event_filter
):
"""
Retrieves events, pagination tokens and state around a given event
"""
Retrieves events, pagination tokens and state around a given event
in a room.
in a room.
...
@@ -908,7 +903,7 @@ class RoomContextHandler(object):
...
@@ -908,7 +903,7 @@ class RoomContextHandler(object):
before_limit
=
math
.
floor
(
limit
/
2.0
)
before_limit
=
math
.
floor
(
limit
/
2.0
)
after_limit
=
limit
-
before_limit
after_limit
=
limit
-
before_limit
users
=
yield
self
.
store
.
get_users_in_room
(
room_id
)
users
=
await
self
.
store
.
get_users_in_room
(
room_id
)
is_peeking
=
user
.
to_string
()
not
in
users
is_peeking
=
user
.
to_string
()
not
in
users
def
filter_evts
(
events
):
def
filter_evts
(
events
):
...
@@ -916,17 +911,17 @@ class RoomContextHandler(object):
...
@@ -916,17 +911,17 @@ class RoomContextHandler(object):
self
.
storage
,
user
.
to_string
(),
events
,
is_peeking
=
is_peeking
self
.
storage
,
user
.
to_string
(),
events
,
is_peeking
=
is_peeking
)
)
event
=
yield
self
.
store
.
get_event
(
event
=
await
self
.
store
.
get_event
(
event_id
,
get_prev_content
=
True
,
allow_none
=
True
event_id
,
get_prev_content
=
True
,
allow_none
=
True
)
)
if
not
event
:
if
not
event
:
return
None
return
None
filtered
=
yield
(
filter_evts
([
event
])
)
filtered
=
await
filter_evts
([
event
])
if
not
filtered
:
if
not
filtered
:
raise
AuthError
(
403
,
"
You don
'
t have permission to access that event.
"
)
raise
AuthError
(
403
,
"
You don
'
t have permission to access that event.
"
)
results
=
yield
self
.
store
.
get_events_around
(
results
=
await
self
.
store
.
get_events_around
(
room_id
,
event_id
,
before_limit
,
after_limit
,
event_filter
room_id
,
event_id
,
before_limit
,
after_limit
,
event_filter
)
)
...
@@ -934,8 +929,8 @@ class RoomContextHandler(object):
...
@@ -934,8 +929,8 @@ class RoomContextHandler(object):
results
[
"
events_before
"
]
=
event_filter
.
filter
(
results
[
"
events_before
"
])
results
[
"
events_before
"
]
=
event_filter
.
filter
(
results
[
"
events_before
"
])
results
[
"
events_after
"
]
=
event_filter
.
filter
(
results
[
"
events_after
"
])
results
[
"
events_after
"
]
=
event_filter
.
filter
(
results
[
"
events_after
"
])
results
[
"
events_before
"
]
=
yield
filter_evts
(
results
[
"
events_before
"
])
results
[
"
events_before
"
]
=
await
filter_evts
(
results
[
"
events_before
"
])
results
[
"
events_after
"
]
=
yield
filter_evts
(
results
[
"
events_after
"
])
results
[
"
events_after
"
]
=
await
filter_evts
(
results
[
"
events_after
"
])
# filter_evts can return a pruned event in case the user is allowed to see that
# filter_evts can return a pruned event in case the user is allowed to see that
# there's something there but not see the content, so use the event that's in
# there's something there but not see the content, so use the event that's in
# `filtered` rather than the event we retrieved from the datastore.
# `filtered` rather than the event we retrieved from the datastore.
...
@@ -962,7 +957,7 @@ class RoomContextHandler(object):
...
@@ -962,7 +957,7 @@ class RoomContextHandler(object):
# first? Shouldn't we be consistent with /sync?
# first? Shouldn't we be consistent with /sync?
# https://github.com/matrix-org/matrix-doc/issues/687
# https://github.com/matrix-org/matrix-doc/issues/687
state
=
yield
self
.
state_store
.
get_state_for_events
(
state
=
await
self
.
state_store
.
get_state_for_events
(
[
last_event_id
],
state_filter
=
state_filter
[
last_event_id
],
state_filter
=
state_filter
)
)
...
@@ -970,7 +965,7 @@ class RoomContextHandler(object):
...
@@ -970,7 +965,7 @@ class RoomContextHandler(object):
if
event_filter
:
if
event_filter
:
state_events
=
event_filter
.
filter
(
state_events
)
state_events
=
event_filter
.
filter
(
state_events
)
results
[
"
state
"
]
=
yield
filter_evts
(
state_events
)
results
[
"
state
"
]
=
await
filter_evts
(
state_events
)
# We use a dummy token here as we only care about the room portion of
# We use a dummy token here as we only care about the room portion of
# the token, which we replace.
# the token, which we replace.
...
@@ -989,13 +984,12 @@ class RoomEventSource(object):
...
@@ -989,13 +984,12 @@ class RoomEventSource(object):
def
__init__
(
self
,
hs
):
def
__init__
(
self
,
hs
):
self
.
store
=
hs
.
get_datastore
()
self
.
store
=
hs
.
get_datastore
()
@defer.inlineCallbacks
async
def
get_new_events
(
def
get_new_events
(
self
,
user
,
from_key
,
limit
,
room_ids
,
is_guest
,
explicit_room_id
=
None
self
,
user
,
from_key
,
limit
,
room_ids
,
is_guest
,
explicit_room_id
=
None
):
):
# We just ignore the key for now.
# We just ignore the key for now.
to_key
=
yield
self
.
get_current_key
()
to_key
=
await
self
.
get_current_key
()
from_token
=
RoomStreamToken
.
parse
(
from_key
)
from_token
=
RoomStreamToken
.
parse
(
from_key
)
if
from_token
.
topological
:
if
from_token
.
topological
:
...
@@ -1008,11 +1002,11 @@ class RoomEventSource(object):
...
@@ -1008,11 +1002,11 @@ class RoomEventSource(object):
# See https://github.com/matrix-org/matrix-doc/issues/1144
# See https://github.com/matrix-org/matrix-doc/issues/1144
raise
NotImplementedError
()
raise
NotImplementedError
()
else
:
else
:
room_events
=
yield
self
.
store
.
get_membership_changes_for_user
(
room_events
=
await
self
.
store
.
get_membership_changes_for_user
(
user
.
to_string
(),
from_key
,
to_key
user
.
to_string
(),
from_key
,
to_key
)
)
room_to_events
=
yield
self
.
store
.
get_room_events_stream_for_rooms
(
room_to_events
=
await
self
.
store
.
get_room_events_stream_for_rooms
(
room_ids
=
room_ids
,
room_ids
=
room_ids
,
from_key
=
from_key
,
from_key
=
from_key
,
to_key
=
to_key
,
to_key
=
to_key
,
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment