tree b093f3dd59c20c834da46e694b7bbca64ad7d9cb
parent 63ac08afe44c3da51a6fb3bfc2fcdb6588e040ef
author bojeil-google <bojeil-google@users.noreply.github.com> 1626973291 -0700
committer GitHub <noreply@github.com> 1626973291 -0400
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJg+aRrCRBK7hj4Ov3rIwAAT8YIAKSt/fYhROdYp3nkevqukXKE
 56YS2CbRc3/vQ4L0sWRP0pIGgAic0M/CFSzHB2MLgDZD7Vgd3nBbP9SzveYVuLg4
 RQ2hddZ5j2Vd6P7A44zcsLOGhSdM/V6D7lDpp+ybOgE8vsViSkBjZ5zmpoBSLflE
 8bTm4CYbOSK14ua15eMwn0/7AO9qkjMQntC1pNvIcCpGXAkY9Y6/eLTNVEmM2XvM
 WD0IRE4ffmM9YQds281Zw5TBMmzkIv3N4gHP19YgQ3yWChb2qKYVKSsT18xesxpL
 Jy2wTg46MkTzg92rjZKPZVMzi2BdEExDWe6hkrLMgi851ZTbaRaAPxXlis2w0Ng=
 =+1Vy
 -----END PGP SIGNATURE-----
 

feat: support refresh callable on google.oauth2.credentials.Credentials (#812)

This is an optional parameter that can be set via the constructor.
It is used to provide the credentials with new tokens and their
expiration time on `refresh()` call.

```
def refresh_handler(request, scopes):
    # Generate a new token for the requested scopes by calling
    # an external process.
    return (
        "ACCESS_TOKEN",
        _helpers.utcnow() + datetime.timedelta(seconds=3600))

creds = google.oauth2.credentials.Credentials(
    scopes=scopes,
    refresh_handler=refresh_handler)
creds.refresh(request)
```

It is useful in the following cases:
- Useful in general when tokens are obtained by calling some
  external process on demand.
- Useful in particular for retrieving downscoped tokens from a
  token broker.

This should have no impact on existing behavior. Refresh tokens
will still have higher priority over refresh handlers.

A getter and setter is exposed to make it easy to set the callable
on unpickled credentials as the callable may not be easily serialized.

```
unpickled = pickle.loads(pickle.dumps(oauth_creds))
unpickled.refresh_handler = refresh_handler
```