# Buggy code
async def on_GET(self, request, room_id, event_id):
    requester = await self.auth.get_user_by_req(request, allow_guest=False)
    await assert_user_is_admin(self.auth, requester.user)

    limit = parse_integer(request, "limit", default=10)

    # picking the API shape for symmetry with /messages
    filter_str = parse_string(request, b"filter", encoding="utf-8")
    if filter_str:
        filter_json = urlparse.unquote(filter_str)
        event_filter = Filter(json_decoder.decode(filter_json))  # type: Optional[Filter]
    else:
        event_filter = None

    results = await self.room_context_handler.get_event_context(
        requester,
        room_id,
        event_id,
        limit,
        event_filter,
        use_admin_priviledge=True,
    )

    if not results:
        raise SynapseError(404, "Event not found.", errcode=Codes.NOT_FOUND)

    time_now = self.clock.time_msec()
    results["events_before"] = await self._event_serializer.serialize_events(
        results["events_before"], time_now
    )
    results["event"] = await self._event_serializer.serialize_event(
        results["event"], time_now
    )
    results["events_after"] = await self._event_serializer.serialize_events(
        results["events_after"], time_now
    )
    results["state"] = await self._event_serializer.serialize_events(
        results["state"], time_now
    )

    return 200, results


# Traceback (ValueError)
2021-02-26 14:01:23,554 - synapse.http.server - 94 - ERROR - POST-320 - Failed handle request via 'JoinRoomAliasServlet': <XForwardedForRequest at 0x7feef12ec358 method='POST' uri='/_synapse/admin/v1/join/%23test%3Aexemple.test.com' clientproto='HTTP/1.1' site='8008'>
Traceback (most recent call last):
File "/opt/synapse2/env/lib/python3.6/site-packages/twisted/internet/defer.py", line 1416, in _inlineCallbacks
result = result.throwExceptionIntoGenerator(g)
File "/opt/synapse2/env/lib/python3.6/site-packages/twisted/python/failure.py", line 512, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb)
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/storage/databases/main/event_federation.py", line 634, in get_latest_event_ids_in_room
desc="get_latest_event_ids_in_room",
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/storage/database.py", line 1453, in simple_select_onecol
db_autocommit=True,
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/storage/database.py", line 676, in runInteraction
**kwargs,
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/storage/database.py", line 752, in runWithConnection
self._db_pool.runWithConnection(inner_func, *args, **kwargs)
File "/opt/synapse2/env/lib/python3.6/site-packages/twisted/python/threadpool.py", line 250, in inContext
result = inContext.theWork()
File "/opt/synapse2/env/lib/python3.6/site-packages/twisted/python/threadpool.py", line 266, in <lambda>
inContext.theWork = lambda: context.call(ctx, func, *args, **kw)
File "/opt/synapse2/env/lib/python3.6/site-packages/twisted/python/context.py", line 122, in callWithContext
return self.currentContext().callWithContext(ctx, func, *args, **kw)
File "/opt/synapse2/env/lib/python3.6/site-packages/twisted/python/context.py", line 85, in callWithContext
return func(*args,**kw)
File "/opt/synapse2/env/lib/python3.6/site-packages/twisted/enterprise/adbapi.py", line 306, in _runWithConnection
compat.reraise(excValue, excTraceback)
File "/opt/synapse2/env/lib/python3.6/site-packages/twisted/python/compat.py", line 464, in reraise
raise exception.with_traceback(traceback)
File "/opt/synapse2/env/lib/python3.6/site-packages/twisted/enterprise/adbapi.py", line 297, in _runWithConnection
result = func(conn, *args, **kw)
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/storage/database.py", line 746, in inner_func
return func(db_conn, *args, **kwargs)
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/storage/database.py", line 540, in new_transaction
r = func(cursor, *args, **kwargs)
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/storage/database.py", line 1422, in simple_select_onecol_txn
txn.execute(sql, list(keyvalues.values()))
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/storage/database.py", line 295, in execute
self._do_execute(self.txn.execute, sql, *args)
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/storage/database.py", line 321, in _do_execute
return func(sql, *args)
File "/opt/synapse2/env/lib/python3.6/site-packages/psycopg2/extensions.py", line 121, in getquoted
pobjs = [adapt(o) for o in self._seq]
File "/opt/synapse2/env/lib/python3.6/site-packages/synapse/types.py", line 220, in __iter__
raise ValueError("Attempted to iterate a %s" % (type(self).__name__,))
ValueError: Attempted to iterate a RoomID

# Fixed code
async def on_GET(
    self, request: SynapseRequest, room_id: str, event_id: str
) -> Tuple[int, JsonDict]:
    requester = await self.auth.get_user_by_req(request, allow_guest=False)
    await assert_user_is_admin(self.auth, requester.user)

    limit = parse_integer(request, "limit", default=10)

    # picking the API shape for symmetry with /messages
    filter_str = parse_string(request, b"filter", encoding="utf-8")
    if filter_str:
        filter_json = urlparse.unquote(filter_str)
        event_filter = Filter(json_decoder.decode(filter_json))  # type: Optional[Filter]
    else:
        event_filter = None

    results = await self.room_context_handler.get_event_context(
        requester,
        room_id,
        event_id,
        limit,
        event_filter,
        use_admin_priviledge=True,
    )

    if not results:
        raise SynapseError(404, "Event not found.", errcode=Codes.NOT_FOUND)

    time_now = self.clock.time_msec()
    results["events_before"] = await self._event_serializer.serialize_events(
        results["events_before"], time_now
    )
    results["event"] = await self._event_serializer.serialize_event(
        results["event"], time_now
    )
    results["events_after"] = await self._event_serializer.serialize_events(
        results["events_after"], time_now
    )
    results["state"] = await self._event_serializer.serialize_events(
        results["state"], time_now
    )

    return 200, results