def get(app: web.Application,
        feature_type: Type[Any] = None,
        key: Hashable = None
        ) -> Any:
    """
    Finds declared feature.
    Identification is done based on feature type and key.

    Args:
        app (web.Application):
            The current Aiohttp application.

        feature_type (Type[Any]):
            The Python type of the desired feature.
            If specified, it will be checked against the found feature.

        key (Hashable):
            A specific identifier for the desired feature.
            Defaults to `feature_type`

    Returns:
        Any: The feature found for the combination of `feature_type` and `key`
    """
    key = key or feature_type

    if not key:
        raise AssertionError('No feature identifier provided')

    try:
        found = app[FEATURES_KEY][key]
    except KeyError:
        raise KeyError(f'No feature found for "{key}"')

    if feature_type and not isinstance(found, feature_type):
        raise AssertionError(f'Found {found} did not match type "{feature_type}"')

    return found