This repository has been archived by the owner on Apr 26, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
make /context lazyload & filter aware #3567
Merged
Merged
Changes from 18 commits
Commits
Show all changes
20 commits
Select commit
Hold shift + click to select a range
7b7fd27
untested attempt at deduplicating lazy-loaded members
ara4n c341d81
Merge branch 'develop' into matthew/remove_redundant_lazy_members
ara4n f7bd5da
add include_redundant_members filter option & make it work
ara4n 589e5aa
merge and apply isort
ara4n 8e66dd1
merge in #2970
ara4n a08b37b
fix bad merge
ara4n 7362e6c
make /context lazyload & filter aware
ara4n a17f0b6
make it work
ara4n f9c3c26
Merge branch 'matthew/filter_members' into matthew/remove_redundant_l…
ara4n c2870ab
Merge branch 'matthew/remove_redundant_lazy_members' into matthew/laz…
ara4n 7d99b0e
changelog
ara4n cd27a77
changelog
ara4n d32e5f8
Merge branch 'matthew/filter_members' into matthew/remove_redundant_l…
ara4n 238f750
deduplicating redundant members via event_id rather than mxid
ara4n 2a79e1a
Merge branch 'matthew/remove_redundant_lazy_members' into matthew/laz…
ara4n 5885eea
Merge branch 'develop' into matthew/lazy_load_apis
ara4n ebcae48
fix merge
ara4n 9d27ad9
trailing commas
ara4n 886cc0f
incorporate review
ara4n e2638f6
missing import
ara4n File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
make the /context API filter & lazy-load aware as per MSC1227 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -401,7 +401,7 @@ def __init__(self, hs): | |
self.store = hs.get_datastore() | ||
|
||
@defer.inlineCallbacks | ||
def get_event_context(self, user, room_id, event_id, limit): | ||
def get_event_context(self, user, room_id, event_id, limit, event_filter): | ||
"""Retrieves events, pagination tokens and state around a given event | ||
in a room. | ||
|
||
|
@@ -411,6 +411,8 @@ def get_event_context(self, user, room_id, event_id, limit): | |
event_id (str) | ||
limit (int): The maximum number of events to return in total | ||
(excluding state). | ||
event_filter (Filter|None): the filter to apply to the events returned | ||
(excluding the target event_id) | ||
|
||
Returns: | ||
dict, or None if the event isn't found | ||
|
@@ -443,7 +445,7 @@ def filter_evts(events): | |
) | ||
|
||
results = yield self.store.get_events_around( | ||
room_id, event_id, before_limit, after_limit | ||
room_id, event_id, before_limit, after_limit, event_filter | ||
) | ||
|
||
results["events_before"] = yield filter_evts(results["events_before"]) | ||
|
@@ -455,8 +457,24 @@ def filter_evts(events): | |
else: | ||
last_event_id = event_id | ||
|
||
types = None | ||
filtered_types = None | ||
if event_filter and event_filter.lazy_load_members(): | ||
members = {} | ||
for ev in ( | ||
results["events_before"] + | ||
[results["event"]] + | ||
results["events_after"] | ||
): | ||
members[ev.sender] = True | ||
filtered_types = [EventTypes.Member] | ||
types = [(EventTypes.Member, member) for member in members.keys()] | ||
|
||
# XXX: why do we return the state as of the last event rather than the | ||
# first? Shouldn't we be consistent with /sync? | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (it would be helpful to link to the bug in the comment, I guess) |
||
|
||
state = yield self.store.get_state_for_events( | ||
[last_event_id], None | ||
[last_event_id], types, filtered_types=filtered_types, | ||
) | ||
results["state"] = list(state[last_event_id].values()) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -531,11 +531,20 @@ def on_GET(self, request, room_id, event_id): | |
|
||
limit = parse_integer(request, "limit", default=10) | ||
|
||
# for symmetry with /messages for now | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't really understand this comment. What do you mean, for now? |
||
filter_bytes = parse_string(request, "filter") | ||
if filter_bytes: | ||
filter_json = urlparse.unquote(filter_bytes).decode("UTF-8") | ||
event_filter = Filter(json.loads(filter_json)) | ||
else: | ||
event_filter = None | ||
|
||
results = yield self.room_context_handler.get_event_context( | ||
requester.user, | ||
room_id, | ||
event_id, | ||
limit, | ||
event_filter, | ||
) | ||
|
||
if not results: | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hrm, can we use a set rather than a dict here?
or even: