|
| 1 | +import asyncio |
| 2 | +from typing import Optional |
| 3 | + |
1 | 4 | from botocore import UNSIGNED, translate |
2 | 5 | from botocore import __version__ as botocore_version |
3 | 6 | from botocore.context import get_context |
@@ -126,6 +129,36 @@ async def get_service_data(self, service_name, api_version=None): |
126 | 129 | ) |
127 | 130 | return service_data |
128 | 131 |
|
| 132 | + def warm_up_loader_caches( |
| 133 | + self, |
| 134 | + service_name: str, |
| 135 | + api_version: Optional[str] = None, |
| 136 | + ): |
| 137 | + loader = self.get_component('data_loader') |
| 138 | + |
| 139 | + # from session.py |
| 140 | + loader.load_data_with_path('endpoints') |
| 141 | + loader.load_data('sdk-default-configuration') |
| 142 | + loader.load_service_model(service_name, 'waiters-2', api_version) |
| 143 | + loader.load_service_model(service_name, 'paginators-1', api_version) |
| 144 | + loader.load_service_model( |
| 145 | + service_name, type_name='service-2', api_version=api_version |
| 146 | + ) |
| 147 | + loader.list_available_services(type_name='service-2') |
| 148 | + |
| 149 | + # from client.py |
| 150 | + loader.load_data('partitions') |
| 151 | + loader.load_service_model( |
| 152 | + service_name, 'service-2', api_version=api_version |
| 153 | + ) |
| 154 | + loader.load_service_model( |
| 155 | + service_name, 'endpoint-rule-set-1', api_version=api_version |
| 156 | + ) |
| 157 | + loader.load_data('_retry') |
| 158 | + |
| 159 | + # from docs/service.py |
| 160 | + loader.load_service_model(service_name, 'examples-1', api_version) |
| 161 | + |
129 | 162 | def create_client(self, *args, **kwargs): |
130 | 163 | return ClientCreatorContext(self._create_client(*args, **kwargs)) |
131 | 164 |
|
@@ -167,6 +200,13 @@ async def _create_client( |
167 | 200 | ) |
168 | 201 |
|
169 | 202 | loader = self.get_component('data_loader') |
| 203 | + |
| 204 | + # TODO: implement config flag |
| 205 | + if getattr(config, 'auto_warm_up_loader_caches'): |
| 206 | + await asyncio.to_thread( |
| 207 | + self.warm_up_loader_caches, service_name, api_version |
| 208 | + ) |
| 209 | + |
170 | 210 | event_emitter = self.get_component('event_emitter') |
171 | 211 | response_parser_factory = self.get_component('response_parser_factory') |
172 | 212 | if config is not None and config.signature_version is UNSIGNED: |
|
0 commit comments