Skip to content
Snippets Groups Projects
invoker_to_service.py 4.42 KiB
Newer Older
torrespel's avatar
torrespel committed
from dis import dis
import requests
import json
import configparser
import redis
import os
import argparse
import re
from termcolor import colored

# Get environment variables


class InvokerToService():
    def __demo_to_aef(self, demo_ip, demo_port, method, demo_url, jwt_token, payload_dict, route, log_level):

        url = "http://{}:{}{}".format(demo_ip, demo_port, demo_url)
        #url = "http://python_aef:8086/hello"

        payload = json.dumps(route, indent=2)

        files = {}
        headers = {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer '+jwt_token
        }

        #print(colored(f"Request Body: {payload}", "yellow"))

        try:
            if log_level == "debug":
                print(colored("''''''''''REQUEST'''''''''''''''''","yellow"))
                print(colored(f"Request: to {url}","yellow"))
                print(colored(f"Request Headers: {headers}", "yellow"))
                print(colored(f"Request Body: {payload}", "yellow"))
                print(colored("''''''''''REQUEST'''''''''''''''''\n", "yellow"))
            response = requests.request(method.upper(), url, headers=headers, data=payload, files=files, cert=('capif_ops/certs/dummy.crt', 'capif_ops/certs/invoker_private_key.key'), verify=False)
            response.raise_for_status()
            response_payload = json.loads(response.text)


            if log_level == "debug":
                print(colored("\n''''''''''RESPONSE'''''''''''''''''","green"))
                print(colored(f"Response to: {response.url}","green"))
                print(colored(f"Response Headers: {response.headers}","green"))
                print(colored(f"Response: {json.dumps(response.json(), indent=2)}","green"))
                print(colored(f"Response Status code: {response.status_code}","green"))
                print(colored("Success to invoke service","green"))
                print(colored("''''''''''RESPONSE'''''''''''''''''\n","green"))
            return response_payload
        except requests.exceptions.HTTPError as err:
            if err.response.status_code == 404:
                print(colored("\nUrl not found", "red"))
            if err.response.status_code == 405:
                print(colored("\nMethod Not Allowed", "red"))
            message = json.loads(err.response.text)
            status = err.response.status_code
            raise Exception(message, status)


    def execute_invoker_to_service(self, api_name, method, endpoint, json_route, log_level):

        # parser = argparse.ArgumentParser()
        # parser.add_argument('--name', metavar= "name", type=str, default="Evolve5G", help="Name to send to the aef service")
        # args = parser.parse_args()
        input_name = "prueba"

        with open('capif_ops/config_files/demo_values.json', 'r') as demo_file:
            demo_values = json.load(demo_file)

        try:
            payload = open(json_route, 'rb')
            payload_dict = json.load(payload)

            if 'netapp_service_token' in demo_values:

                print(colored("\nCalling API","yellow"))

                count=-1
                for clave, valor in demo_values.items():
                    if valor == api_name:

                        count=int(re.match(r'api_name_(\d+)', clave).group(1))
                        break 
                if count == -1:
                    print(colored("\nAPI not found\n","red"))
                    return
                jwt_token = demo_values['netapp_service_token']
                invokerID = demo_values['invokerID']
                demo_ip = demo_values[f"demo_ipv4_addr_{count}"]
                demo_port = demo_values[f"demo_port_{count}"]
                result = self.__demo_to_aef(demo_ip, demo_port, method, endpoint, jwt_token, input_name, payload_dict, log_level)
                if log_level != "debug":
                    print(colored(f"\nResponse: {json.dumps(result, indent=2)}", "green"))
                    print(colored("\nSuccess!!\n","green"))
        except Exception as e:
            status_code = e.args[0]
            if status_code == 401:
                print(colored("\nAPI Invoker is not authorized\n", "red"))
            elif status_code == 403:
                print(colored("\nAPI Invoker does not exist. API Invoker id not found\n", "red"))
            elif status_code == "Expecting value: line 1 column 1 (char 0)":
                print()
            else:
                print(colored(f"\n{e}\n", "red"))