try/except in loop

Cameron Simpson cs at cskk.id.au
Fri Nov 27 21:06:02 EST 2020


I had to do this with a different API the toehr year, and made this 
method:

    def auth_token(self):
        ''' Obtain a current auth token [...]
            Refreshes the cached token if stale.
        '''
        while True:
            with self._auth_token_lock:
                token = self._auth_token
                if (token and token.timestamp + FM_TOKEN_LIFESPAN -
                        FM_TOKEN_LIFESPAN_SKEW > time.time()):
                    break
                try:
                    token = self._get_new_auth_token()
                except Exception as e:
                    error("error fetching token: %s", e)
                else:
                    if token:
                        self._auth_token = token
                        break
                    error("token not refreshed, delay then retry")
            time.sleep(self.DEFAULT_RETRY_DELAY)
        return token

The "while True" bit was because the server was flakey and sometime you 
just had to wait for it to come back.

Then I just called this to obtain a current token whenever I needed a 
token. in the API, for example:

    headers = {'Authorization': 'Bearer ' + self.auth_token().token}

Means you don't have to embed verbose checks all through your code - 
just grab "the token" and proceeed.

Cheers,
Cameron Simpson <cs at cskk.id.au>


More information about the Python-list mailing list