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):"""Realiza login e obtém 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):"""Retorna token válido, renovando se necessário"""ifnotself.tokenordatetime.now(tz=timezone.utc)>=self.token_expires_at:awaitself.login()returnself.tokenasyncdefget_headers(self):"""Retorna headers com autenticação"""return{"Authorization":f"Bearer {awaitself.get_token()}","Content-Type":"application/json"}# Usoimportasyncioasyncdefmain():auth=PontotelAuth(username="seu_usuario",password="sua_senha",base_url="https://apis.pontotel.com.br/pontotel/api/v4")# Fazer requisiçõesheaders=awaitauth.get_headers()asyncwithhttpx.AsyncClient()asclient:response=awaitclient.get("https://apis.pontotel.com.br/pontotel/api/v4/usuarios/",headers=headers)asyncio.run(main())