11import os
22import sys
3+ import time
34import httpx
45from dotenv import load_dotenv
56
@@ -37,7 +38,7 @@ def get_chain(ric, token, url) -> dict:
3738 }
3839 # Request chain data from the pricing chains endpoint.
3940 response = httpx .get (url , params = parameters , headers = headers , verify = False )
40- response .raise_for_status ()
41+ response .raise_for_status () # Raise an exception for 4xx/5xx HTTP errors
4142 return response .json ()
4243
4344def post_historical_event (rics , token , url ) -> dict :
@@ -55,9 +56,23 @@ def post_historical_event(rics, token, url) -> dict:
5556
5657 # `json=payload` serializes and sends JSON in the request body.
5758 response = httpx .post (url , json = payload , headers = headers , verify = False )
58- response .raise_for_status ()
59+ response .raise_for_status () # Raise an exception for 4xx/5xx HTTP errors
5960 return response .json ()
6061
62+ def post_authen_refresh (appkey , refresh_token ,url ) -> dict :
63+ """Refresh the access token using the refresh token."""
64+ payload = {
65+ "grant_type" : "refresh_token" ,
66+ "refresh_token" : refresh_token ,
67+ "client_id" : appkey ,
68+ }
69+ headers = {
70+ "Content-Type" : "application/x-www-form-urlencoded"
71+ }
72+ response = httpx .post (url , data = payload , headers = headers , verify = False )
73+ response .raise_for_status () # Raise an exception for 4xx/5xx HTTP errors
74+ return response .json ()
75+
6176def post_authen_revoke (token , appkey , url ) -> None :
6277 """Revoke the access token to end the session."""
6378 headers = {
@@ -82,10 +97,10 @@ def main() -> None:
8297 base_url = os .getenv ("RDP_BASE_URL" ) # Default to Refinitiv API base URL if not set
8398
8499 # OAuth token endpoint used to obtain access token.
85- url = f"{ base_url } /auth/oauth2/v1/token"
100+ auth_url = f"{ base_url } /auth/oauth2/v1/token"
86101
87102 try :
88- token_data = authenticate_rdp (machine_id , password , app_key , url )
103+ token_data = authenticate_rdp (machine_id , password , app_key , auth_url )
89104 print ("Authentication successful! Status code: 200" )
90105 # For demos only: print token to verify auth worked.
91106 print (token_data ["access_token" ])
@@ -126,6 +141,22 @@ def main() -> None:
126141 except httpx .RequestError as e :
127142 print (f"Request error while posting historical event data: { e } " )
128143
144+ time .sleep (5 ) # Sleep for 5 seconds before refreshing token (for demo purposes)
145+ try :
146+ refresh_token = token_data .get ("refresh_token" )
147+ if refresh_token :
148+ print ("Refreshing access token..." )
149+ refreshed_token_data = post_authen_refresh (app_key , refresh_token , auth_url )
150+ print ("Access token refreshed successfully!" )
151+ print (f" New Access Token: { refreshed_token_data ['access_token' ]} " )
152+ else :
153+ print ("No refresh token available. Skipping token refresh." )
154+ except httpx .HTTPStatusError as e_refresh :
155+ print (f"HTTP error while refreshing token: { e_refresh .response .status_code } - { e_refresh .response .text } " )
156+ except httpx .RequestError as e_refresh :
157+ print (f"Request error while refreshing token: { e_refresh } " )
158+
159+ time .sleep (5 ) # Sleep for 5 seconds before revoking token (for demo purposes)
129160 revoke_url = f"{ base_url } /auth/oauth2/v1/revoke"
130161 try :
131162 print ("Revoking access token..." )
0 commit comments