| 297 | |
| 298 | |
| 299 | def register_session_id_event(session, orchestrator_factory=None): |
| 300 | if orchestrator_factory is None: |
| 301 | orchestrator_factory = _get_cli_session_orchestrator |
| 302 | event_emitter = session.get_component('event_emitter') |
| 303 | |
| 304 | def _inject_session_id(**kwargs): |
| 305 | try: |
| 306 | orchestrator = orchestrator_factory() |
| 307 | sid_component = UserAgentComponent( |
| 308 | "sid", orchestrator.session_id |
| 309 | ).to_string() |
| 310 | # Insert sid after md/installer to preserve original |
| 311 | # user-agent component ordering. |
| 312 | extra = session.user_agent_extra |
| 313 | idx = extra.find('md/installer') |
| 314 | end = extra.find(' ', idx) |
| 315 | if end == -1: |
| 316 | end = len(extra) |
| 317 | session.user_agent_extra = ( |
| 318 | extra[:end] + f' {sid_component}' + extra[end:] |
| 319 | ) |
| 320 | except Exception: |
| 321 | # Ideally, the AWS CLI should never throw if the session id |
| 322 | # can't be generated since it's not critical for users. Issues |
| 323 | # with session data should instead be caught server-side. |
| 324 | pass |
| 325 | event_emitter.unregister('before-create-client', _inject_session_id) |
| 326 | |
| 327 | event_emitter.register('before-create-client', _inject_session_id) |