code: async def refresh_token(self):
          
          url, headers, body = self._setup_token_request()
          request_id = uuid.uuid4()
          logging.debug(_utils.REQ_LOG_FMT.format(
              request_id=request_id, method='POST', url=url, kwargs=None))
          async with self._session.post(url, headers=headers, data=body) as resp:
              log_kw = {
                  'request_id': request_id,
                  'method': 'POST',
                  'url': resp.url,
                  'status': resp.status,
                  'reason': resp.reason,
              }
              logging.debug(_utils.RESP_LOG_FMT.format(**log_kw))
  
              # avoid leaky abstractions and wrap http errors with our own
              try:
                  resp.raise_for_status()
              except aiohttp.ClientResponseError as e:
                  msg = f'[{request_id}] Issue connecting to {resp.url}: {e}'
                  logging.error(msg, exc_info=e)
                  raise exceptions.GCPHTTPResponseError(msg, resp.status)
  
              response = await resp.json()
              try:
                  self.token = response['access_token']
              except KeyError:
                  msg = '[{request_id}] No access token in response.'
                  logging.error(msg)
                  raise exceptions.GCPAuthError(msg)
  
          self.expiry = _client._parse_expiry(response)
docs: Refresh oauth access token attached to this HTTP session.
  
          Raises:
              :exc:`.GCPAuthError`: if no token was found in the
                  response.
              :exc:`.GCPHTTPError`: if any exception occurred,
                  specifically a :exc:`.GCPHTTPResponseError`, if the
                  exception is associated with a response status code.