From 0168c0062e9c6c107fa46859dfe05e81ef5cab93 Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Mon, 29 Jul 2024 16:29:55 +0300 Subject: [PATCH 1/9] [Not working commit] Migrate Invoker and Provider Management --- .../api_invoker_management/app.py | 23 +++++++++++-------- .../{wsgi.py => asgi.py} | 2 +- .../api_invoker_management/config.py | 2 +- .../api_invoker_management/core/resources.py | 2 +- .../api_invoker_management/db/db.py | 2 +- .../api_invoker_management/encoder.py | 9 ++++---- .../api_invoker_management/util.py | 2 +- .../prepare_invoker.sh | 5 ++-- .../requirements.txt | 10 ++++---- .../api_provider_management/app.py | 12 +++++----- .../api_provider_management/asgi.py | 4 ++++ .../api_provider_management/config.py | 2 +- .../api_provider_management/encoder.py | 9 ++++---- .../api_provider_management/util.py | 2 +- .../api_provider_management/wsgi.py | 4 ---- .../prepare_provider.sh | 6 ++--- .../requirements.txt | 10 ++++---- 17 files changed, 56 insertions(+), 50 deletions(-) rename services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/{wsgi.py => asgi.py} (66%) create mode 100644 services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/asgi.py delete mode 100644 services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/wsgi.py 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 9d55bc5..c77126c 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 @@ -2,10 +2,10 @@ import connexion import logging -import encoder +import api_invoker_management.encoder from flask_jwt_extended import JWTManager, jwt_required, create_access_token -from config import Config -from core.consumer_messager import Subscriber +from .config import Config +from .core.consumer_messager import Subscriber from logging.handlers import RotatingFileHandler import os from fluent import sender @@ -116,11 +116,12 @@ 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.add_api('openapi.yaml', - arguments={'title': 'CAPIF_API_Invoker_Management_API'}, - pythonic_params=True) +# app = connexion.App(__name__, specification_dir='./openapi/') +app = connexion.App(__name__) +app.app.json_encoder = api_invoker_management.encoder.JSONEncoder +# app.add_api('openapi.yaml', +# arguments={'title': 'CAPIF_API_Invoker_Management_API'}, +# pythonic_params=True) app.app.config['JWT_ALGORITHM'] = 'RS256' app.app.config['JWT_PUBLIC_KEY'] = pub_data @@ -138,6 +139,8 @@ if monitoring_value == "true": executor = Executor(app.app) subscriber = Subscriber() -@app.app.before_first_request + +# @app.app.before_first_request def create_listener_message(): - executor.submit(subscriber.listen) \ No newline at end of file + with app.app.app_context(): + executor.submit(subscriber.listen) \ No newline at end of file diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/wsgi.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/asgi.py similarity index 66% rename from services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/wsgi.py rename to services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/asgi.py index 6026b0f..6475d15 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/wsgi.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/asgi.py @@ -1,4 +1,4 @@ -from app import app +from .app import app if __name__ == "__main__": app.run() diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/config.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/config.py index 01f9914..11e1c4f 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/config.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/config.py @@ -5,7 +5,7 @@ import os class Config: def __init__(self): self.cached = 0 - self.file="../config.yaml" + self.file="./config.yaml" self.my_config = {} stamp = os.stat(self.file).st_mtime 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 efbe3c2..ef58351 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/db/db.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/db/db.py index 1ef0262..89c8a48 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 80bad8f..5413582 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,11 @@ -from connexion.apps.flask_app import FlaskJSONEncoder +# from connexion.apps.flask_app import FlaskJSONEncoder +from connexion.frameworks.flask import FlaskJSONProvider import six -from models.base_model_ import Model +from .models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class JSONEncoder(FlaskJSONProvider): include_nulls = False def default(self, o): @@ -17,4 +18,4 @@ class JSONEncoder(FlaskJSONEncoder): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONEncoder.default(self, o) + return FlaskJSONProvider.default(self, o) diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/util.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/util.py index 31af7ab..04137a6 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/util.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/util.py @@ -1,7 +1,7 @@ import datetime import six -import typing_utils +import api_invoker_management.typing_utils def serialize_clean_camel_case(obj): 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 df73fa6..b8add97 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,6 @@ 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 +#uvicorn --host 0.0.0.0:8080 \ +# --root-path /usr/src/app/api_invoker_management asgi:app +uvicorn api_invoker_management.asgi:app --host 0.0.0.0 --port 8080 --reload \ No newline at end of file diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt index dbf0f19..a074389 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt @@ -1,10 +1,10 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask] == 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 +Flask == 3.0.3 pymongo == 4.7.3 -flask_jwt_extended == 4.4.4 +flask_jwt_extended == 4.6.0 cryptography == 42.0.8 rfc3987 == 1.3.8 redis == 4.5.4 @@ -19,6 +19,6 @@ fluent-logger == 0.10.0 opentelemetry-api == 1.19.0 opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 2.2.3 -gunicorn == 22.0.0 +Werkzeug == 3.0.0 +uvicorn == 0.30.3 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 2896830..c671af6 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 @@ -114,10 +114,10 @@ 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.add_api('openapi.yaml', - arguments={'title': 'CAPIF_API_Provider_Management_API'}, - pythonic_params=True) +app.app.json_encoder = api_provider_management.encoder.JSONEncoder +# app.add_api('openapi.yaml', +# arguments={'title': 'CAPIF_API_Provider_Management_API'}, +# pythonic_params=True) config = Config() configure_logging(app.app) diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/asgi.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/asgi.py new file mode 100644 index 0000000..92585dc --- /dev/null +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/asgi.py @@ -0,0 +1,4 @@ +from api_provider_management.app import app + +if __name__ == "__main__": + app.run() diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/config.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/config.py index bed212a..377b14f 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/config.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/config.py @@ -5,7 +5,7 @@ import os class Config: def __init__(self): self.cached = 0 - self.file="../config.yaml" + self.file="./config.yaml" self.my_config = {} stamp = os.stat(self.file).st_mtime if stamp != self.cached: 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 3f1c01c..2eb615d 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.apps.flask_app import FlaskJSONEncoder +from connexion.frameworks.flask import FlaskJSONProvider import six -from models.base_model_ import Model +from .models.base_model_ import Model -class JSONEncoder(FlaskJSONEncoder): +class JSONEncoder(FlaskJSONProvider): 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 FlaskJSONProvider.default(self, o) diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/util.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/util.py index 431a28c..3cb4ecf 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/util.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/util.py @@ -1,6 +1,6 @@ import datetime import six -import typing_utils +import api_provider_management.typing_utils def serialize_clean_camel_case(obj): 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 deleted file mode 100644 index 6026b0f..0000000 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/wsgi.py +++ /dev/null @@ -1,4 +0,0 @@ -from 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 5ec3096..111cc1f 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh +++ b/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh @@ -13,7 +13,7 @@ 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_provider_management/pubkey.pem -gunicorn --bind 0.0.0.0:8080 \ - --chdir /usr/src/app/api_provider_management wsgi:app - +#uvicorn --host 0.0.0.0:8080 \ +# --root-path /usr/src/app/api_provider_management asgi:app +uvicorn api_provider_management.asgi:app --host 0.0.0.0 --port 8080 --reload diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt index a5c9cce..2a10c6c 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt @@ -1,11 +1,11 @@ -connexion[swagger-ui] == 2.14.2; python_version>="3.6" +connexion[flask] == 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 +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 @@ -18,6 +18,6 @@ fluent-logger == 0.10.0 opentelemetry-api == 1.17.0 opentelemetry-sdk == 1.17.0 flask_executor == 1.0.0 -Werkzeug == 2.2.3 -gunicorn == 22.0.0 +Werkzeug == 3.0.0 +uvicorn == 0.30.3 packaging == 24.0 -- GitLab From 469bae4e8571e1a112d755ac0224523890cc0d76 Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Thu, 1 Aug 2024 08:22:45 +0300 Subject: [PATCH 2/9] [Not working commit] Add some requirements and add_api function --- .../requirements.txt | 2 +- .../api_provider_management/app.py | 10 ++++++---- .../requirements.txt | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt index a074389..c8ac243 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt @@ -1,4 +1,4 @@ -connexion[flask] == 3.1.0; 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 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 c671af6..63db8f0 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 @@ -113,11 +113,13 @@ 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 = connexion.App(__name__, specification_dir='openapi/') app.app.json_encoder = api_provider_management.encoder.JSONEncoder -# app.add_api('openapi.yaml', -# arguments={'title': 'CAPIF_API_Provider_Management_API'}, -# pythonic_params=True) +app.add_api('openapi.yaml', + arguments={'title': 'CAPIF_API_Provider_Management_API'}, + pythonic_params=True) +# app.add_api('openapi.yaml') + config = Config() configure_logging(app.app) diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt index 2a10c6c..4dbddd2 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt @@ -1,4 +1,4 @@ -connexion[flask] == 3.1.0; 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 -- GitLab From 0cf1e4586f3f77c4d9b9327094b8e567d8cfad8d Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Mon, 26 Aug 2024 14:44:12 +0300 Subject: [PATCH 3/9] [Not working commit] Test gunicorn with UvicornWorker --- .../controllers/default_controller.py | 11 +++++++++-- .../api_provider_management/encoder.py | 8 ++++++++ .../prepare_provider.sh | 6 ++++++ .../requirements.txt | 4 ++++ 4 files changed, 27 insertions(+), 2 deletions(-) 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 d9a190c..e7f7ef3 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,10 +63,16 @@ 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 connexion.request.is_json: + # body = APIProviderEnrolmentDetails.from_dict(connexion.request.get_json()) # noqa: E501 + # if connexion.request.content_type == 'application/json': + # value = connexion.request.json() + # val = asyncio.run(value) + # current_app.logger.info(val) + # body = APIProviderEnrolmentDetails.from_dict(val) # noqa: E501 + body = APIProviderEnrolmentDetails.from_dict(body) res = provider_management_ops.register_api_provider_enrolment_details(body, username, uuid) return res 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 2eb615d..e998ec4 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,17 @@ # from connexion.apps.flask_app import FlaskJSONEncoder from connexion.frameworks.flask import FlaskJSONProvider +<<<<<<< Updated upstream +======= +# from connexion import jsonifier +>>>>>>> Stashed changes import six from .models.base_model_ import Model +<<<<<<< Updated upstream +======= + +>>>>>>> Stashed changes class JSONEncoder(FlaskJSONProvider): include_nulls = False 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 111cc1f..84add04 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh +++ b/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh @@ -13,7 +13,13 @@ 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_provider_management/pubkey.pem +<<<<<<< Updated upstream #uvicorn --host 0.0.0.0:8080 \ # --root-path /usr/src/app/api_provider_management asgi:app uvicorn api_provider_management.asgi:app --host 0.0.0.0 --port 8080 --reload +======= +gunicorn -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8080 \ + --chdir /usr/src/app/api_provider_management wsgi:app + +>>>>>>> Stashed changes diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt index 4dbddd2..67b5fc7 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt @@ -19,5 +19,9 @@ opentelemetry-api == 1.17.0 opentelemetry-sdk == 1.17.0 flask_executor == 1.0.0 Werkzeug == 3.0.0 +<<<<<<< Updated upstream +======= +gunicorn == 22.0.0 +>>>>>>> Stashed changes uvicorn == 0.30.3 packaging == 24.0 -- GitLab From 8442cb43bb4c5b30e1a650f88e82f3a20a06ae1f Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Mon, 26 Aug 2024 14:46:31 +0300 Subject: [PATCH 4/9] [Not working commit] Test gunicorn with UvicornWorker minor fixes --- .../api_provider_management/encoder.py | 8 -------- .../prepare_provider.sh | 8 ++------ .../requirements.txt | 3 --- 3 files changed, 2 insertions(+), 17 deletions(-) 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 e998ec4..2eb615d 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,17 +1,9 @@ # from connexion.apps.flask_app import FlaskJSONEncoder from connexion.frameworks.flask import FlaskJSONProvider -<<<<<<< Updated upstream -======= -# from connexion import jsonifier ->>>>>>> Stashed changes import six from .models.base_model_ import Model -<<<<<<< Updated upstream -======= - ->>>>>>> Stashed changes class JSONEncoder(FlaskJSONProvider): include_nulls = False 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 84add04..cc96ae4 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh +++ b/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh @@ -12,14 +12,10 @@ 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 - -<<<<<<< Updated upstream #uvicorn --host 0.0.0.0:8080 \ # --root-path /usr/src/app/api_provider_management asgi:app -uvicorn api_provider_management.asgi:app --host 0.0.0.0 --port 8080 --reload -======= +#uvicorn api_provider_management.asgi:app --host 0.0.0.0 --port 8080 --reload + gunicorn -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8080 \ --chdir /usr/src/app/api_provider_management wsgi:app ->>>>>>> Stashed changes - diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt index 67b5fc7..c1413c8 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt @@ -19,9 +19,6 @@ opentelemetry-api == 1.17.0 opentelemetry-sdk == 1.17.0 flask_executor == 1.0.0 Werkzeug == 3.0.0 -<<<<<<< Updated upstream -======= gunicorn == 22.0.0 ->>>>>>> Stashed changes uvicorn == 0.30.3 packaging == 24.0 -- GitLab From 1716fd74660079631c801964b12388b3ff1d8485 Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Wed, 28 Aug 2024 08:36:06 +0300 Subject: [PATCH 5/9] [Not totally working commit] rename the gateway file, change uvicorn worker --- .../api_provider_management/app.py | 2 +- .../api_provider_management/config.py | 2 +- .../controllers/default_controller.py | 5 +++-- ...dual_api_provider_enrolment_details_controller.py | 6 +++--- .../api_provider_management/core/responses.py | 12 ++++++------ .../api_provider_management/core/validate_user.py | 4 ++-- .../api_provider_management/encoder.py | 8 +++++--- .../api_provider_management/util.py | 2 +- .../api_provider_management/{asgi.py => wsgi.py} | 0 .../prepare_provider.sh | 2 +- 10 files changed, 23 insertions(+), 20 deletions(-) rename services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/{asgi.py => wsgi.py} (100%) 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 63db8f0..b5e85f3 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 @@ -114,7 +114,7 @@ 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 = api_provider_management.encoder.JSONEncoder +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/config.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/config.py index 377b14f..bed212a 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/config.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/config.py @@ -5,7 +5,7 @@ import os class Config: def __init__(self): self.cached = 0 - self.file="./config.yaml" + self.file="../config.yaml" self.my_config = {} stamp = os.stat(self.file).st_mtime if stamp != self.cached: 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 e7f7ef3..400f915 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 @@ -108,9 +108,10 @@ 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 connexion.request.is_json: + # body = APIProviderEnrolmentDetails.from_dict(connexion.request.get_json()) # noqa: E501 + body = APIProviderEnrolmentDetails.from_dict(body) res = provider_management_ops.update_api_provider_enrolment_details(registration_id,body) return res 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 dee8d15..353bd82 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,9 +26,10 @@ 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 connexion.request.is_json: + # body = APIProviderEnrolmentDetailsPatch.from_dict(connexion.request.get_json()) # noqa: E501 + body = APIProviderEnrolmentDetailsPatch.from_dict(body) res = provider_management_ops.update_api_provider_enrolment_details(registration_id, body) return res 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 98eca0c..7fd8fec 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 29043d5..624c5a9 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 2eb615d..44e1bfb 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,10 +1,12 @@ # from connexion.apps.flask_app import FlaskJSONEncoder -from connexion.frameworks.flask import FlaskJSONProvider +# from connexion.frameworks.flask import FlaskJSONProvider +from connexion.jsonifier import JSONEncoder import six from .models.base_model_ import Model -class JSONEncoder(FlaskJSONProvider): + +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -17,4 +19,4 @@ class JSONEncoder(FlaskJSONProvider): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONProvider.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/util.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/util.py index 3cb4ecf..431a28c 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/util.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/util.py @@ -1,6 +1,6 @@ import datetime import six -import api_provider_management.typing_utils +import typing_utils def serialize_clean_camel_case(obj): diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/asgi.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/wsgi.py similarity index 100% rename from services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/asgi.py rename to services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/wsgi.py 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 cc96ae4..f4390ff 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh +++ b/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh @@ -16,6 +16,6 @@ curl -vv -k -retry 30 \ # --root-path /usr/src/app/api_provider_management asgi:app #uvicorn api_provider_management.asgi:app --host 0.0.0.0 --port 8080 --reload -gunicorn -k uvicorn.workers.UvicornWorker --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 -- GitLab From 07508e945617379e4d8da2fa76e1550dc7f8e9f9 Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Wed, 28 Aug 2024 14:17:32 +0300 Subject: [PATCH 6/9] Add content-type of application/merge-patch+json in Patch Request Capif test case --- tests/resources/common/basicRequests.robot | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/resources/common/basicRequests.robot b/tests/resources/common/basicRequests.robot index 2082c81..838086f 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 -- GitLab From 21f54c3d0151be8d5f20834ee314cc81d209cbfe Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Fri, 30 Aug 2024 12:22:20 +0300 Subject: [PATCH 7/9] Upgrade Provider, Invoker and Publish APIs to Flask 3, all corresponding tests pass --- .../api_invoker_management/app.py | 30 +++++++++++-------- .../api_invoker_management/config.py | 2 +- .../controllers/default_controller.py | 11 +++---- .../api_invoker_management/core/responses.py | 12 ++++---- .../core/validate_user.py | 4 +-- .../api_invoker_management/encoder.py | 9 +++--- .../api_invoker_management/util.py | 2 +- .../{asgi.py => wsgi.py} | 2 +- .../prepare_invoker.sh | 5 ++-- .../requirements.txt | 6 ++-- .../controllers/default_controller.py | 17 ++++------- ...i_provider_enrolment_details_controller.py | 5 ++-- .../api_provider_management/encoder.py | 2 -- .../requirements.txt | 15 +++++----- .../prepare_publish.sh | 2 +- .../published_apis/app.py | 15 ++++++++-- .../controllers/default_controller.py | 11 ++++--- .../published_apis/core/responses.py | 14 ++++----- .../published_apis/core/validate_user.py | 4 +-- .../published_apis/encoder.py | 6 ++-- .../requirements.txt | 13 ++++---- 21 files changed, 96 insertions(+), 91 deletions(-) rename services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/{asgi.py => wsgi.py} (66%) 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 c77126c..f6f1ad1 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 @@ -2,10 +2,10 @@ import connexion import logging -import api_invoker_management.encoder +import encoder from flask_jwt_extended import JWTManager, jwt_required, create_access_token -from .config import Config -from .core.consumer_messager import Subscriber +from config import Config +from core.consumer_messager import Subscriber from logging.handlers import RotatingFileHandler import os 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: pub_data = pub_file.read() -# app = connexion.App(__name__, specification_dir='./openapi/') -app = connexion.App(__name__) -app.app.json_encoder = api_invoker_management.encoder.JSONEncoder -# app.add_api('openapi.yaml', -# arguments={'title': 'CAPIF_API_Invoker_Management_API'}, -# pythonic_params=True) +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) app.app.config['JWT_ALGORITHM'] = 'RS256' app.app.config['JWT_PUBLIC_KEY'] = pub_data @@ -139,8 +138,15 @@ if monitoring_value == "true": executor = Executor(app.app) subscriber = Subscriber() +first = True -# @app.app.before_first_request +@app.app.before_request def create_listener_message(): - with app.app.app_context(): - 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/config.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/config.py index 11e1c4f..01f9914 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/config.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/config.py @@ -5,7 +5,7 @@ import os class Config: def __init__(self): self.cached = 0 - self.file="./config.yaml" + self.file="../config.yaml" self.my_config = {} stamp = os.stat(self.file).st_mtime 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 f2b0df6..866dd32 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/responses.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/responses.py index f647dbf..4fb2261 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 b1e7a9b..69760cf 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/encoder.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/encoder.py index 5413582..526f8b2 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,11 +1,10 @@ -# from connexion.apps.flask_app import FlaskJSONEncoder -from connexion.frameworks.flask import FlaskJSONProvider +from connexion.jsonifier import JSONEncoder import six -from .models.base_model_ import Model +from models.base_model_ import Model -class JSONEncoder(FlaskJSONProvider): +class CustomJSONEncoder(JSONEncoder): include_nulls = False def default(self, o): @@ -18,4 +17,4 @@ class JSONEncoder(FlaskJSONProvider): attr = o.attribute_map[attr] dikt[attr] = value return dikt - return FlaskJSONProvider.default(self, o) + return JSONEncoder.default(self, o) diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/util.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/util.py index 04137a6..31af7ab 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/util.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/util.py @@ -1,7 +1,7 @@ import datetime import six -import api_invoker_management.typing_utils +import typing_utils def serialize_clean_camel_case(obj): diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/asgi.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/wsgi.py similarity index 66% rename from services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/asgi.py rename to services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/wsgi.py index 6475d15..6026b0f 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/asgi.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/wsgi.py @@ -1,4 +1,4 @@ -from .app import app +from app import app if __name__ == "__main__": app.run() 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 b8add97..971ce33 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/prepare_invoker.sh +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/prepare_invoker.sh @@ -14,6 +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 -#uvicorn --host 0.0.0.0:8080 \ -# --root-path /usr/src/app/api_invoker_management asgi:app -uvicorn api_invoker_management.asgi:app --host 0.0.0.0 --port 8080 --reload \ 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 c8ac243..8d133ac 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt @@ -2,12 +2,12 @@ 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 == 3.0.3 +Flask[async] == 3.0.3 pymongo == 4.7.3 +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 @@ -20,5 +20,5 @@ opentelemetry-api == 1.19.0 opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 Werkzeug == 3.0.0 -uvicorn == 0.30.3 +gunicorn == 22.0.0 packaging == 24.0 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 400f915..3885faf 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 @@ -63,16 +63,9 @@ 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 - # if connexion.request.content_type == 'application/json': - # value = connexion.request.json() - # val = asyncio.run(value) - # current_app.logger.info(val) - # body = APIProviderEnrolmentDetails.from_dict(val) # noqa: E501 - - body = APIProviderEnrolmentDetails.from_dict(body) res = provider_management_ops.register_api_provider_enrolment_details(body, username, uuid) return res @@ -108,10 +101,10 @@ 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 - body = APIProviderEnrolmentDetails.from_dict(body) + 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) return res 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 353bd82..9533e38 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 @@ -26,10 +26,9 @@ 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 - body = APIProviderEnrolmentDetailsPatch.from_dict(body) res = provider_management_ops.update_api_provider_enrolment_details(registration_id, body) return res 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 44e1bfb..d40ce05 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,5 +1,3 @@ -# from connexion.apps.flask_app import FlaskJSONEncoder -# from connexion.frameworks.flask import FlaskJSONProvider from connexion.jsonifier import JSONEncoder import six diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt index c1413c8..3fb852b 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt @@ -8,17 +8,16 @@ redis == 4.5.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 == 3.0.0 gunicorn == 22.0.0 -uvicorn == 0.30.3 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 d0eed0b..8526fe8 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 dedd2b5..081ba0b 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/published_apis/app.py +++ b/services/TS29222_CAPIF_Publish_Service_API/published_apis/app.py @@ -116,7 +116,7 @@ def verbose_formatter(): app = connexion.App(__name__, specification_dir='./openapi/') -app.app.json_encoder = encoder.JSONEncoder +app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_Publish_Service_API'}, pythonic_params=True) @@ -135,7 +135,16 @@ 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 + + +# @app.app.before_first_request +# def up_listener(): +# executor.submit(subscriber.listen) 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 62e506a..8f1e5d0 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 3d10ff5..cc631b0 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 f484149..e73cf8a 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 80bad8f..526f8b2 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 0b1b9e8..9fe75b4 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/requirements.txt +++ b/services/TS29222_CAPIF_Publish_Service_API/requirements.txt @@ -1,10 +1,12 @@ -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 +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 @@ -16,9 +18,6 @@ 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.0 gunicorn == 22.0.0 packaging == 24.0 -- GitLab From 707ed40831eb4bad40c84b469469aa7f0434d01a Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Fri, 30 Aug 2024 15:34:22 +0300 Subject: [PATCH 8/9] ALL APIs upgraded to Flask 3, all tests passed --- .../requirements.txt | 4 +-- .../capif_acl/app.py | 4 +-- .../capif_acl/core/redis_event.py | 4 +-- .../capif_acl/core/responses.py | 12 +++---- .../capif_acl/encoder.py | 6 ++-- .../prepare_capif_acl.sh | 2 +- .../requirements.txt | 30 ++++++++-------- .../TS29222_CAPIF_Auditing_API/logs/app.py | 4 +-- .../logs/core/responses.py | 12 +++---- .../logs/encoder.py | 6 ++-- .../prepare_audit.sh | 2 +- .../requirements.txt | 26 +++++++------- .../prepare_discover.sh | 2 +- .../requirements.txt | 27 +++++++------- .../service_apis/app.py | 4 +-- .../service_apis/core/responses.py | 12 +++---- .../service_apis/encoder.py | 6 ++-- .../capif_events/app.py | 17 ++++++--- .../controllers/default_controller.py | 5 ++- .../capif_events/core/events_apis.py | 1 - .../capif_events/core/notifications.py | 4 +-- .../capif_events/core/responses.py | 12 +++---- .../capif_events/core/validate_user.py | 4 +-- .../capif_events/encoder.py | 6 ++-- .../prepare_events.sh | 2 +- .../TS29222_CAPIF_Events_API/requirements.txt | 36 +++++++++---------- .../api_invocation_logs/app.py | 4 +-- .../controllers/default_controller.py | 4 +-- .../core/invocationlogs.py | 4 +-- .../api_invocation_logs/core/redis_event.py | 4 +-- .../api_invocation_logs/core/responses.py | 14 ++++---- .../api_invocation_logs/core/validate_user.py | 4 +-- .../api_invocation_logs/encoder.py | 6 ++-- .../prepare_logging.sh | 2 +- .../requirements.txt | 26 +++++++------- .../published_apis/app.py | 7 +--- .../requirements.txt | 2 +- .../capif_routing_info/app.py | 4 +-- .../capif_routing_info/encoder.py | 6 ++-- .../prepare_routing_info.sh | 2 +- .../requirements.txt | 6 ++-- .../capif_security/app.py | 13 ++++--- .../controllers/default_controller.py | 16 ++++----- .../capif_security/core/redis_event.py | 4 +-- .../capif_security/core/responses.py | 14 ++++---- .../capif_security/core/validate_user.py | 4 +-- .../capif_security/encoder.py | 6 ++-- .../prepare_security.sh | 2 +- .../requirements.txt | 27 +++++++------- 49 files changed, 217 insertions(+), 214 deletions(-) diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt index 8d133ac..b6ad1cd 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt @@ -2,7 +2,7 @@ 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[async] == 3.0.3 +Flask == 3.0.3 pymongo == 4.7.3 redis == 4.5.4 flask_jwt_extended == 4.6.0 @@ -13,7 +13,7 @@ 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 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 59a0f90..183c081 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 40e3e40..6a6329d 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 9f8c3e6..4954412 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 80bad8f..526f8b2 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 fd0077f..42f12af 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 2e82931..20cec90 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 +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 f68880c..28b267e 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 89689a9..6287405 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 80bad8f..526f8b2 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 e47912b..6049f2e 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 c2ef0b4..0fd6fed 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 +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.0 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 dd9ad7d..dd3f361 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 1c57f79..b6ad1cd 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 +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.0 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 beec708..38988fd 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 b54555b..8836f99 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 80bad8f..526f8b2 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 d1d3de3..a4eb747 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 839f0b0..e982a77 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 14cddb0..fa459da 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 e005e7a..c9ac79e 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 89689a9..6287405 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 e7ddee1..937a167 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 80bad8f..526f8b2 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 62bd7ee..bf16c7f 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 22b0d35..be83464 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 +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.0 +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 bf76d0f..873a8a8 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 7ce9972..7a902dc 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 bae9c5a..d2ba9ea 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 aadbdbb..251fdf6 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 5c9803e..cc83d0f 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 d9f7d5d..129d834 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 80bad8f..526f8b2 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 4cd01a6..25c0c0e 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 e92ae36..10e78c3 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 +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.0 pyopenssl == 24.1.0 gunicorn == 22.0.0 packaging == 24.0 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 081ba0b..bb15517 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/published_apis/app.py +++ b/services/TS29222_CAPIF_Publish_Service_API/published_apis/app.py @@ -115,7 +115,7 @@ def verbose_formatter(): ) -app = connexion.App(__name__, specification_dir='./openapi/') +app = connexion.App(__name__, specification_dir='openapi/') app.app.json_encoder = encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_Publish_Service_API'}, @@ -143,8 +143,3 @@ def up_listener(): if first: executor.submit(subscriber.listen) first = False - - -# @app.app.before_first_request -# def up_listener(): -# executor.submit(subscriber.listen) diff --git a/services/TS29222_CAPIF_Publish_Service_API/requirements.txt b/services/TS29222_CAPIF_Publish_Service_API/requirements.txt index 9fe75b4..52992ca 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/requirements.txt +++ b/services/TS29222_CAPIF_Publish_Service_API/requirements.txt @@ -12,7 +12,7 @@ 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 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 8913580..8a81b61 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 80bad8f..526f8b2 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 53eaa2b..aa37163 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 afaac68..9240946 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 +Flask == 3.0.3 +Werkzeug == 3.0.0 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 4345700..07dc9ad 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 7e04d4d..22769f1 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 aadbdbb..251fdf6 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 4e1eb35..6f20418 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 04d893e..1098644 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 80bad8f..526f8b2 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 94bece0..86f10f2 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 b92f321..b6ad1cd 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 +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.0 gunicorn == 22.0.0 packaging == 24.0 -- GitLab From d5cbc2fa48ce997bb8c598879e27b6a563b9ffcb Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Mon, 2 Sep 2024 14:03:45 +0300 Subject: [PATCH 9/9] Resolve issues from MR review --- .../TS29222_CAPIF_API_Invoker_Management_API/requirements.txt | 4 ++-- .../api_provider_management/app.py | 2 -- .../prepare_provider.sh | 4 ---- .../requirements.txt | 4 ++-- .../TS29222_CAPIF_Access_Control_Policy_API/requirements.txt | 2 +- services/TS29222_CAPIF_Auditing_API/requirements.txt | 4 ++-- services/TS29222_CAPIF_Discover_Service_API/requirements.txt | 4 ++-- services/TS29222_CAPIF_Events_API/requirements.txt | 4 ++-- .../TS29222_CAPIF_Logging_API_Invocation_API/requirements.txt | 4 ++-- services/TS29222_CAPIF_Publish_Service_API/requirements.txt | 4 ++-- services/TS29222_CAPIF_Routing_Info_API/requirements.txt | 4 ++-- services/TS29222_CAPIF_Security_API/requirements.txt | 4 ++-- services/helper/requirements.txt | 2 +- services/register/requirements.txt | 2 +- 14 files changed, 21 insertions(+), 27 deletions(-) diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt index b6ad1cd..32a15be 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/requirements.txt @@ -1,7 +1,7 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 redis == 4.5.4 @@ -19,6 +19,6 @@ fluent-logger == 0.10.0 opentelemetry-api == 1.19.0 opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 3.0.0 +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 b5e85f3..95d2758 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 @@ -118,8 +118,6 @@ app.app.json_encoder = api_provider_management.encoder.CustomJSONEncoder app.add_api('openapi.yaml', arguments={'title': 'CAPIF_API_Provider_Management_API'}, pythonic_params=True) -# app.add_api('openapi.yaml') - config = Config() configure_logging(app.app) 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 f4390ff..27cd618 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh +++ b/services/TS29222_CAPIF_API_Provider_Management_API/prepare_provider.sh @@ -12,10 +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 -#uvicorn --host 0.0.0.0:8080 \ -# --root-path /usr/src/app/api_provider_management asgi:app -#uvicorn api_provider_management.asgi:app --host 0.0.0.0 --port 8080 --reload - 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 3fb852b..0b5ec10 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt +++ b/services/TS29222_CAPIF_API_Provider_Management_API/requirements.txt @@ -1,7 +1,7 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 redis == 4.5.4 @@ -18,6 +18,6 @@ fluent-logger == 0.10.0 opentelemetry-api == 1.19.0 opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 3.0.0 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Access_Control_Policy_API/requirements.txt b/services/TS29222_CAPIF_Access_Control_Policy_API/requirements.txt index 20cec90..e38f272 100644 --- a/services/TS29222_CAPIF_Access_Control_Policy_API/requirements.txt +++ b/services/TS29222_CAPIF_Access_Control_Policy_API/requirements.txt @@ -1,7 +1,7 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 redis == 4.5.4 diff --git a/services/TS29222_CAPIF_Auditing_API/requirements.txt b/services/TS29222_CAPIF_Auditing_API/requirements.txt index 0fd6fed..da3a4c5 100644 --- a/services/TS29222_CAPIF_Auditing_API/requirements.txt +++ b/services/TS29222_CAPIF_Auditing_API/requirements.txt @@ -1,7 +1,7 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 elasticsearch == 8.4.3 @@ -18,7 +18,7 @@ fluent-logger == 0.10.0 opentelemetry-api == 1.19.0 opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 3.0.0 +werkzeug == 3.0.4 pyopenssl == 24.1.0 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Discover_Service_API/requirements.txt b/services/TS29222_CAPIF_Discover_Service_API/requirements.txt index b6ad1cd..32a15be 100644 --- a/services/TS29222_CAPIF_Discover_Service_API/requirements.txt +++ b/services/TS29222_CAPIF_Discover_Service_API/requirements.txt @@ -1,7 +1,7 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 redis == 4.5.4 @@ -19,6 +19,6 @@ fluent-logger == 0.10.0 opentelemetry-api == 1.19.0 opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 3.0.0 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Events_API/requirements.txt b/services/TS29222_CAPIF_Events_API/requirements.txt index be83464..fbeaae3 100644 --- a/services/TS29222_CAPIF_Events_API/requirements.txt +++ b/services/TS29222_CAPIF_Events_API/requirements.txt @@ -1,7 +1,7 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 redis == 4.5.4 @@ -22,7 +22,7 @@ flask_executor == 1.0.0 Flask-APScheduler == 1.13.1 aiohttp == 3.10.5 async-timeout == 4.0.3 -Werkzeug == 3.0.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/requirements.txt b/services/TS29222_CAPIF_Logging_API_Invocation_API/requirements.txt index 10e78c3..e564080 100644 --- a/services/TS29222_CAPIF_Logging_API_Invocation_API/requirements.txt +++ b/services/TS29222_CAPIF_Logging_API_Invocation_API/requirements.txt @@ -1,7 +1,7 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 elasticsearch == 8.4.3 @@ -19,7 +19,7 @@ fluent-logger == 0.10.0 opentelemetry-api == 1.19.0 opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 3.0.0 +werkzeug == 3.0.4 pyopenssl == 24.1.0 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Publish_Service_API/requirements.txt b/services/TS29222_CAPIF_Publish_Service_API/requirements.txt index 52992ca..f499677 100644 --- a/services/TS29222_CAPIF_Publish_Service_API/requirements.txt +++ b/services/TS29222_CAPIF_Publish_Service_API/requirements.txt @@ -1,7 +1,7 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 redis == 4.5.4 @@ -18,6 +18,6 @@ fluent-logger == 0.10.0 opentelemetry-api == 1.17.0 opentelemetry-sdk == 1.17.0 flask_executor == 1.0.0 -Werkzeug == 3.0.0 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Routing_Info_API/requirements.txt b/services/TS29222_CAPIF_Routing_Info_API/requirements.txt index 9240946..0ecdd1f 100644 --- a/services/TS29222_CAPIF_Routing_Info_API/requirements.txt +++ b/services/TS29222_CAPIF_Routing_Info_API/requirements.txt @@ -1,8 +1,8 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 -Werkzeug == 3.0.0 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/TS29222_CAPIF_Security_API/requirements.txt b/services/TS29222_CAPIF_Security_API/requirements.txt index b6ad1cd..32a15be 100644 --- a/services/TS29222_CAPIF_Security_API/requirements.txt +++ b/services/TS29222_CAPIF_Security_API/requirements.txt @@ -1,7 +1,7 @@ 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 +setuptools == 74.0.0 Flask == 3.0.3 pymongo == 4.7.3 redis == 4.5.4 @@ -19,6 +19,6 @@ fluent-logger == 0.10.0 opentelemetry-api == 1.19.0 opentelemetry-sdk == 1.19.0 flask_executor == 1.0.0 -Werkzeug == 3.0.0 +werkzeug == 3.0.4 gunicorn == 22.0.0 packaging == 24.0 diff --git a/services/helper/requirements.txt b/services/helper/requirements.txt index 23c2931..48b0fba 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 bf3e52c..1c1cb21 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 -- GitLab