mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-01 13:46:06 -04:00
Make token serializing/deserializing async (#8427)
The idea is that in future tokens will encode a mapping of instance to position. However, we don't want to include the full instance name in the string representation, so instead we'll have a mapping between instance name and an immutable integer ID in the DB that we can use instead. We'll then do the lookup when we serialize/deserialize the token (we could alternatively pass around an `Instance` type that includes both the name and ID, but that turns out to be a lot more invasive).
This commit is contained in:
parent
a0a1ba6973
commit
7941372ec8
17 changed files with 115 additions and 59 deletions
|
@ -12,7 +12,6 @@
|
|||
# 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 logging
|
||||
from typing import Optional
|
||||
|
||||
|
@ -21,6 +20,7 @@ import attr
|
|||
from synapse.api.errors import SynapseError
|
||||
from synapse.http.servlet import parse_integer, parse_string
|
||||
from synapse.http.site import SynapseRequest
|
||||
from synapse.storage.databases.main import DataStore
|
||||
from synapse.types import StreamToken
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
@ -39,8 +39,9 @@ class PaginationConfig:
|
|||
limit = attr.ib(type=Optional[int])
|
||||
|
||||
@classmethod
|
||||
def from_request(
|
||||
async def from_request(
|
||||
cls,
|
||||
store: "DataStore",
|
||||
request: SynapseRequest,
|
||||
raise_invalid_params: bool = True,
|
||||
default_limit: Optional[int] = None,
|
||||
|
@ -54,13 +55,13 @@ class PaginationConfig:
|
|||
if from_tok == "END":
|
||||
from_tok = None # For backwards compat.
|
||||
elif from_tok:
|
||||
from_tok = StreamToken.from_string(from_tok)
|
||||
from_tok = await StreamToken.from_string(store, from_tok)
|
||||
except Exception:
|
||||
raise SynapseError(400, "'from' parameter is invalid")
|
||||
|
||||
try:
|
||||
if to_tok:
|
||||
to_tok = StreamToken.from_string(to_tok)
|
||||
to_tok = await StreamToken.from_string(store, to_tok)
|
||||
except Exception:
|
||||
raise SynapseError(400, "'to' parameter is invalid")
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue