docs: def _get_installation_key(
          self, project, user_id=None, install_id=None, reprime=False
      ):
          """Get the auth token for a project or installation id."""
          installation_id = install_id
          if project is not None:
              installation_id = self.installation_map.get(project, {}).get(
                  "installation_id"
              )
  
          if not installation_id:
              if reprime:
                  # prime installation map and try again without refreshing
                  self._prime_install_map()
                  return self._get_installation_key(
                      project, user_id=user_id, install_id=install_id, reprime=False
                  )
              LOGGER.debug("No installation ID available for project %s", project)
              return ""
  
          # Look up the token from cache
          now = datetime.now(timezone.utc)
          token, expiry = self.installation_token_cache.get(installation_id, (None, None))
  
          # Request new token if the available one is expired or could not be found
          if (not expiry) or (not token) or (now >= expiry):
              LOGGER.debug("Requesting new token for installation %s", installation_id)
              headers = self._get_app_auth_headers()
              url = "{}/installations/{}/access_tokens".format(
                  self.api_url, installation_id
              )
  
              json_data = {"user_id": user_id} if user_id else None
  
              response = requests.post(url, headers=headers, json=json_data)
              response.raise_for_status()
  
              data = response.json()
  
              token = data["token"]
              expiry = datetime.strptime(data["expires_at"], "%Y-%m-%dT%H:%M:%SZ")
              # Update time zone of expiration date to make it comparable with now()
              expiry = expiry.replace(tzinfo=timezone.utc)
  
              # Assume, that the token expires two minutes earlier, to not
              # get lost during the checkout/scraping?
              expiry -= timedelta(minutes=2)
  
              self.installation_token_cache[installation_id] = (token, expiry)
  
          return token