Commit 21f54c3d authored by Stavros-Anastasios Charismiadis's avatar Stavros-Anastasios Charismiadis
Browse files

Upgrade Provider, Invoker and Publish APIs to Flask 3, all corresponding tests pass

parent ac46d9dc
Loading
Loading
Loading
Loading
Loading
+18 −12
Original line number Original line Diff line number Diff line
@@ -2,10 +2,10 @@


import connexion
import connexion
import logging
import logging
import api_invoker_management.encoder
import encoder
from flask_jwt_extended import JWTManager, jwt_required, create_access_token
from flask_jwt_extended import JWTManager, jwt_required, create_access_token
from .config import Config
from config import Config
from .core.consumer_messager import Subscriber
from core.consumer_messager import Subscriber
from logging.handlers import RotatingFileHandler
from logging.handlers import RotatingFileHandler
import os
import os
from fluent import sender
from fluent import sender
@@ -116,12 +116,11 @@ def verbose_formatter():
with open("/usr/src/app/api_invoker_management/pubkey.pem", "rb") as pub_file:
with open("/usr/src/app/api_invoker_management/pubkey.pem", "rb") as pub_file:
            pub_data = pub_file.read()
            pub_data = pub_file.read()


# app = connexion.App(__name__, specification_dir='./openapi/')
app = connexion.App(__name__, specification_dir='openapi/')
app = connexion.App(__name__)
app.app.json_encoder = encoder.CustomJSONEncoder
app.app.json_encoder = api_invoker_management.encoder.JSONEncoder
app.add_api('openapi.yaml',
# app.add_api('openapi.yaml',
            arguments={'title': 'CAPIF_API_Invoker_Management_API'},
#             arguments={'title': 'CAPIF_API_Invoker_Management_API'},
            pythonic_params=True)
#             pythonic_params=True)


app.app.config['JWT_ALGORITHM'] = 'RS256'
app.app.config['JWT_ALGORITHM'] = 'RS256'
app.app.config['JWT_PUBLIC_KEY'] = pub_data
app.app.config['JWT_PUBLIC_KEY'] = pub_data
@@ -139,8 +138,15 @@ if monitoring_value == "true":
executor = Executor(app.app)
executor = Executor(app.app)
subscriber = Subscriber()
subscriber = Subscriber()


first = True


# @app.app.before_first_request
@app.app.before_request
def create_listener_message():
def create_listener_message():
    with app.app.app_context():
    global first
    if first:
        executor.submit(subscriber.listen)
        executor.submit(subscriber.listen)
        first = False

# @app.app.before_first_request
# def create_listener_message():
#     executor.submit(subscriber.listen)
 No newline at end of file
+1 −1
Original line number Original line Diff line number Diff line
@@ -5,7 +5,7 @@ import os
class Config:
class Config:
	def __init__(self):
	def __init__(self):
		self.cached = 0
		self.cached = 0
		self.file="./config.yaml"
		self.file="../config.yaml"
		self.my_config = {}
		self.my_config = {}


		stamp = os.stat(self.file).st_mtime
		stamp = os.stat(self.file).st_mtime
+6 −5
Original line number Original line Diff line number Diff line
@@ -70,8 +70,9 @@ def onboarded_invokers_onboarding_id_put(onboarding_id, body): # noqa: E501
    :rtype: APIInvokerEnrolmentDetails
    :rtype: APIInvokerEnrolmentDetails
    """
    """
    current_app.logger.info("Updating invoker")
    current_app.logger.info("Updating invoker")
    if connexion.request.is_json:
    if request.is_json:
        body = APIInvokerEnrolmentDetails.from_dict(connexion.request.get_json())  # noqa: E501
        body = APIInvokerEnrolmentDetails.from_dict(request.get_json())  # noqa: E501

    res = invoker_operations.update_apiinvokerenrolmentdetail(onboarding_id,body)
    res = invoker_operations.update_apiinvokerenrolmentdetail(onboarding_id,body)


    return res
    return res
@@ -92,10 +93,10 @@ def onboarded_invokers_post(body): # noqa: E501
    identity = get_jwt_identity()
    identity = get_jwt_identity()
    username, uuid = identity.split()
    username, uuid = identity.split()


    if connexion.request.is_json:
        body = APIInvokerEnrolmentDetails.from_dict(connexion.request.get_json())  # noqa: E501

    current_app.logger.info("Creating Invoker")
    current_app.logger.info("Creating Invoker")
    if request.is_json:
        body = APIInvokerEnrolmentDetails.from_dict(request.get_json())  # noqa: E501

    res = invoker_operations.add_apiinvokerenrolmentdetail(body, username, uuid)
    res = invoker_operations.add_apiinvokerenrolmentdetail(body, username, uuid)


    return res
    return res
+6 −6
Original line number Original line Diff line number Diff line
from ..models.problem_details import ProblemDetails
from ..models.problem_details import ProblemDetails
from ..encoder import JSONEncoder
from ..encoder import CustomJSONEncoder
from flask import Response
from flask import Response
import json
import json
from ..util import serialize_clean_camel_case
from ..util import serialize_clean_camel_case
@@ -8,7 +8,7 @@ mimetype = "application/json"




def make_response(object, status):
def make_response(object, status):
    res = Response(json.dumps(object, cls=JSONEncoder), status=status, mimetype=mimetype)
    res = Response(json.dumps(object, cls=CustomJSONEncoder), status=status, mimetype=mimetype)


    return res
    return res


@@ -17,25 +17,25 @@ def internal_server_error(detail, cause):
    prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause)
    prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause)
    prob = serialize_clean_camel_case(prob)
    prob = serialize_clean_camel_case(prob)


    return Response(json.dumps(prob, cls=JSONEncoder), status=500, mimetype=mimetype)
    return Response(json.dumps(prob, cls=CustomJSONEncoder), status=500, mimetype=mimetype)




def forbidden_error(detail, cause):
def forbidden_error(detail, cause):
    prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause)
    prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause)
    prob = serialize_clean_camel_case(prob)
    prob = serialize_clean_camel_case(prob)


    return Response(json.dumps(prob, cls=JSONEncoder), status=403, mimetype=mimetype)
    return Response(json.dumps(prob, cls=CustomJSONEncoder), status=403, mimetype=mimetype)




def bad_request_error(detail, cause, invalid_params):
def bad_request_error(detail, cause, invalid_params):
    prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params)
    prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params)
    prob = serialize_clean_camel_case(prob)
    prob = serialize_clean_camel_case(prob)


    return Response(json.dumps(prob, cls=JSONEncoder), status=400, mimetype=cause)
    return Response(json.dumps(prob, cls=CustomJSONEncoder), status=400, mimetype=cause)




def not_found_error(detail, cause):
def not_found_error(detail, cause):
    prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause)
    prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause)
    prob = serialize_clean_camel_case(prob)
    prob = serialize_clean_camel_case(prob)


    return Response(json.dumps(prob, cls=JSONEncoder), status=404, mimetype=mimetype)
    return Response(json.dumps(prob, cls=CustomJSONEncoder), status=404, mimetype=mimetype)
 No newline at end of file
 No newline at end of file
+2 −2
Original line number Original line Diff line number Diff line
from flask import current_app, Response
from flask import current_app, Response
import json
import json
from ..models.problem_details import ProblemDetails
from ..models.problem_details import ProblemDetails
from ..encoder import JSONEncoder
from ..encoder import CustomJSONEncoder
from .resources import Resource
from .resources import Resource
from .responses import internal_server_error
from .responses import internal_server_error
from ..util import serialize_clean_camel_case
from ..util import serialize_clean_camel_case
@@ -21,7 +21,7 @@ class ControlAccess(Resource):
                if cert_entry["cert_signature"] != cert_signature:
                if cert_entry["cert_signature"] != cert_signature:
                    prob = ProblemDetails(title="Unauthorized", detail="User not authorized", cause="You are not the owner of this resource")
                    prob = ProblemDetails(title="Unauthorized", detail="User not authorized", cause="You are not the owner of this resource")
                    prob = serialize_clean_camel_case(prob)
                    prob = serialize_clean_camel_case(prob)
                    return Response(json.dumps(prob, cls=JSONEncoder), status=401, mimetype="application/json")
                    return Response(json.dumps(prob, cls=CustomJSONEncoder), status=401, mimetype="application/json")


        except Exception as e:
        except Exception as e:
            exception = "An exception occurred in validate invoker"
            exception = "An exception occurred in validate invoker"
Loading