boto/boto3 · error · NotImplementedError

Unsupported source type: {source}

Error message

Unsupported source type: {source}

What it means

Raised by build_identifiers() in boto3/resources/response.py when an identifier's source is not one of 'response', 'requestParameter', 'identifier', 'data', or 'input'. Like error 18, this is driven by the service resource model's identifier definitions, not by user-supplied arguments. Encountering it indicates the model contains an unrecognized identifier source, typically from a boto3/botocore version mismatch or a custom/patched model.

Source

Thrown at boto3/resources/response.py:71

    for identifier in identifiers:
        source = identifier.source
        target = identifier.target

        if source == 'response':
            value = jmespath.search(identifier.path, raw_response)
        elif source == 'requestParameter':
            value = jmespath.search(identifier.path, params)
        elif source == 'identifier':
            value = getattr(parent, xform_name(identifier.name))
        elif source == 'data':
            # If this is a data member then it may incur a load
            # action before returning the value.
            value = get_data_member(parent, identifier.path)
        elif source == 'input':
            # This value is set by the user, so ignore it here
            continue
        else:
            raise NotImplementedError(f'Unsupported source type: {source}')

        results.append((xform_name(target), value))

    return results


def build_empty_response(search_path, operation_name, service_model):
    """
    Creates an appropriate empty response for the type that is expected,
    based on the service model's shape type. For example, a value that
    is normally a list would then return an empty list. A structure would
    return an empty dict, and a number would return None.

    :type search_path: string
    :param search_path: JMESPath expression to search in the response
    :type operation_name: string
    :param operation_name: Name of the underlying service operation.
    :type service_model: :ref:`botocore.model.ServiceModel`

View on GitHub (pinned to c7b4afac23)

Solutions

  1. Upgrade boto3 and botocore together to current, compatible versions.
  2. If using custom models, restrict identifier sources to the recognized set.
  3. Align botocore to the version your boto3 release expects.

Example fix

# environment fix, not user code
# before
pip install boto3==1.26.0  # pulls incompatible botocore

# after
pip install --upgrade boto3 botocore
Defensive patterns

Strategy: validation

Validate before calling

# Not preventable at call-site; validate environment instead.
import boto3, botocore
print(f'boto3={boto3.__version__} botocore={botocore.__version__}')
# Ensure they are a compatible pair (boto3 pins botocore>=X).

Try / catch

try:
    result = resource.action()
except NotImplementedError as e:
    if 'Unsupported source type' in str(e):
        raise RuntimeError('Likely boto3/botocore version mismatch; upgrade both') from e
    raise

Prevention

When it happens

Trigger: Processing a resource action response where the identifier source in the model is not recognized; using a botocore data file newer than the installed boto3 that introduced a new identifier source type.

Common situations: Version skew between boto3 and botocore; custom resource model overrides; running against a beta/newer service model.

Related errors


AI-assisted analysis of boto/boto3@c7b4afac23 (2026-08-04). Data as JSON: /data/errors/55b061c8364ac87b.json. Report an issue: GitHub.