def _resolve_signature_version(self, service_name, resolved):
# Client config overrides everything.
client = self.client_config
if client and client.signature_version is not None:
return client.signature_version
# Scoped config overrides picking from the endpoint metadata.
scoped = self.scoped_config
if scoped is not None:
service_config = scoped.get(service_name)
if service_config is not None and isinstance(service_config, dict):
version = service_config.get('signature_version')
if version:
logger.debug(
"Switching signature version for service %s "
"to version %s based on config file override.",
service_name, version)
return version
# Pick a signature version from the endpoint metadata if present.
if 'signatureVersions' in resolved:
potential_versions = resolved['signatureVersions']
if service_name == 's3':
# We currently prefer s3 over s3v4.
if 's3' in potential_versions:
return 's3'
elif 's3v4' in potential_versions:
return 's3v4'
if 'v4' in potential_versions:
return 'v4'
# Now just iterate over the signature versions in order until we
# find the first one that is known to Botocore.
for known in AUTH_TYPE_MAPS:
if known in potential_versions:
return known
raise UnknownSignatureVersionError(
signature_version=resolved.get('signatureVersions'))
评论列表
文章目录