diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/app.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/app.py index 9d55bc5adba29d09c93b1e1909bb79bea88aaaff..f6f1ad1e42ba445bce3b9979d9f2f9da4b965dc3 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/app.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/app.py @@ -116,8 +116,8 @@ def verbose_formatter(): with open("/usr/src/app/api_invoker_management/pubkey.pem", "rb") as pub_file: pub_data = pub_file.read() -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_API_Invoker_Management_API'}, pythonic_params=True) @@ -138,6 +138,15 @@ if monitoring_value == "true": executor = Executor(app.app) subscriber = Subscriber() -@app.app.before_first_request +first = True + +@app.app.before_request def create_listener_message(): - executor.submit(subscriber.listen) \ No newline at end of file + global first + if first: + 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 diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/controllers/default_controller.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/controllers/default_controller.py index f2b0df69780e4ebde99f3df1a43fb34bca9805b9..866dd32cf7e3c0f9d5978d838f18fb1d3a12c9c4 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/controllers/default_controller.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/controllers/default_controller.py @@ -70,8 +70,9 @@ def onboarded_invokers_onboarding_id_put(onboarding_id, body): # noqa: E501 :rtype: APIInvokerEnrolmentDetails """ current_app.logger.info("Updating invoker") - if connexion.request.is_json: - body = APIInvokerEnrolmentDetails.from_dict(connexion.request.get_json()) # noqa: E501 + if request.is_json: + body = APIInvokerEnrolmentDetails.from_dict(request.get_json()) # noqa: E501 + res = invoker_operations.update_apiinvokerenrolmentdetail(onboarding_id,body) return res @@ -92,10 +93,10 @@ def onboarded_invokers_post(body): # noqa: E501 identity = get_jwt_identity() 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") + if request.is_json: + body = APIInvokerEnrolmentDetails.from_dict(request.get_json()) # noqa: E501 + res = invoker_operations.add_apiinvokerenrolmentdetail(body, username, uuid) return res diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/resources.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/resources.py index efbe3c2d4cf28cec298ef17b394011dcd6aa66cb..ef58351b43b89384564154cd65c824a2ea7d92a1 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/resources.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/resources.py @@ -1,5 +1,5 @@ from abc import ABC, abstractmethod -from db.db import MongoDatabse +from api_invoker_management.db.db import MongoDatabse class Resource(ABC): diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/responses.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/responses.py index f647dbf7b3f5ca6fa7bd36367f863ba21e99f8f4..4fb2261b4aca9e4dfe4bf0631b208db933f08dd1 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/responses.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/responses.py @@ -1,5 +1,5 @@ from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from flask import Response import json from ..util import serialize_clean_camel_case @@ -8,7 +8,7 @@ mimetype = "application/json" 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 @@ -17,25 +17,25 @@ def internal_server_error(detail, cause): prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params) 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): prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause) prob = serialize_clean_camel_case(prob) - return Response(json.dumps(prob, cls=JSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file + return Response(json.dumps(prob, cls=CustomJSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/validate_user.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/validate_user.py index b1e7a9bf9c0bfd032b37e08ca47c2669c6999d09..69760cf37a40aeb060e88c7ae1bc621b5509934c 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/validate_user.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/validate_user.py @@ -1,7 +1,7 @@ from flask import current_app, Response import json from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from .resources import Resource from .responses import internal_server_error from ..util import serialize_clean_camel_case @@ -21,7 +21,7 @@ class ControlAccess(Resource): 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 = 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: exception = "An exception occurred in validate invoker" diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/db/db.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/db/db.py index 1ef0262504047495eba1c6f05d4d2e3de8d5391d..89c8a48f76e37ce182faddf6b829eb60cf768eb3 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/db/db.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/db/db.py @@ -1,7 +1,7 @@ import time from pymongo import MongoClient from pymongo.errors import AutoReconnect -from config import Config +from api_invoker_management.config import Config from bson.codec_options import CodecOptions import os from opentelemetry.instrumentation.pymongo import PymongoInstrumentor diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/encoder.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/encoder.py index 80bad8fa9220ab873e044b7adc0a849746088ad5..526f8b29defbe0156c72ce238a91327c2759b46e 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/encoder.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/encoder.py @@ -1,10 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six from models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/prepare_invoker.sh b/services/TS29222_CAPIF_API_Invoker_Management_API/prepare_invoker.sh index df73fa6481be279fa52e2d825b529024f1f36bff..971ce33796ff7b7ab830118c4e4534a436119a5a 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/prepare_invoker.sh +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/prepare_invoker.sh @@ -14,5 +14,5 @@ curl -vv -k -retry 30 \ --request GET "$VAULT_ADDR/v1/secret/data/server_cert/pub" 2>/dev/null | jq -r '.data.data.pub_key' -j > /usr/src/app/api_invoker_management/pubkey.pem -gunicorn --bind 0.0.0.0:8080 \ - --chdir /usr/src/app/api_invoker_management wsgi:app \ No newline at end of file +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ + --chdir /usr/src/app/api_invoker_management wsgi:app diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt index dbf0f198c54c3dea4807fe473ffcde6d560a528c..32a15be25ab0afc062f029940f58f84ccb466548 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt @@ -1,24 +1,24 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 +setuptools == 74.0.0 +Flask == 3.0.3 pymongo == 4.7.3 -flask_jwt_extended == 4.4.4 +redis == 4.5.4 +flask_jwt_extended == 4.6.0 cryptography == 42.0.8 rfc3987 == 1.3.8 -redis == 4.5.4 opentelemetry-instrumentation == 0.40b0 opentelemetry-instrumentation-flask == 0.40b0 opentelemetry-instrumentation-redis == 0.40b0 opentelemetry-instrumentation-pymongo == 0.40b0 opentelemetry-exporter-otlp == 1.19.0 -opentelemetry-exporter-jaeger == 1.17.0 +opentelemetry-exporter-jaeger == 1.19.0 fluent == 0.10.0 fluent-logger == 0.10.0 opentelemetry-api == 1.19.0 opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 2.2.3 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/app.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/app.py index 2896830ca9ff062875fd666db2bc654a9c8bc0d2..95d2758fbe669a4989b7187c12e95c13919b5ac4 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/app.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/app.py @@ -2,11 +2,11 @@ import connexion import logging +import api_provider_management.encoder -import encoder from flask_jwt_extended import JWTManager from logging.handlers import RotatingFileHandler -from config import Config +from .config import Config import os import sys from fluent import sender @@ -113,8 +113,8 @@ def verbose_formatter(): with open("/usr/src/app/api_provider_management/pubkey.pem", "rb") as pub_file: pub_data = pub_file.read() -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = api_provider_management.encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_API_Provider_Management_API'}, pythonic_params=True) diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/default_controller.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/default_controller.py index d9a190cd5cd48ceca8fcb7c8ecea79bc5c173b29..3885faf48ce2018d2cced30dcafece948fba0866 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/default_controller.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/default_controller.py @@ -12,6 +12,7 @@ from cryptography.hazmat.backends import default_backend from flask_jwt_extended import jwt_required, get_jwt_identity from cryptography import x509 from functools import wraps +import asyncio import sys @@ -62,9 +63,8 @@ def registrations_post(body): # noqa: E501 current_app.logger.info("Registering Provider Domain") - if connexion.request.is_json: - body = APIProviderEnrolmentDetails.from_dict(connexion.request.get_json()) # noqa: E501 - + if request.is_json: + body = APIProviderEnrolmentDetails.from_dict(request.get_json()) # noqa: E501 res = provider_management_ops.register_api_provider_enrolment_details(body, username, uuid) @@ -101,8 +101,9 @@ def registrations_registration_id_put(registration_id, body): # noqa: E501 :rtype: APIProviderEnrolmentDetails """ current_app.logger.info("Updating Provider Domain") - if connexion.request.is_json: - body = APIProviderEnrolmentDetails.from_dict(connexion.request.get_json()) # noqa: E501 + + if request.is_json: + body = APIProviderEnrolmentDetails.from_dict(request.get_json()) # noqa: E501 res = provider_management_ops.update_api_provider_enrolment_details(registration_id,body) diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/individual_api_provider_enrolment_details_controller.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/individual_api_provider_enrolment_details_controller.py index dee8d1539b8945e2ff049a9ad8afb5dc4a0c34c9..9533e38346b29f76e2ec8961a7f45db758ddf1ad 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/individual_api_provider_enrolment_details_controller.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/individual_api_provider_enrolment_details_controller.py @@ -1,7 +1,6 @@ import connexion from flask import Response, request, current_app from ..core.provider_enrolment_details_api import ProviderManagementOperations -from ..encoder import JSONEncoder from ..models.api_provider_enrolment_details import APIProviderEnrolmentDetails # noqa: E501 from ..models.api_provider_enrolment_details_patch import APIProviderEnrolmentDetailsPatch # noqa: E501 from ..models.problem_details import ProblemDetails # noqa: E501 @@ -27,8 +26,8 @@ def modify_ind_api_provider_enrolment(registration_id, body): # noqa: E501 """ current_app.logger.info("Patch Provider Domain") - if connexion.request.is_json: - body = APIProviderEnrolmentDetailsPatch.from_dict(connexion.request.get_json()) # noqa: E501 + if request.is_json: + body = APIProviderEnrolmentDetailsPatch.from_dict(request.get_json()) # noqa: E501 res = provider_management_ops.update_api_provider_enrolment_details(registration_id, body) diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/responses.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/responses.py index 98eca0c9453aa3eaf676c209e9f2708b2b2d44e2..7fd8fec40c021be4134d7e0206a32ac91ce33c91 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/responses.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/responses.py @@ -1,5 +1,5 @@ from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from ..util import serialize_clean_camel_case from flask import Response, current_app import json @@ -8,7 +8,7 @@ mimetype = "application/json" 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 @@ -17,25 +17,25 @@ def internal_server_error(detail, cause): prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params) 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): prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause) prob = serialize_clean_camel_case(prob) - return Response(json.dumps(prob, cls=JSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file + return Response(json.dumps(prob, cls=CustomJSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/validate_user.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/validate_user.py index 29043d520f6bfab2f3be3b0b63479440a4ba8aad..624c5a924112e63d224e08c42870754f26f9e27b 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/validate_user.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/validate_user.py @@ -1,7 +1,7 @@ from flask import current_app, Response import json from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from .resources import Resource from .responses import internal_server_error from ..util import serialize_clean_camel_case @@ -21,7 +21,7 @@ class ControlAccess(Resource): 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 = 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: exception = "An exception occurred in validate amf" diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/encoder.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/encoder.py index 3f1c01ce6812b1ff12e0d1d284bc433e951e1ea6..d40ce05a33f0ec2be29841b7153da636783796a1 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/encoder.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/encoder.py @@ -1,9 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six -from models.base_model_ import Model +from .models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): + +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -16,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/wsgi.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/wsgi.py index 6026b0fa96078634d3455ab93d71dcdc78774276..92585dc226d1ee5af883f2ddf10fd2b210717ad8 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/wsgi.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/wsgi.py @@ -1,4 +1,4 @@ -from app import app +from api_provider_management.app import app if __name__ == "__main__": app.run() diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh b/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh index 5ec3096850c15a6a5ec6f9ad7173e61a122baf97..27cd6183ab9b3cc7c28f67350c0662a8586971b9 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh +++ b/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh @@ -12,8 +12,6 @@ curl -vv -k -retry 30 \ --header "X-Vault-Token: $VAULT_TOKEN" \ --request GET "$VAULT_ADDR/v1/secret/data/server_cert/pub" 2>/dev/null | jq -r '.data.data.pub_key' -j > /usr/src/app/api_provider_management/pubkey.pem - -gunicorn --bind 0.0.0.0:8080 \ +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/api_provider_management wsgi:app - diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt index a5c9ccef16b0c711e5d502db5efc6f574eb97476..0b5ec10e2e2b3f5deb197743248e0fbd8d8bd042 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt @@ -1,23 +1,23 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 +setuptools == 74.0.0 +Flask == 3.0.3 pymongo == 4.7.3 redis == 4.5.4 -flask_jwt_extended == 4.4.4 +flask_jwt_extended == 4.6.0 cryptography == 42.0.8 rfc3987 == 1.3.8 -opentelemetry-instrumentation == 0.38b0 -opentelemetry-instrumentation-flask == 0.38b0 -opentelemetry-instrumentation-redis == 0.38b0 -opentelemetry-instrumentation-pymongo == 0.38b0 -opentelemetry-exporter-otlp == 1.17.0 +opentelemetry-instrumentation == 0.40b0 +opentelemetry-instrumentation-flask == 0.40b0 +opentelemetry-instrumentation-redis == 0.40b0 +opentelemetry-instrumentation-pymongo == 0.40b0 +opentelemetry-exporter-otlp == 1.19.0 fluent == 0.10.0 fluent-logger == 0.10.0 -opentelemetry-api == 1.17.0 -opentelemetry-sdk == 1.17.0 +opentelemetry-api == 1.19.0 +opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 2.2.3 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/app.py b/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/app.py index 59a0f90b9976dfd4ee1cecb0173ec6b03cf4cd8f..183c081eee66839d5fd8827afd4d409f2cd64932 100644 --- a/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/app.py +++ b/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/app.py @@ -113,8 +113,8 @@ def verbose_formatter(): datefmt='%d/%m/%Y %H:%M:%S' ) -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_Access_Control_policy_API'}, pythonic_params=True) diff --git a/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/redis_event.py b/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/redis_event.py index 40e3e406830e58a72359e4283d8ff6e0d66bb893..6a6329dfa4198fcc2eb1393a997ba4dd9dac92e4 100644 --- a/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/redis_event.py +++ b/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/redis_event.py @@ -1,4 +1,4 @@ -from encoder import JSONEncoder +from encoder import CustomJSONEncoder from .publisher import Publisher import json @@ -32,7 +32,7 @@ class RedisEvent(): self.redis_event['information'] = information def to_string(self): - return json.dumps(self.redis_event, cls=JSONEncoder) + return json.dumps(self.redis_event, cls=CustomJSONEncoder) def send_event(self): publisher_ops.publish_message("events", self.to_string()) diff --git a/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/responses.py b/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/responses.py index 9f8c3e665d94e8d98044638870dcc65a9dab1a91..49544126f43b0d314a66616fc91bc34058e870e9 100644 --- a/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/responses.py +++ b/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/responses.py @@ -1,5 +1,5 @@ from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from flask import Response from ..util import dict_to_camel_case, clean_empty, serialize_clean_camel_case import json @@ -8,7 +8,7 @@ mimetype = "application/json" 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 @@ -17,25 +17,25 @@ def internal_server_error(detail, cause): prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params) 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): prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause) prob = serialize_clean_camel_case(prob) - return Response(json.dumps(prob, cls=JSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file + return Response(json.dumps(prob, cls=CustomJSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file diff --git a/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/encoder.py b/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/encoder.py index 80bad8fa9220ab873e044b7adc0a849746088ad5..526f8b29defbe0156c72ce238a91327c2759b46e 100644 --- a/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/encoder.py +++ b/services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/encoder.py @@ -1,10 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six from models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_Access_Control_Policy_API/prepare_capif_acl.sh b/services/TS29222_CAPIF_Access_Control_Policy_API/prepare_capif_acl.sh index fd0077ff49fd19e6e396a8253c2b63ce93e0c7c9..42f12afe4ac1e7bf0389e43aa7181f7670b03ed6 100644 --- a/services/TS29222_CAPIF_Access_Control_Policy_API/prepare_capif_acl.sh +++ b/services/TS29222_CAPIF_Access_Control_Policy_API/prepare_capif_acl.sh @@ -1,4 +1,4 @@ #!/bin/bash -gunicorn --bind 0.0.0.0:8080 \ +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/capif_acl wsgi:app \ No newline at end of file diff --git a/services/TS29222_CAPIF_Access_Control_Policy_API/requirements.txt b/services/TS29222_CAPIF_Access_Control_Policy_API/requirements.txt index 2e82931ce42ddc44d6ae7c6e86961fcbe4751d7a..e38f272cebb4b75f3862a7b01ee49d2f3cc3be76 100644 --- a/services/TS29222_CAPIF_Access_Control_Policy_API/requirements.txt +++ b/services/TS29222_CAPIF_Access_Control_Policy_API/requirements.txt @@ -1,26 +1,24 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" -Werkzeug == 2.2.3 +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 +setuptools == 74.0.0 +Flask == 3.0.3 pymongo == 4.7.3 -flask_jwt_extended == 4.4.4 -opentelemetry-instrumentation == 0.38b0 -opentelemetry-instrumentation-flask == 0.38b0 -opentelemetry-instrumentation-redis == 0.38b0 -opentelemetry-instrumentation-pymongo == 0.38b0 -opentelemetry-exporter-otlp == 1.17.0 -opentelemetry-exporter-jaeger == 1.17.0 +redis == 4.5.4 +flask_jwt_extended == 4.6.0 +cryptography == 42.0.8 +opentelemetry-instrumentation == 0.40b0 +opentelemetry-instrumentation-flask == 0.40b0 +opentelemetry-instrumentation-redis == 0.40b0 +opentelemetry-instrumentation-pymongo == 0.40b0 +opentelemetry-exporter-otlp == 1.19.0 +opentelemetry-exporter-jaeger == 1.19.0 fluent == 0.10.0 fluent-logger == 0.10.0 -opentelemetry-api == 1.17.0 -opentelemetry-sdk == 1.17.0 -flask_executor == 1.0.0 -cryptography == 42.0.8 -redis == 4.5.4 +opentelemetry-api == 1.19.0 +opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Flask-APScheduler == 1.12.4 +Flask-APScheduler == 1.13.1 Flask-Script == 2.0.6 gunicorn == 22.0.0 packaging == 24.0 \ No newline at end of file diff --git a/services/TS29222_CAPIF_Auditing_API/logs/app.py b/services/TS29222_CAPIF_Auditing_API/logs/app.py index f68880cee26c27d442c50b2ec0b68ad07a825169..28b267e0111ec9572e34017fdf9b7034f5ad930b 100644 --- a/services/TS29222_CAPIF_Auditing_API/logs/app.py +++ b/services/TS29222_CAPIF_Auditing_API/logs/app.py @@ -104,8 +104,8 @@ def verbose_formatter(): ) -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_Auditing_API'}, pythonic_params=True) diff --git a/services/TS29222_CAPIF_Auditing_API/logs/core/responses.py b/services/TS29222_CAPIF_Auditing_API/logs/core/responses.py index 89689a9e7b3a936e3ea953ed621853ce164d2d70..62874058da961179abdf731744e9d8dc95591ddd 100644 --- a/services/TS29222_CAPIF_Auditing_API/logs/core/responses.py +++ b/services/TS29222_CAPIF_Auditing_API/logs/core/responses.py @@ -1,5 +1,5 @@ from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from flask import Response from ..util import serialize_clean_camel_case import json @@ -8,7 +8,7 @@ mimetype = "application/json" 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 @@ -17,25 +17,25 @@ def internal_server_error(detail, cause): prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params) 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): prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause) prob = serialize_clean_camel_case(prob) - return Response(json.dumps(prob, cls=JSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file + return Response(json.dumps(prob, cls=CustomJSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file diff --git a/services/TS29222_CAPIF_Auditing_API/logs/encoder.py b/services/TS29222_CAPIF_Auditing_API/logs/encoder.py index 80bad8fa9220ab873e044b7adc0a849746088ad5..526f8b29defbe0156c72ce238a91327c2759b46e 100644 --- a/services/TS29222_CAPIF_Auditing_API/logs/encoder.py +++ b/services/TS29222_CAPIF_Auditing_API/logs/encoder.py @@ -1,10 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six from models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_Auditing_API/prepare_audit.sh b/services/TS29222_CAPIF_Auditing_API/prepare_audit.sh index e47912ba6dd4a46eccfdd31e89107c76a838e82b..6049f2e972087e168236f5a3cc4c5883559f5395 100644 --- a/services/TS29222_CAPIF_Auditing_API/prepare_audit.sh +++ b/services/TS29222_CAPIF_Auditing_API/prepare_audit.sh @@ -1,6 +1,6 @@ #!/bin/bash -gunicorn --bind 0.0.0.0:8080 \ +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/logs wsgi:app diff --git a/services/TS29222_CAPIF_Auditing_API/requirements.txt b/services/TS29222_CAPIF_Auditing_API/requirements.txt index c2ef0b45391bea561624453a9049889ab0dd1567..da3a4c516c3d71cc4160bc0170a572a7818ef814 100644 --- a/services/TS29222_CAPIF_Auditing_API/requirements.txt +++ b/services/TS29222_CAPIF_Auditing_API/requirements.txt @@ -1,24 +1,24 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 +setuptools == 74.0.0 +Flask == 3.0.3 pymongo == 4.7.3 elasticsearch == 8.4.3 -flask_jwt_extended == 4.4.4 -opentelemetry-instrumentation == 0.38b0 -opentelemetry-instrumentation-flask == 0.38b0 -opentelemetry-instrumentation-redis == 0.38b0 -opentelemetry-instrumentation-pymongo == 0.38b0 -opentelemetry-exporter-otlp == 1.17.0 -opentelemetry-exporter-jaeger == 1.17.0 +flask_jwt_extended == 4.6.0 +cryptography == 42.0.8 +opentelemetry-instrumentation == 0.40b0 +opentelemetry-instrumentation-flask == 0.40b0 +opentelemetry-instrumentation-redis == 0.40b0 +opentelemetry-instrumentation-pymongo == 0.40b0 +opentelemetry-exporter-otlp == 1.19.0 +opentelemetry-exporter-jaeger == 1.19.0 fluent == 0.10.0 fluent-logger == 0.10.0 -opentelemetry-api == 1.17.0 -opentelemetry-sdk == 1.17.0 +opentelemetry-api == 1.19.0 +opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -cryptography == 42.0.8 -Werkzeug == 2.2.3 +werkzeug == 3.0.4 pyopenssl == 24.1.0 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Discover_Service_API/prepare_discover.sh b/services/TS29222_CAPIF_Discover_Service_API/prepare_discover.sh index dd9ad7d8b8b4a431a0623ad1da3b3a0c38e684a1..dd3f3612ac0e74093c40677f2154c92f2f07f0c7 100644 --- a/services/TS29222_CAPIF_Discover_Service_API/prepare_discover.sh +++ b/services/TS29222_CAPIF_Discover_Service_API/prepare_discover.sh @@ -1,6 +1,6 @@ #!/bin/bash -gunicorn --bind 0.0.0.0:8080 \ +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/service_apis wsgi:app diff --git a/services/TS29222_CAPIF_Discover_Service_API/requirements.txt b/services/TS29222_CAPIF_Discover_Service_API/requirements.txt index 1c57f79a6c75be2813dbca4d36f7c119adabe6a2..32a15be25ab0afc062f029940f58f84ccb466548 100644 --- a/services/TS29222_CAPIF_Discover_Service_API/requirements.txt +++ b/services/TS29222_CAPIF_Discover_Service_API/requirements.txt @@ -1,25 +1,24 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 +setuptools == 74.0.0 +Flask == 3.0.3 pymongo == 4.7.3 -flask_jwt_extended == 4.4.4 +redis == 4.5.4 +flask_jwt_extended == 4.6.0 cryptography == 42.0.8 rfc3987 == 1.3.8 -redis == 4.5.4 -opentelemetry-instrumentation == 0.38b0 -opentelemetry-instrumentation-flask == 0.38b0 -opentelemetry-instrumentation-redis == 0.38b0 -opentelemetry-instrumentation-pymongo == 0.38b0 -opentelemetry-exporter-otlp == 1.17.0 -opentelemetry-exporter-jaeger == 1.17.0 +opentelemetry-instrumentation == 0.40b0 +opentelemetry-instrumentation-flask == 0.40b0 +opentelemetry-instrumentation-redis == 0.40b0 +opentelemetry-instrumentation-pymongo == 0.40b0 +opentelemetry-exporter-otlp == 1.19.0 +opentelemetry-exporter-jaeger == 1.19.0 fluent == 0.10.0 fluent-logger == 0.10.0 -opentelemetry-api == 1.17.0 -opentelemetry-sdk == 1.17.0 -flask_executor == 1.0.0 +opentelemetry-api == 1.19.0 +opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 2.2.3 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Discover_Service_API/service_apis/app.py b/services/TS29222_CAPIF_Discover_Service_API/service_apis/app.py index beec70806ff45a9d3795b952efb09906773a3eb3..38988fd0cb16d2f4212849d12ab3762e31cfa8bf 100644 --- a/services/TS29222_CAPIF_Discover_Service_API/service_apis/app.py +++ b/services/TS29222_CAPIF_Discover_Service_API/service_apis/app.py @@ -109,8 +109,8 @@ def verbose_formatter(): datefmt='%d/%m/%Y %H:%M:%S' ) -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_Discover_Service_API'}, pythonic_params=True) diff --git a/services/TS29222_CAPIF_Discover_Service_API/service_apis/core/responses.py b/services/TS29222_CAPIF_Discover_Service_API/service_apis/core/responses.py index b54555bf6178395418c0e3d378feddf6fe072f3f..8836f998a2d05937e7e004fe899e14fd8dba2bfc 100644 --- a/services/TS29222_CAPIF_Discover_Service_API/service_apis/core/responses.py +++ b/services/TS29222_CAPIF_Discover_Service_API/service_apis/core/responses.py @@ -1,5 +1,5 @@ from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from flask import Response from ..util import serialize_clean_camel_case import json @@ -8,7 +8,7 @@ mimetype = "application/json" 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 @@ -17,25 +17,25 @@ def internal_server_error(detail, cause): prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params) 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): prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause) prob = serialize_clean_camel_case(prob) - return Response(json.dumps(prob, cls=JSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file + return Response(json.dumps(prob, cls=CustomJSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file diff --git a/services/TS29222_CAPIF_Discover_Service_API/service_apis/encoder.py b/services/TS29222_CAPIF_Discover_Service_API/service_apis/encoder.py index 80bad8fa9220ab873e044b7adc0a849746088ad5..526f8b29defbe0156c72ce238a91327c2759b46e 100644 --- a/services/TS29222_CAPIF_Discover_Service_API/service_apis/encoder.py +++ b/services/TS29222_CAPIF_Discover_Service_API/service_apis/encoder.py @@ -1,10 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six from models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_Events_API/capif_events/app.py b/services/TS29222_CAPIF_Events_API/capif_events/app.py index d1d3de3c2a39e30afe0b02aea4ae85738f47fd67..a4eb7477c05bf2327a43a523732ecf665d7f511f 100644 --- a/services/TS29222_CAPIF_Events_API/capif_events/app.py +++ b/services/TS29222_CAPIF_Events_API/capif_events/app.py @@ -123,8 +123,8 @@ def verbose_formatter(): datefmt='%d/%m/%Y %H:%M:%S' ) -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_Events_API'}, pythonic_params=True) @@ -147,6 +147,15 @@ subscriber = Subscriber() # scheduler = APScheduler() # scheduler.init_app(app.app) -@app.app.before_first_request +# @app.app.before_first_request +# def create_listener_message(): +# executor.submit(subscriber.listen) + +first = True + +@app.app.before_request def create_listener_message(): - executor.submit(subscriber.listen) + global first + if first: + executor.submit(subscriber.listen) + first = False diff --git a/services/TS29222_CAPIF_Events_API/capif_events/controllers/default_controller.py b/services/TS29222_CAPIF_Events_API/capif_events/controllers/default_controller.py index 839f0b0db7934b586d6369160da6f4a930e965c5..e982a77cc796aed206c2723378f45103dd6f2264 100644 --- a/services/TS29222_CAPIF_Events_API/capif_events/controllers/default_controller.py +++ b/services/TS29222_CAPIF_Events_API/capif_events/controllers/default_controller.py @@ -4,7 +4,6 @@ from ..core.events_apis import EventSubscriptionsOperations import json from flask import Response, request, current_app from flask_jwt_extended import jwt_required, get_jwt_identity -from ..encoder import JSONEncoder from ..models.problem_details import ProblemDetails from cryptography import x509 from cryptography.hazmat.backends import default_backend @@ -54,8 +53,8 @@ def subscriber_id_subscriptions_post(subscriber_id, body): # noqa: E501 """ current_app.logger.info("Creating event subscription") - if connexion.request.is_json: - body = EventSubscription.from_dict(connexion.request.get_json()) # noqa: E501 + if request.is_json: + body = EventSubscription.from_dict(request.get_json()) # noqa: E501 res = events_ops.create_event(subscriber_id, body) diff --git a/services/TS29222_CAPIF_Events_API/capif_events/core/events_apis.py b/services/TS29222_CAPIF_Events_API/capif_events/core/events_apis.py index 14cddb0c1501edcf9f17426b59789a3fd23a5196..fa459da4d2c9dbf506371e1ebbf104fe9bc3ab40 100644 --- a/services/TS29222_CAPIF_Events_API/capif_events/core/events_apis.py +++ b/services/TS29222_CAPIF_Events_API/capif_events/core/events_apis.py @@ -6,7 +6,6 @@ import secrets import re from flask import current_app, Flask, Response import json -from ..encoder import JSONEncoder from ..models.problem_details import ProblemDetails from .resources import Resource from bson import json_util diff --git a/services/TS29222_CAPIF_Events_API/capif_events/core/notifications.py b/services/TS29222_CAPIF_Events_API/capif_events/core/notifications.py index e005e7a8f53c25b18d9ceb0232f41a4a6934a6d7..c9ac79e2cb52ab854fde8a60f15474cf4c6231a1 100644 --- a/services/TS29222_CAPIF_Events_API/capif_events/core/notifications.py +++ b/services/TS29222_CAPIF_Events_API/capif_events/core/notifications.py @@ -4,7 +4,7 @@ from .internal_event_ops import InternalEventOperations from models.event_notification import EventNotification from models.access_control_policy_list_ext import AccessControlPolicyListExt from models.capif_event_detail import CAPIFEventDetail -from encoder import JSONEncoder +from encoder import CustomJSONEncoder import sys import json from flask import current_app @@ -34,7 +34,7 @@ class Notifications(): event_detail={redis_event.get('key'):redis_event.get('information')} current_app.logger.debug(event_detail) data = EventNotification(sub["subscription_id"], events=redis_event.get('event'), event_detail=event_detail) - current_app.logger.debug(json.dumps(data.to_dict(),cls=JSONEncoder)) + current_app.logger.debug(json.dumps(data.to_dict(),cls=CustomJSONEncoder)) asyncio.run(self.send(url, serialize_clean_camel_case(data))) diff --git a/services/TS29222_CAPIF_Events_API/capif_events/core/responses.py b/services/TS29222_CAPIF_Events_API/capif_events/core/responses.py index 89689a9e7b3a936e3ea953ed621853ce164d2d70..62874058da961179abdf731744e9d8dc95591ddd 100644 --- a/services/TS29222_CAPIF_Events_API/capif_events/core/responses.py +++ b/services/TS29222_CAPIF_Events_API/capif_events/core/responses.py @@ -1,5 +1,5 @@ from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from flask import Response from ..util import serialize_clean_camel_case import json @@ -8,7 +8,7 @@ mimetype = "application/json" 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 @@ -17,25 +17,25 @@ def internal_server_error(detail, cause): prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params) 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): prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause) prob = serialize_clean_camel_case(prob) - return Response(json.dumps(prob, cls=JSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file + return Response(json.dumps(prob, cls=CustomJSONEncoder), status=404, mimetype=mimetype) \ No newline at end of file diff --git a/services/TS29222_CAPIF_Events_API/capif_events/core/validate_user.py b/services/TS29222_CAPIF_Events_API/capif_events/core/validate_user.py index e7ddee1c50f58ef418483ab58056058f413bb62c..937a1670f3134cf92e049dd4a55abbd3962b3fec 100644 --- a/services/TS29222_CAPIF_Events_API/capif_events/core/validate_user.py +++ b/services/TS29222_CAPIF_Events_API/capif_events/core/validate_user.py @@ -1,7 +1,7 @@ from flask import current_app, Response import json from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from .resources import Resource from .responses import internal_server_error from ..util import serialize_clean_camel_case @@ -22,7 +22,7 @@ class ControlAccess(Resource): prob = ProblemDetails(title="Unauthorized", detail="User not authorized", cause="You are not the owner of this resource") 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: exception = "An exception occurred in validate subscriber" diff --git a/services/TS29222_CAPIF_Events_API/capif_events/encoder.py b/services/TS29222_CAPIF_Events_API/capif_events/encoder.py index 80bad8fa9220ab873e044b7adc0a849746088ad5..526f8b29defbe0156c72ce238a91327c2759b46e 100644 --- a/services/TS29222_CAPIF_Events_API/capif_events/encoder.py +++ b/services/TS29222_CAPIF_Events_API/capif_events/encoder.py @@ -1,10 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six from models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_Events_API/prepare_events.sh b/services/TS29222_CAPIF_Events_API/prepare_events.sh index 62bd7ee283c58a5e48b3cbc27c80bded443f1e14..bf16c7f30a46cc93a9c04356bd799f3bc1a86ba1 100644 --- a/services/TS29222_CAPIF_Events_API/prepare_events.sh +++ b/services/TS29222_CAPIF_Events_API/prepare_events.sh @@ -1,4 +1,4 @@ #!/bin/bash -gunicorn --bind 0.0.0.0:8080 \ +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/capif_events wsgi:app diff --git a/services/TS29222_CAPIF_Events_API/requirements.txt b/services/TS29222_CAPIF_Events_API/requirements.txt index 22b0d352078a44b38cf8d82c4d4cbfcc083ae5c0..fbeaae3e8deeed2a8de549bc3e02e9b03ba89897 100644 --- a/services/TS29222_CAPIF_Events_API/requirements.txt +++ b/services/TS29222_CAPIF_Events_API/requirements.txt @@ -1,28 +1,28 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 +setuptools == 74.0.0 +Flask == 3.0.3 pymongo == 4.7.3 -opentelemetry-instrumentation == 0.38b0 -opentelemetry-instrumentation-flask == 0.38b0 -opentelemetry-instrumentation-redis == 0.38b0 -opentelemetry-instrumentation-pymongo == 0.38b0 -opentelemetry-exporter-otlp == 1.17.0 -opentelemetry-exporter-jaeger == 1.17.0 +redis == 4.5.4 +flask_jwt_extended == 4.6.0 +cryptography == 42.0.8 +rfc3987 == 1.3.8 +opentelemetry-instrumentation == 0.40b0 +opentelemetry-instrumentation-flask == 0.40b0 +opentelemetry-instrumentation-redis == 0.40b0 +opentelemetry-instrumentation-pymongo == 0.40b0 +opentelemetry-exporter-otlp == 1.19.0 +opentelemetry-exporter-jaeger == 1.19.0 fluent == 0.10.0 fluent-logger == 0.10.0 -opentelemetry-api == 1.17.0 -opentelemetry-sdk == 1.17.0 +opentelemetry-api == 1.19.0 +opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -flask_jwt_extended -cryptography == 42.0.8 -rfc3987 == 1.3.8 -redis == 4.5.4 -Flask-APScheduler == 1.12.4 -aiohttp == 3.9.5 +Flask-APScheduler == 1.13.1 +aiohttp == 3.10.5 async-timeout == 4.0.3 -Werkzeug == 2.2.3 -pyopenssl == 24.1.0 +werkzeug == 3.0.4 +pyopenssl == 24.2.1 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/app.py b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/app.py index bf76d0fcdfd8abff158fb8473a82ca04bb9a9455..873a8a82da6cc387c49e8c7de0b5615edb1da230 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/app.py +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/app.py @@ -105,8 +105,8 @@ def verbose_formatter(): datefmt='%d/%m/%Y %H:%M:%S' ) -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_Logging_API_Invocation_API'}, pythonic_params=True) diff --git a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/controllers/default_controller.py b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/controllers/default_controller.py index 7ce9972710b904bdd045e6ca7525f0e46785fa06..7a902dcd06b486fc3d9328803530d22ef923313b 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/controllers/default_controller.py +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/controllers/default_controller.py @@ -55,8 +55,8 @@ def aef_id_logs_post(aef_id, body): # noqa: E501 """ current_app.logger.info("API Invocation Logs") - if connexion.request.is_json: - body = InvocationLog.from_dict(connexion.request.get_json()) # noqa: E501 + if request.is_json: + body = InvocationLog.from_dict(request.get_json()) # noqa: E501 res = logging_invocation_operations.add_invocationlog(aef_id, body) diff --git a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/invocationlogs.py b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/invocationlogs.py index bae9c5a4f26e04d589818041aba15aca27e491bf..d2ba9eae58a72eea476d2c81ed17db6e9ca91e56 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/invocationlogs.py +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/invocationlogs.py @@ -6,7 +6,7 @@ from flask import current_app, Flask, Response from pymongo import ReturnDocument from ..util import serialize_clean_camel_case -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from .resources import Resource from .responses import internal_server_error, not_found_error, unauthorized_error, make_response @@ -80,7 +80,7 @@ class LoggingInvocationOperations(Resource): current_app.logger.debug("Check service apis") event=None - invocation_log_base=json.loads(json.dumps(invocationlog.to_dict(), cls=JSONEncoder)) + invocation_log_base=json.loads(json.dumps(invocationlog.to_dict(), cls=CustomJSONEncoder)) for log in invocationlog.logs: result = self.__check_service_apis(log.api_id, log.api_name) diff --git a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/redis_event.py b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/redis_event.py index aadbdbb6b3116cf288648de41effdb12b9ca9143..251fdf677ea8ea3862316dcabd3ede615860593f 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/redis_event.py +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/redis_event.py @@ -1,4 +1,4 @@ -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from .publisher import Publisher import json @@ -32,7 +32,7 @@ class RedisEvent(): self.redis_event['information'] = information def to_string(self): - return json.dumps(self.redis_event, cls=JSONEncoder) + return json.dumps(self.redis_event, cls=CustomJSONEncoder) def send_event(self): publisher_ops.publish_message("events", self.to_string()) diff --git a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/responses.py b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/responses.py index 5c9803e85b6b639693ae33284b209ecbff38cc3a..cc83d0f40e11bba25b00804f9683e7a258c5f373 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/responses.py +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/responses.py @@ -1,5 +1,5 @@ from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from flask import Response from ..util import serialize_clean_camel_case import json @@ -8,7 +8,7 @@ mimetype = "application/json" 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 @@ -17,32 +17,32 @@ def internal_server_error(detail, cause): prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params) 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): prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause) 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) def unauthorized_error(detail, cause): prob = ProblemDetails(title="Unauthorized", status=401, detail=detail, cause=cause) prob = serialize_clean_camel_case(prob) - return Response(json.dumps(prob, cls=JSONEncoder), status=401, mimetype=mimetype) \ No newline at end of file + return Response(json.dumps(prob, cls=CustomJSONEncoder), status=401, mimetype=mimetype) \ No newline at end of file diff --git a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/validate_user.py b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/validate_user.py index d9f7d5dc16def3abb9f92c5e6a0905657e0ccf54..129d834a0e8bb3d6acee7bddfab292f48cb8103b 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/validate_user.py +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/core/validate_user.py @@ -1,7 +1,7 @@ from flask import current_app, Response import json from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from .resources import Resource from .responses import internal_server_error from ..util import serialize_clean_camel_case @@ -21,7 +21,7 @@ class ControlAccess(Resource): 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 = 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: exception = "An exception occurred in validate invoker" diff --git a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/encoder.py b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/encoder.py index 80bad8fa9220ab873e044b7adc0a849746088ad5..526f8b29defbe0156c72ce238a91327c2759b46e 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/encoder.py +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/api_invocation_logs/encoder.py @@ -1,10 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six from models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_Logging_API_Invocation_API/prepare_logging.sh b/services/TS29222_CAPIF_Logging_API_Invocation_API/prepare_logging.sh index 4cd01a6ccf928e437c96462700e785422275913f..25c0c0ecebebf208c78bf60c6e08cde0613a3fdf 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/prepare_logging.sh +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/prepare_logging.sh @@ -1,4 +1,4 @@ #!/bin/bash -gunicorn --bind 0.0.0.0:8080 \ +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/api_invocation_logs wsgi:app diff --git a/services/TS29222_CAPIF_Logging_API_Invocation_API/requirements.txt b/services/TS29222_CAPIF_Logging_API_Invocation_API/requirements.txt index e92ae36d8fb1b0a19b8530808df64a440334547c..e5640804e1111309cbc5e90caf086b44916ed8e2 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/requirements.txt +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/requirements.txt @@ -1,25 +1,25 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 +setuptools == 74.0.0 +Flask == 3.0.3 pymongo == 4.7.3 elasticsearch == 8.4.3 -flask_jwt_extended == 4.4.4 +flask_jwt_extended == 4.6.0 +cryptography == 42.0.8 redis == 4.5.4 -opentelemetry-instrumentation == 0.38b0 -opentelemetry-instrumentation-flask == 0.38b0 -opentelemetry-instrumentation-redis == 0.38b0 -opentelemetry-instrumentation-pymongo == 0.38b0 -opentelemetry-exporter-otlp == 1.17.0 -opentelemetry-exporter-jaeger == 1.17.0 +opentelemetry-instrumentation == 0.40b0 +opentelemetry-instrumentation-flask == 0.40b0 +opentelemetry-instrumentation-redis == 0.40b0 +opentelemetry-instrumentation-pymongo == 0.40b0 +opentelemetry-exporter-otlp == 1.19.0 +opentelemetry-exporter-jaeger == 1.19.0 fluent == 0.10.0 fluent-logger == 0.10.0 -opentelemetry-api == 1.17.0 -opentelemetry-sdk == 1.17.0 +opentelemetry-api == 1.19.0 +opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -cryptography == 42.0.8 -Werkzeug == 2.2.3 +werkzeug == 3.0.4 pyopenssl == 24.1.0 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Publish_Service_API/prepare_publish.sh b/services/TS29222_CAPIF_Publish_Service_API/prepare_publish.sh index d0eed0b94e7189472bd6c659e4850b79adbf26f6..8526fe8899f3bab0fceb15eb6c7420345536e849 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/prepare_publish.sh +++ b/services/TS29222_CAPIF_Publish_Service_API/prepare_publish.sh @@ -1,4 +1,4 @@ #!/bin/bash -gunicorn --bind 0.0.0.0:8080 \ +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/published_apis wsgi:app diff --git a/services/TS29222_CAPIF_Publish_Service_API/published_apis/app.py b/services/TS29222_CAPIF_Publish_Service_API/published_apis/app.py index dedd2b563f2f83cf36c9a16d542053e7828201bf..bb155171b5f243abab9ae0d29b078da55fcd88f6 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/published_apis/app.py +++ b/services/TS29222_CAPIF_Publish_Service_API/published_apis/app.py @@ -115,8 +115,8 @@ def verbose_formatter(): ) -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_Publish_Service_API'}, pythonic_params=True) @@ -135,7 +135,11 @@ if monitoring_value == "true": executor = Executor(app.app) subscriber = Subscriber() +first = True -@app.app.before_first_request +@app.app.before_request def up_listener(): - executor.submit(subscriber.listen) + global first + if first: + executor.submit(subscriber.listen) + first = False diff --git a/services/TS29222_CAPIF_Publish_Service_API/published_apis/controllers/default_controller.py b/services/TS29222_CAPIF_Publish_Service_API/published_apis/controllers/default_controller.py index 62e506a6be747d94efa513917913f03a75f20ca3..8f1e5d0c22c1bdb00f51c74136a039c9d26aa36a 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/published_apis/controllers/default_controller.py +++ b/services/TS29222_CAPIF_Publish_Service_API/published_apis/controllers/default_controller.py @@ -8,6 +8,7 @@ from cryptography import x509 from cryptography.hazmat.backends import default_backend from ..core.validate_user import ControlAccess from functools import wraps +import asyncio service_operations = PublishServiceOperations() @@ -74,8 +75,10 @@ def apf_id_service_apis_post(apf_id, body): # noqa: E501 """ current_app.logger.info("Publishing service") - if connexion.request.is_json: - body = ServiceAPIDescription.from_dict(connexion.request.get_json()) # noqa: E501 + current_app.logger.info(connexion.request.content_type) + + if request.is_json: + body = ServiceAPIDescription.from_dict(request.get_json()) # noqa: E501 res = service_operations.add_serviceapidescription(apf_id, body) @@ -142,8 +145,8 @@ def apf_id_service_apis_service_api_id_put(service_api_id, apf_id, body): # noq current_app.logger.info( "Updating service api id with id: " + service_api_id) - if connexion.request.is_json: - body = ServiceAPIDescription.from_dict(connexion.request.get_json()) # noqa: E501 + if request.is_json: + body = ServiceAPIDescription.from_dict(request.get_json()) # noqa: E501 response = service_operations.update_serviceapidescription( service_api_id, apf_id, body) diff --git a/services/TS29222_CAPIF_Publish_Service_API/published_apis/core/responses.py b/services/TS29222_CAPIF_Publish_Service_API/published_apis/core/responses.py index 3d10ff541afe36f7c3bc527a8a475805e532cdcc..cc631b0ecc40e17128712bb537038487e0134846 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/published_apis/core/responses.py +++ b/services/TS29222_CAPIF_Publish_Service_API/published_apis/core/responses.py @@ -1,5 +1,5 @@ from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from flask import Response from ..util import serialize_clean_camel_case import json @@ -9,7 +9,7 @@ mimetype = "application/json" 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 @@ -18,32 +18,32 @@ def internal_server_error(detail, cause): prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params) 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): prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause) 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) def unauthorized_error(detail, cause): prob = ProblemDetails(title="Unauthorized", status=401, detail=detail, cause=cause) prob = serialize_clean_camel_case(prob) - return Response(json.dumps(prob, cls=JSONEncoder), status=401, mimetype=mimetype) \ No newline at end of file + return Response(json.dumps(prob, cls=CustomJSONEncoder), status=401, mimetype=mimetype) \ No newline at end of file diff --git a/services/TS29222_CAPIF_Publish_Service_API/published_apis/core/validate_user.py b/services/TS29222_CAPIF_Publish_Service_API/published_apis/core/validate_user.py index f48414943c1c384b10d52d21c1aac456a1d772bc..e73cf8a8c856a064ecbb6b31536521b3bbcca026 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/published_apis/core/validate_user.py +++ b/services/TS29222_CAPIF_Publish_Service_API/published_apis/core/validate_user.py @@ -1,7 +1,7 @@ from flask import current_app, Response import json from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from .resources import Resource from .responses import internal_server_error from ..util import serialize_clean_camel_case @@ -21,7 +21,7 @@ class ControlAccess(Resource): if cert_entry["cert_signature"] != cert_signature or "services" not in cert_entry["resources"] or service_id not in cert_entry["resources"]["services"]: prob = ProblemDetails(title="Unauthorized", detail="User not authorized", cause="You are not the owner of this resource") 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: exception = "An exception occurred in validate apf" diff --git a/services/TS29222_CAPIF_Publish_Service_API/published_apis/encoder.py b/services/TS29222_CAPIF_Publish_Service_API/published_apis/encoder.py index 80bad8fa9220ab873e044b7adc0a849746088ad5..526f8b29defbe0156c72ce238a91327c2759b46e 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/published_apis/encoder.py +++ b/services/TS29222_CAPIF_Publish_Service_API/published_apis/encoder.py @@ -1,10 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six from models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_Publish_Service_API/requirements.txt b/services/TS29222_CAPIF_Publish_Service_API/requirements.txt index 0b1b9e8c227957eae80431cd7df84296dabeb2c4..f499677c32fb1988a71e20d0225e046d4c69d7f1 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/requirements.txt +++ b/services/TS29222_CAPIF_Publish_Service_API/requirements.txt @@ -1,24 +1,23 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 +setuptools == 74.0.0 +Flask == 3.0.3 pymongo == 4.7.3 -flask_jwt_extended == 4.4.4 +redis == 4.5.4 +flask_jwt_extended == 4.6.0 +cryptography == 42.0.8 opentelemetry-instrumentation == 0.38b0 opentelemetry-instrumentation-flask == 0.38b0 opentelemetry-instrumentation-redis == 0.38b0 opentelemetry-instrumentation-pymongo == 0.38b0 opentelemetry-exporter-otlp == 1.17.0 -opentelemetry-exporter-jaeger == 1.17.0 +opentelemetry-exporter-jaeger == 1.19.0 fluent == 0.10.0 fluent-logger == 0.10.0 opentelemetry-api == 1.17.0 opentelemetry-sdk == 1.17.0 flask_executor == 1.0.0 -cryptography == 42.0.8 -redis == 4.5.4 -flask_executor == 1.0.0 -Werkzeug == 2.2.3 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Routing_Info_API/capif_routing_info/app.py b/services/TS29222_CAPIF_Routing_Info_API/capif_routing_info/app.py index 89135805b065ac22200eecdbf76b699f7035e680..8a81b617334ff2f872e4555ffac9555f95b9dd46 100644 --- a/services/TS29222_CAPIF_Routing_Info_API/capif_routing_info/app.py +++ b/services/TS29222_CAPIF_Routing_Info_API/capif_routing_info/app.py @@ -4,8 +4,8 @@ import connexion import encoder -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_Routing_Info_API'}, pythonic_params=True) diff --git a/services/TS29222_CAPIF_Routing_Info_API/capif_routing_info/encoder.py b/services/TS29222_CAPIF_Routing_Info_API/capif_routing_info/encoder.py index 80bad8fa9220ab873e044b7adc0a849746088ad5..526f8b29defbe0156c72ce238a91327c2759b46e 100644 --- a/services/TS29222_CAPIF_Routing_Info_API/capif_routing_info/encoder.py +++ b/services/TS29222_CAPIF_Routing_Info_API/capif_routing_info/encoder.py @@ -1,10 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six from models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_Routing_Info_API/prepare_routing_info.sh b/services/TS29222_CAPIF_Routing_Info_API/prepare_routing_info.sh index 53eaa2b084e73d1fe7e710f1acf94b48771b668b..aa37163ff34156c5cfa585de5974390c09905ddf 100644 --- a/services/TS29222_CAPIF_Routing_Info_API/prepare_routing_info.sh +++ b/services/TS29222_CAPIF_Routing_Info_API/prepare_routing_info.sh @@ -1,4 +1,4 @@ #!/bin/bash -gunicorn --bind 0.0.0.0:8080 \ +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/capif_routing_info wsgi:app diff --git a/services/TS29222_CAPIF_Routing_Info_API/requirements.txt b/services/TS29222_CAPIF_Routing_Info_API/requirements.txt index afaac687767e9f9669d7f6baadf40a77ceddedb8..0ecdd1f3b7931f42166a8e8cc214755a04462e6c 100644 --- a/services/TS29222_CAPIF_Routing_Info_API/requirements.txt +++ b/services/TS29222_CAPIF_Routing_Info_API/requirements.txt @@ -1,8 +1,8 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 -Werkzeug == 2.2.3 +setuptools == 74.0.0 +Flask == 3.0.3 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Security_API/capif_security/app.py b/services/TS29222_CAPIF_Security_API/capif_security/app.py index 43457008864cc00a84b515f3e210654e2bf82c4d..07dc9ad2a9352b3c02aa752266736c4eb144ab28 100644 --- a/services/TS29222_CAPIF_Security_API/capif_security/app.py +++ b/services/TS29222_CAPIF_Security_API/capif_security/app.py @@ -113,8 +113,8 @@ def verbose_formatter(): with open("/usr/src/app/capif_security/server.key", "rb") as key_file: key_data = key_file.read() -app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app = connexion.App(__name__, specification_dir='openapi/') +app.app.json_encoder = encoder.CustomJSONEncoder app.app.config['JWT_ALGORITHM'] = 'RS256' @@ -135,6 +135,11 @@ if monitoring_value == "true": executor = Executor(app.app) -@app.app.before_first_request +first = True + +@app.app.before_request def up_listener(): - executor.submit(subscriber.listen) + global first + if first: + executor.submit(subscriber.listen) + first = False diff --git a/services/TS29222_CAPIF_Security_API/capif_security/controllers/default_controller.py b/services/TS29222_CAPIF_Security_API/capif_security/controllers/default_controller.py index 7e04d4df353bd4227d5b7bda72e3cb7236cf1dab..22769f17d952b1fa35d8e99bd2639c891fbfe087 100644 --- a/services/TS29222_CAPIF_Security_API/capif_security/controllers/default_controller.py +++ b/services/TS29222_CAPIF_Security_API/capif_security/controllers/default_controller.py @@ -71,8 +71,8 @@ def securities_security_id_token_post(security_id, body): # noqa: E501 """ current_app.logger.info("Creating security token") - if connexion.request.is_json: - body = AccessTokenReq.from_dict(connexion.request.get_json()) # noqa: E501 + if request.is_json: + body = AccessTokenReq.from_dict(request.get_json()) # noqa: E501 res = service_security_ops.return_token(security_id, body) @@ -106,8 +106,8 @@ def trusted_invokers_api_invoker_id_delete_post(api_invoker_id, body): # noqa: :rtype: None """ - if connexion.request.is_json: - body = SecurityNotification.from_dict(connexion.request.get_json()) # noqa: E501 + if request.is_json: + body = SecurityNotification.from_dict(request.get_json()) # noqa: E501 current_app.logger.info("Revoking permissions") res = service_security_ops.revoke_api_authorization(api_invoker_id, body) @@ -150,8 +150,8 @@ def trusted_invokers_api_invoker_id_put(api_invoker_id, body): # noqa: E501 """ current_app.logger.info("Creating security context") - if connexion.request.is_json: - body = ServiceSecurity.from_dict(connexion.request.get_json()) # noqa: E501 + if request.is_json: + body = ServiceSecurity.from_dict(request.get_json()) # noqa: E501 res = service_security_ops.create_servicesecurity(api_invoker_id, body) if res.status_code == 201: @@ -176,7 +176,7 @@ def trusted_invokers_api_invoker_id_update_post(api_invoker_id, body): # noqa: """ current_app.logger.info("Updating security context") - if connexion.request.is_json: - body = ServiceSecurity.from_dict(connexion.request.get_json()) # noqa: E501 + if request.is_json: + body = ServiceSecurity.from_dict(request.get_json()) # noqa: E501 res = service_security_ops.update_servicesecurity(api_invoker_id, body) return res diff --git a/services/TS29222_CAPIF_Security_API/capif_security/core/redis_event.py b/services/TS29222_CAPIF_Security_API/capif_security/core/redis_event.py index aadbdbb6b3116cf288648de41effdb12b9ca9143..251fdf677ea8ea3862316dcabd3ede615860593f 100644 --- a/services/TS29222_CAPIF_Security_API/capif_security/core/redis_event.py +++ b/services/TS29222_CAPIF_Security_API/capif_security/core/redis_event.py @@ -1,4 +1,4 @@ -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from .publisher import Publisher import json @@ -32,7 +32,7 @@ class RedisEvent(): self.redis_event['information'] = information def to_string(self): - return json.dumps(self.redis_event, cls=JSONEncoder) + return json.dumps(self.redis_event, cls=CustomJSONEncoder) def send_event(self): publisher_ops.publish_message("events", self.to_string()) diff --git a/services/TS29222_CAPIF_Security_API/capif_security/core/responses.py b/services/TS29222_CAPIF_Security_API/capif_security/core/responses.py index 4e1eb35cbaf62e88311170d3afee308ab7aa5b64..6f204182e8853fcdf0c362dc2042395eb5f42e57 100644 --- a/services/TS29222_CAPIF_Security_API/capif_security/core/responses.py +++ b/services/TS29222_CAPIF_Security_API/capif_security/core/responses.py @@ -1,5 +1,5 @@ from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from flask import Response import json from ..util import serialize_clean_camel_case @@ -8,7 +8,7 @@ mimetype = "application/json" 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 @@ -17,32 +17,32 @@ def internal_server_error(detail, cause): prob = ProblemDetails(title="Internal Server Error", status=500, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Forbidden", status=403, detail=detail, cause=cause) 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): prob = ProblemDetails(title="Bad Request", status=400, detail=detail, cause=cause, invalid_params=invalid_params) 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): prob = ProblemDetails(title="Not Found", status=404, detail=detail, cause=cause) 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) def unauthorized_error(detail, cause): prob = ProblemDetails(title="Unauthorized", status=401, detail=detail, cause=cause) prob = serialize_clean_camel_case(prob) - return Response(json.dumps(prob, cls=JSONEncoder), status=401, mimetype=mimetype) \ No newline at end of file + return Response(json.dumps(prob, cls=CustomJSONEncoder), status=401, mimetype=mimetype) \ No newline at end of file diff --git a/services/TS29222_CAPIF_Security_API/capif_security/core/validate_user.py b/services/TS29222_CAPIF_Security_API/capif_security/core/validate_user.py index 04d893edc45aa4b477a123755a4aeb1d36c05868..10986442c8af0d2cd5ace5f2f10999932b822f92 100644 --- a/services/TS29222_CAPIF_Security_API/capif_security/core/validate_user.py +++ b/services/TS29222_CAPIF_Security_API/capif_security/core/validate_user.py @@ -1,7 +1,7 @@ from flask import current_app, Response import json from ..models.problem_details import ProblemDetails -from ..encoder import JSONEncoder +from ..encoder import CustomJSONEncoder from .resources import Resource from .responses import internal_server_error,serialize_clean_camel_case @@ -19,7 +19,7 @@ class ControlAccess(Resource): 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 = 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: exception = "An exception occurred in validate invoker" diff --git a/services/TS29222_CAPIF_Security_API/capif_security/encoder.py b/services/TS29222_CAPIF_Security_API/capif_security/encoder.py index 80bad8fa9220ab873e044b7adc0a849746088ad5..526f8b29defbe0156c72ce238a91327c2759b46e 100644 --- a/services/TS29222_CAPIF_Security_API/capif_security/encoder.py +++ b/services/TS29222_CAPIF_Security_API/capif_security/encoder.py @@ -1,10 +1,10 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.jsonifier import JSONEncoder import six from models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +17,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_Security_API/prepare_security.sh b/services/TS29222_CAPIF_Security_API/prepare_security.sh index 94bece0582e614c49d6fbab23307984a2ad9875d..86f10f24716dafa0d0f873cc40953f037fcdf9d7 100644 --- a/services/TS29222_CAPIF_Security_API/prepare_security.sh +++ b/services/TS29222_CAPIF_Security_API/prepare_security.sh @@ -15,5 +15,5 @@ curl -k -retry 30 \ --request GET "$VAULT_ADDR/v1/secret/data/server_cert/private" 2>/dev/null | jq -r '.data.data.key' -j > /usr/src/app/capif_security/server.key -gunicorn --bind 0.0.0.0:8080 \ +gunicorn -k uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/capif_security wsgi:app \ No newline at end of file diff --git a/services/TS29222_CAPIF_Security_API/requirements.txt b/services/TS29222_CAPIF_Security_API/requirements.txt index b92f321e856892a89171bb517ae90e604445af75..32a15be25ab0afc062f029940f58f84ccb466548 100644 --- a/services/TS29222_CAPIF_Security_API/requirements.txt +++ b/services/TS29222_CAPIF_Security_API/requirements.txt @@ -1,25 +1,24 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask, swagger-ui, uvicorn] == 3.1.0; python_version>="3.6" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 -setuptools == 68.2.2 -Flask == 2.0.3 +setuptools == 74.0.0 +Flask == 3.0.3 pymongo == 4.7.3 -flask_jwt_extended == 4.4.4 +redis == 4.5.4 +flask_jwt_extended == 4.6.0 cryptography == 42.0.8 rfc3987 == 1.3.8 -redis == 4.5.4 -flask_executor == 1.0.0 -opentelemetry-instrumentation == 0.38b0 -opentelemetry-instrumentation-flask == 0.38b0 -opentelemetry-instrumentation-redis == 0.38b0 -opentelemetry-instrumentation-pymongo == 0.38b0 -opentelemetry-exporter-otlp == 1.17.0 -opentelemetry-exporter-jaeger == 1.17.0 +opentelemetry-instrumentation == 0.40b0 +opentelemetry-instrumentation-flask == 0.40b0 +opentelemetry-instrumentation-redis == 0.40b0 +opentelemetry-instrumentation-pymongo == 0.40b0 +opentelemetry-exporter-otlp == 1.19.0 +opentelemetry-exporter-jaeger == 1.19.0 fluent == 0.10.0 fluent-logger == 0.10.0 -opentelemetry-api == 1.17.0 -opentelemetry-sdk == 1.17.0 +opentelemetry-api == 1.19.0 +opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 2.2.3 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/helper/requirements.txt b/services/helper/requirements.txt index 23c2931293b753eb0580dae37dab345cd1335869..48b0fba6161e185929637b7288143660257aa8b0 100644 --- a/services/helper/requirements.txt +++ b/services/helper/requirements.txt @@ -1,5 +1,5 @@ python_dateutil == 2.9.0.post0 -setuptools == 68.2.2 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 flask_jwt_extended == 4.6.0 diff --git a/services/register/requirements.txt b/services/register/requirements.txt index bf3e52ccc89c836571bf47bda630499347c54259..1c1cb217ddd6a995353a26853f7df53bd2148e6b 100644 --- a/services/register/requirements.txt +++ b/services/register/requirements.txt @@ -1,5 +1,5 @@ python_dateutil >= 2.6.0 -setuptools == 68.2.2 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 flask_jwt_extended == 4.6.0 diff --git a/tests/resources/common/basicRequests.robot b/tests/resources/common/basicRequests.robot index 2082c815b8243531cd1e2ad5e413da20c9fd7b8c..838086f925a9d8310d3e00c55b652c036588b567 100644 --- a/tests/resources/common/basicRequests.robot +++ b/tests/resources/common/basicRequests.robot @@ -274,6 +274,8 @@ Patch Request Capif ${headers}= Create CAPIF Session ${server} ${access_token} + Set To Dictionary ${headers} Content-Type application/merge-patch+json + IF '${username}' != '${NONE}' ${cert}= Set variable ${{ ('${username}.crt','${username}.key') }} END