docs: async def login(self):
          """Login to Apple TV using specified login id."""
          # Do not use session.get_data(...) in login as that would end up in
          # an infinte loop.
          def _login_request():
              return self.http.get_data(
                  self._mkurl('login?[AUTH]&hasFP=1',
                              session=False, login_id=True),
                  headers=_DMAP_HEADERS)
  
          resp = await self._do(_login_request, is_login=True)
          self._session_id = parser.first(resp, 'mlog', 'mlid')
  
          _LOGGER.info('Logged in and got session id %s', self._session_id)
          return self._session_id