| from botocore.configprovider import SmartDefaultsConfigStoreFactory, os | |
| class AioSmartDefaultsConfigStoreFactory(SmartDefaultsConfigStoreFactory): | |
| async def merge_smart_defaults(self, config_store, mode, region_name): | |
| if mode == 'auto': | |
| mode = await self.resolve_auto_mode(region_name) | |
| default_configs = ( | |
| self._default_config_resolver.get_default_config_values(mode) | |
| ) | |
| for config_var in default_configs: | |
| config_value = default_configs[config_var] | |
| method = getattr(self, f'_set_{config_var}', None) | |
| if method: | |
| method(config_store, config_value) | |
| async def resolve_auto_mode(self, region_name): | |
| current_region = None | |
| if os.environ.get('AWS_EXECUTION_ENV'): | |
| default_region = os.environ.get('AWS_DEFAULT_REGION') | |
| current_region = os.environ.get('AWS_REGION', default_region) | |
| if not current_region: | |
| if self._instance_metadata_region: | |
| current_region = self._instance_metadata_region | |
| else: | |
| try: | |
| current_region = await self._imds_region_provider.provide() | |
| self._instance_metadata_region = current_region | |
| except Exception: | |
| pass | |
| if current_region: | |
| if region_name == current_region: | |
| return 'in-region' | |
| else: | |
| return 'cross-region' | |
| return 'standard' | |