importhttpxfromdatetimeimportdatetime,timedelta,timezoneclassPontotelAuth:def__init__(self,username,password,base_url):self.username=usernameself.password=passwordself.base_url=base_urlself.token=Noneself.token_expires_at=Noneasyncdeflogin(self):"""Log in and obtain a token"""url=f"{self.base_url}/login/"payload={"username":self.username,"password":self.password}asyncwithhttpx.AsyncClient()asclient:response=awaitclient.post(url,json=payload)response.raise_for_status()data=response.json()self.token=data["access_token"]self.token_expires_at=datetime.now(tz=timezone.utc)+timedelta(minutes=60)returnself.tokenasyncdefget_token(self):"""Return a valid token, renewing it when needed"""ifnotself.tokenordatetime.now(tz=timezone.utc)>=self.token_expires_at:awaitself.login()returnself.tokenasyncdefget_headers(self):"""Return authenticated headers"""return{"Authorization":f"Bearer {awaitself.get_token()}","Content-Type":"application/json"}# Usageimportasyncioasyncdefmain():auth=PontotelAuth(username="your_username",password="your_password",base_url="https://apis.pontotel.com.br/pontotel/api/v4")# Make requestsheaders=awaitauth.get_headers()asyncwithhttpx.AsyncClient()asclient:response=awaitclient.get("https://apis.pontotel.com.br/pontotel/api/v4/usuarios/",headers=headers)asyncio.run(main())