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