{"record":{"id":"a710bbf5cb677d0d","repo":"boto/boto3","slug":"unsupported-source-type-source","errorCode":null,"errorMessage":"Unsupported source type: {source}","messagePattern":"Unsupported source type: (.+?)","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"boto3/resources/params.py","lineNumber":93,"sourceCode":"    for param in request_model.params:\n        source = param.source\n        target = param.target\n\n        if source == 'identifier':\n            # Resource identifier, e.g. queue.url\n            value = getattr(parent, xform_name(param.name))\n        elif source == 'data':\n            # If this is a data member then it may incur a load\n            # action before returning the value.\n            value = get_data_member(parent, param.path)\n        elif source in ['string', 'integer', 'boolean']:\n            # These are hard-coded values in the definition\n            value = param.value\n        elif source == 'input':\n            # This is provided by the user, so ignore it here\n            continue\n        else:\n            raise NotImplementedError(f'Unsupported source type: {source}')\n\n        build_param_structure(params, target, value, index)\n\n    return params\n\n\ndef build_param_structure(params, target, value, index=None):\n    \"\"\"\n    This method provides a basic reverse JMESPath implementation that\n    lets you go from a JMESPath-like string to a possibly deeply nested\n    object. The ``params`` are mutated in-place, so subsequent calls\n    can modify the same element by its index.\n\n        >>> build_param_structure(params, 'test[0]', 1)\n        >>> print(params)\n        {'test': [1]}\n\n        >>> build_param_structure(params, 'foo.bar[0].baz', 'hello world')","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/boto/boto3/blob/6e10b029c1326a437932a8b24f38af69fd986e15/boto3/resources/params.py#L75-L111","documentation":"create_request_parameters builds request params from a request model by switching on param.source. Known sources are 'identifier', 'data', 'string', 'integer', 'boolean', and 'input'. Anything else hits the else branch and raises NotImplementedError('Unsupported source type: {source}'). This indicates the resource model contains a source kind that this boto3 version does not know how to translate.","triggerScenarios":"Loading or invoking a resource action whose request model declares an unknown source type; typically triggered by a newer botocore model than the installed boto3 understands, or a hand-edited model.","commonSituations":"Version skew between boto3 and botocore (boto3 older than botocore data files); using a patched/custom service model with a non-standard source.","solutions":["Align boto3 and botocore versions (pip install --upgrade boto3 botocore) so the source type is supported.","If using a custom model, change the member's source to a supported value or implement handling.","Downgrade botocore to match the installed boto3 if you must pin versions."],"exampleFix":"# before\n# pip install boto3==1.x botocore==1.y  # skew\n# after\npip install --upgrade boto3 botocore","handlingStrategy":"retry","validationCode":"import boto3, botocore\nfrom packaging.version import Version\n# Ensure boto3 is compatible with the installed botocore data files\ncompat = boto3.__version__ in botocore.__boto3_version_compat__ if hasattr(botocore, '__boto3_version_compat__') else True\nassert compat, 'boto3/botocore version skew detected'","typeGuard":null,"tryCatchPattern":"try:\n    session.resource('service-name')\nexcept NotImplementedError as e:\n    if 'Unsupported source type' in str(e):\n        import subprocess\n        subprocess.check_call(['pip', 'install', '--upgrade', 'boto3', 'botocore'])\n    raise","preventionTips":["Keep boto3 and botocore versions in sync.","Pin a known-good compatible pair in requirements.","Run integration smoke tests after dependency upgrades."],"tags":["resources","params","model","version-skew","boto3"],"backgroundTag":null,"analyzedSha":"6e10b029c1326a437932a8b24f38af69fd986e15","analyzedAt":"2026-08-11T20:52:47.213Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}