def METHOD_NAME(
    self,
    context: RequestContext,
    stream_arn: StreamArn,
    limit: PositiveIntegerObject = None,
    exclusive_start_shard_id: ShardId = None,
) -> DescribeStreamOutput:
    store = get_dynamodbstreams_store(context.account_id, context.region)
    kinesis = connect_to(
        aws_access_key_id=context.account_id, region_name=context.region
    ).kinesis
    for stream in store.ddb_streams.values():
        if stream["StreamArn"] == stream_arn:
            # get stream details
            dynamodb = connect_to(
                aws_access_key_id=context.account_id, region_name=context.region
            ).dynamodb
            table_name = table_name_from_stream_arn(stream["StreamArn"])
            stream_name = get_kinesis_stream_name(table_name)
            stream_details = kinesis.METHOD_NAME(StreamName=stream_name)
            table_details = dynamodb.describe_table(TableName=table_name)
            stream["KeySchema"] = table_details["Table"]["KeySchema"]
            stream["StreamStatus"] = STREAM_STATUS_MAP.get(
                stream_details["StreamDescription"]["StreamStatus"]
            )
            # Replace Kinesis ShardIDs with ones that mimic actual
            # DynamoDBStream ShardIDs.
            stream_shards = copy.deepcopy(stream_details["StreamDescription"]["Shards"])
            start_index = 0
            for index, shard in enumerate(stream_shards):
                shard["ShardId"] = get_shard_id(stream, shard["ShardId"])
                shard.pop("HashKeyRange", None)
                # we want to ignore the shards before exclusive_start_shard_id parameters
                # we store the index where we encounter then slice the shards
                if exclusive_start_shard_id and exclusive_start_shard_id == shard["ShardId"]:
                    start_index = index
            if exclusive_start_shard_id:
                # slicing the resulting shards after the exclusive_start_shard_id parameters
                stream_shards = stream_shards[start_index + 1 :]
            stream["Shards"] = stream_shards
            stream_description = select_from_typed_dict(StreamDescription, stream)
            return DescribeStreamOutput(StreamDescription=stream_description)
    raise ResourceNotFoundException(f"Stream {stream_arn} was not found.")