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