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
- Upgrade boto3 and botocore together to current, compatible versions.
- If using custom models, restrict identifier sources to the recognized set.
- 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
- Upgrade boto3 and botocore in lockstep.
- Pin compatible versions in your dependency manifest.
- Do not mix a newer botocore data bundle with an older boto3.
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
- Unsupported source type: {source}
- Search path hits shape type {shape.type_name} from {item}
- Unknown keyword argument: {name}
- Required parameter {identifier} not set
- {self.__class__.__name__} has no load method
AI-assisted analysis of boto/boto3@c7b4afac23 (2026-08-04).
Data as JSON: /data/errors/55b061c8364ac87b.json.
Report an issue: GitHub.