update client and oath and improve code
This commit is contained in:
parent
a282312e78
commit
a858809f06
35
api-client/client.py
Normal file
35
api-client/client.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
from requests import RequestException
|
||||||
|
from requests_oauthlib import OAuth2Session
|
||||||
|
|
||||||
|
|
||||||
|
def api_client(call_dict):
|
||||||
|
|
||||||
|
url = call_dict["url"]
|
||||||
|
headers = call_dict["headers"]
|
||||||
|
body = call_dict["body"]
|
||||||
|
|
||||||
|
client = OAuth2Session(token=call_dict["token"])
|
||||||
|
method = call_dict["method"]
|
||||||
|
|
||||||
|
try:
|
||||||
|
if method == 'GET':
|
||||||
|
response = client.get(url, headers=headers, params=body)
|
||||||
|
elif method == 'POST':
|
||||||
|
response = client.post(url, headers=headers, json=body)
|
||||||
|
elif method == 'PUT':
|
||||||
|
response = client.put(url, headers=headers, json=body)
|
||||||
|
elif method == 'OPTIONS':
|
||||||
|
response = client.options(url, headers=headers, json=body)
|
||||||
|
elif method == 'DELETE':
|
||||||
|
response = client.delete(url)
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Invalid method: {method}")
|
||||||
|
|
||||||
|
except RequestException as e:
|
||||||
|
print(f"Request failed. Method: {method}, URL: {url}", file=sys.stderr)
|
||||||
|
print(f"Error details: {str(e)}", file=sys.stderr)
|
||||||
|
exit(e.response.status_code)
|
||||||
|
|
||||||
|
return response.content, response.status_code
|
22
api-client/config.py
Normal file
22
api-client/config.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import os
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from types import MappingProxyType
|
||||||
|
|
||||||
|
|
||||||
|
def get_cfg(env='qa'):
|
||||||
|
environment_name = os.getenv('ENV_NAME', env)
|
||||||
|
dotenv_path = f'.env.{environment_name}'
|
||||||
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
|
config_dict = {
|
||||||
|
'client_id': os.getenv('CLIENT_ID'),
|
||||||
|
'client_secret': os.getenv('CLIENT_SECRET'),
|
||||||
|
'token_url': os.getenv('TOKEN_FETCH_URL'),
|
||||||
|
'username': os.getenv('USERNAME'),
|
||||||
|
'password': os.getenv('PASSWORD'),
|
||||||
|
'audience': os.getenv('AUDIENCE'),
|
||||||
|
'scopes': os.getenv('SCOPES', '').split(','),
|
||||||
|
'api_url': os.getenv('API_URL')
|
||||||
|
}
|
||||||
|
config = MappingProxyType(config_dict) # immutable dict
|
||||||
|
return config
|
@ -1,47 +0,0 @@
|
|||||||
from requests_oauthlib import OAuth2Session
|
|
||||||
from oauthlib.oauth2 import BackendApplicationClient
|
|
||||||
from dotenv import load_dotenv
|
|
||||||
import os
|
|
||||||
|
|
||||||
environment_name = os.getenv('ENV_NAME', 'qa') # need to find a place for this
|
|
||||||
dotenv_path = f'.env.{environment_name}'
|
|
||||||
load_dotenv(dotenv_path)
|
|
||||||
|
|
||||||
client_id = os.getenv('CLIENT_ID')
|
|
||||||
client_secret = os.getenv('CLIENT_SECRET')
|
|
||||||
token_url = os.getenv('TOKEN_URL')
|
|
||||||
username = os.getenv('USERNAME')
|
|
||||||
password = os.getenv('PASSWORD')
|
|
||||||
audience = os.getenv('AUDIENCE')
|
|
||||||
scope = os.getenv('SCOPE', '').split(',')
|
|
||||||
api_url = os.getenv('API_URL')
|
|
||||||
|
|
||||||
|
|
||||||
def get_token(client_id, client_secret, token_url, username, password, audience, scope):
|
|
||||||
client = BackendApplicationClient(client_id=client_id)
|
|
||||||
oauth = OAuth2Session(client=client)
|
|
||||||
token = oauth.fetch_token(
|
|
||||||
token_url=token_url,
|
|
||||||
username=username,
|
|
||||||
password=password,
|
|
||||||
client_id=client_id,
|
|
||||||
client_secret=client_secret,
|
|
||||||
audience=audience,
|
|
||||||
scope=scope
|
|
||||||
)
|
|
||||||
return token
|
|
||||||
|
|
||||||
|
|
||||||
def api_client(resource_url, auth_token):
|
|
||||||
client = OAuth2Session(token=auth_token)
|
|
||||||
response = client.get(resource_url)
|
|
||||||
return response.content
|
|
||||||
|
|
||||||
|
|
||||||
# Fetch token
|
|
||||||
token = get_token(client_id, client_secret, token_url, username, password, audience, scope)
|
|
||||||
|
|
||||||
# Now we can make API calls
|
|
||||||
api_response = api_client(api_url + '/resource', token)
|
|
||||||
|
|
||||||
print(api_response)
|
|
21
api-client/main.py
Normal file
21
api-client/main.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from config import get_cfg
|
||||||
|
from client import api_client
|
||||||
|
from oauth_helper import get_legacy_token
|
||||||
|
|
||||||
|
|
||||||
|
ENV = 'qa'
|
||||||
|
cfg = get_cfg(ENV)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
token = get_legacy_token(ENV)
|
||||||
|
|
||||||
|
api_call = {
|
||||||
|
"token": token,
|
||||||
|
"method": "GET",
|
||||||
|
"url": cfg["api_url"] + '/data-delivery/sarredaction/119',
|
||||||
|
"headers": {'Content-Type': 'application/json'},
|
||||||
|
"body": {}
|
||||||
|
}
|
||||||
|
|
||||||
|
api_response = api_client(api_call)
|
||||||
|
print(api_response)
|
27
api-client/oauth_helper.py
Normal file
27
api-client/oauth_helper.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
from oauthlib.oauth2 import LegacyApplicationClient, OAuth2Error
|
||||||
|
from requests_oauthlib import OAuth2Session
|
||||||
|
from config import get_cfg
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def get_legacy_token(env):
|
||||||
|
cfg = get_cfg(env)
|
||||||
|
|
||||||
|
client = LegacyApplicationClient(client_id=cfg['client_id'])
|
||||||
|
oauth = OAuth2Session(client=client)
|
||||||
|
|
||||||
|
try:
|
||||||
|
token = oauth.fetch_token(
|
||||||
|
token_url=cfg['token_url'],
|
||||||
|
username=cfg['username'],
|
||||||
|
password=cfg['password'],
|
||||||
|
client_id=cfg['client_id'],
|
||||||
|
client_secret=cfg['client_secret'],
|
||||||
|
audience=cfg['audience'],
|
||||||
|
scope=cfg['scopes']
|
||||||
|
)
|
||||||
|
except OAuth2Error as e:
|
||||||
|
print("OAuth2 Error: ", str(e), file=sys.stderr)
|
||||||
|
exit(e.status_code)
|
||||||
|
|
||||||
|
return token
|
Loading…
Reference in New Issue
Block a user