diff --git a/ci_cd_test/Dockerfile b/ci_cd_test/Dockerfile index 2d1fe73d123832ea1d40e78a4cddb7ab5e369bad..5f2496be9172ff655cfc56759291e4f1e686edf9 100644 --- a/ci_cd_test/Dockerfile +++ b/ci_cd_test/Dockerfile @@ -1,27 +1,27 @@ FROM labs.etsi.org:5050/ocf/capif/python:3-slim-bullseye -RUN apt update +# Update package index and install required tools RUN apt update && apt install -y git nano && \ rm -rf /var/lib/apt/lists/* -ARG BRANCH=main - -RUN echo "Cloning branch: ${BRANCH}" && \ - git clone -b ${BRANCH} https://labs.etsi.org/rep/ocf/sdk.git - WORKDIR /sdk +# Copy project files into the container +COPY .. . + +# Install Python dependencies RUN python -m pip install --upgrade pip RUN pip install -r installation/requirements.txt RUN pip install . +# Define entrypoint: run provider first, then invoker ENTRYPOINT sh -c '\ set -e && \ - echo "๐Ÿš€ Ejecutando provider..." && \ + echo "๐Ÿš€ Starting provider execution..." && \ cd ci_cd_test/testing_samples/testing_provider_sample && \ python testing_provider.py && \ - echo "โœ… Provider finalizado." && \ - echo "๐Ÿš€ Ejecutando invoker..." && \ + echo "โœ… Provider execution finished." && \ + echo "๐Ÿš€ Starting invoker execution..." && \ cd ../testing_invoker_sample && \ python network_app_invoker.py && \ - echo "โœ… Invoker finalizado."' \ No newline at end of file + echo "โœ… Invoker execution finished."' \ No newline at end of file diff --git a/clean_test_sdk.sh b/ci_cd_test/clean_test_sdk.sh similarity index 90% rename from clean_test_sdk.sh rename to ci_cd_test/clean_test_sdk.sh index 382dbbb1d6a14679e9fe4a7e81f28748887999e7..67555f0b91146390636cbd88ff6121510635c04c 100755 --- a/clean_test_sdk.sh +++ b/ci_cd_test/clean_test_sdk.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Nombre del contenedor e imagen +# Name of container image CONTAINER_NAME=capif-sdk-runner IMAGE_NAME=opencapif_sdk diff --git a/test_sdk.sh b/ci_cd_test/test_sdk.sh similarity index 52% rename from test_sdk.sh rename to ci_cd_test/test_sdk.sh index 3452e076089abcd6efad65d973712ed46f8f9aff..860a8699c39aa0ab1f7dfc2eb4398944a47851c8 100755 --- a/test_sdk.sh +++ b/ci_cd_test/test_sdk.sh @@ -1,19 +1,22 @@ #!/bin/bash -# Nombre del contenedor e imagen +# Name of container image CONTAINER_NAME=capif-sdk-runner IMAGE_NAME=opencapif_sdk -BRANCH_NAME=SDK15-create-dockerfile-image-with-sdk +BRANCH_NAME=${CI_COMMIT_REF_NAME} NETWORK_NAME=capif-network +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" + echo "๐Ÿ› ๏ธ Building image: $IMAGE_NAME from branch: $BRANCH_NAME with no cache..." -docker build --no-cache . -t $IMAGE_NAME -f ci_cd_test/Dockerfile --build-arg BRANCH=$BRANCH_NAME +docker build --no-cache "$PROJECT_ROOT" -t $IMAGE_NAME -f "$SCRIPT_DIR/Dockerfile" --build-arg BRANCH=$BRANCH_NAME echo "๐Ÿš€ Running container: $CONTAINER_NAME in network: $NETWORK_NAME..." docker run \ + --rm \ --name $CONTAINER_NAME \ --network $NETWORK_NAME \ $IMAGE_NAME -echo "End" - +echo "โœ… End of script" \ No newline at end of file diff --git a/cicd/exclusions b/cicd/exclusions new file mode 100644 index 0000000000000000000000000000000000000000..78753ab4c5eb4bde5e6b8da499c229d81780c587 --- /dev/null +++ b/cicd/exclusions @@ -0,0 +1,4 @@ +doc/ +.git/ +network_app_samples/ +ci_cd_test/ \ No newline at end of file diff --git a/cicd/ruff.toml b/cicd/ruff.toml new file mode 100644 index 0000000000000000000000000000000000000000..a75ab1273cc0453c0eb60da23f839e213510ae0f --- /dev/null +++ b/cicd/ruff.toml @@ -0,0 +1,3 @@ +line-length = 120 +target-version = "py39" +lint.select = ["E", "W"] \ No newline at end of file diff --git a/installation/requirements.txt b/installation/requirements.txt index 416b0d8a86ea9611aa47aa177d13eabe0d77ff34..8ea624beb20478a1d14a60783af2efab73075e9e 100644 --- a/installation/requirements.txt +++ b/installation/requirements.txt @@ -1,24 +1,33 @@ -requests==2.32.3 -PyYAML==6.0.1 -cryptography==38.0.4 -pyOpenSSL==22.1.0 -urllib3==2.2.2 -certifi==2024.7.4 -idna==3.7 -Flask==3.0.3 -Flask-JWT-Extended==4.6.0 -Jinja2==3.1.4 -MarkupSafe==2.1.5 -six==1.16.0 -typing-extensions==3.10.0.2 -Werkzeug==3.0.4 -pytest==8.3.2 -flake8==3.9.2 -coverage==4.5.4 -mccabe==0.6.1 -pycodestyle==2.7.0 -pyflakes==2.3.1 -python-dateutil==2.9.0.post0 +# --- Core web --- +Flask>=3.1.2,<4 +Werkzeug>=3.1.2,<4 +Jinja2>=3.1.4,<4 +MarkupSafe>=2.1.5,<4 + +# --- Auth/JWT --- +Flask-JWT-Extended>=4.6.0,<5 + +# --- HTTP stack --- +requests>=2.32.3,<3 +urllib3>=2.2.2,<3 +certifi>=2024.7.4 +idna>=3.7,<4 + +# --- YAML --- +PyYAML>=6.0.1,<7 + +# --- Crypto/TLS --- +cryptography>=43.0.1,<46 +pyOpenSSL>=25.1.0,<26 + +# --- Utilities --- +python-dateutil>=2.9.0.post0,<3 +six>=1.16.0,<2 +typing-extensions>=4.12.0,<5; python_version<"3.11" + +# --- Dev / QA --- +pytest>=8.3.2,<9 +coverage>=7.4.0,<8 +flake8>=7.1.0,<8 +binaryornot>=0.4.4,<0.5 jinja2-time==0.2.0 -text-unidecode==1.3 -binaryornot==0.4.4 diff --git a/opencapif_sdk/capif_invoker_connector.py b/opencapif_sdk/capif_invoker_connector.py index e973a697d75628dd0f0b576b95b926d39caeb8c7..fa5e94ea6d4f184be8905f166efcbe3b9288384a 100644 --- a/opencapif_sdk/capif_invoker_connector.py +++ b/opencapif_sdk/capif_invoker_connector.py @@ -219,6 +219,7 @@ class capif_invoker_connector: url, cert=(self.signed_key_crt_path, self.private_key_path), verify=self.pathca, + timeout=10, ) response.raise_for_status() self.logger.info("Invoker offboarded successfully") @@ -305,7 +306,8 @@ class capif_invoker_connector: headers={"Content-Type": "application/json"}, auth=HTTPBasicAuth(self.capif_username, self.capif_invoker_password), - verify=False, + verify=True, + timeout=10, ) response.raise_for_status() @@ -350,6 +352,7 @@ class capif_invoker_connector: headers=headers, data=payload, verify=self.pathca, + timeout=10, ) response.raise_for_status() response_payload = json.loads(response.text) @@ -455,6 +458,7 @@ class capif_invoker_connector: data=payload, cert=(self.signed_key_crt_path, self.private_key_path), verify=self.pathca, + timeout=10, ) response.raise_for_status() diff --git a/opencapif_sdk/service_discoverer.py b/opencapif_sdk/service_discoverer.py index a000142ef903aad064396fd3558dcc36ce2da471..c20ad02e7c6aed8af0c2f6150f53af4e6ad93c1b 100644 --- a/opencapif_sdk/service_discoverer.py +++ b/opencapif_sdk/service_discoverer.py @@ -525,7 +525,8 @@ class service_discoverer: "POST", url, headers=headers, - json=payload + json=payload, + timeout=10 ) response.raise_for_status() diff --git a/scripts/deregister_and_login.py b/scripts/deregister_and_login.py index d44d914cf9e2ee8a842a9be027f050e8065838a3..dd1669804382d3269b88eba27e145c2bab5f9c44 100644 --- a/scripts/deregister_and_login.py +++ b/scripts/deregister_and_login.py @@ -39,6 +39,7 @@ def __log_to_capif(variables): headers={"Content-Type": "application/json"}, auth=HTTPBasicAuth(variables["capif_register_username"], variables["capif_register_password"]), verify=False, + timeout=10, ) response.raise_for_status() response_payload = json.loads(response.text) @@ -64,7 +65,8 @@ def de_register_from_capif(admin_token, variables): url, headers=headers, data=None, - verify=False + verify=False, + timeout=10 ) response.raise_for_status() logger.info("User deleted") diff --git a/scripts/register_and_login.py b/scripts/register_and_login.py index 76646b7f331afac2b5bff5d86441786517450c6f..7fd63c1a04fba85c460e10d625cea9dd4c9f0949 100644 --- a/scripts/register_and_login.py +++ b/scripts/register_and_login.py @@ -35,6 +35,7 @@ def __log_to_capif(variables): headers={"Content-Type": "application/json"}, auth=HTTPBasicAuth(variables["capif_register_username"], variables["capif_register_password"]), verify=False, + timeout=10, ) response.raise_for_status() response_payload = json.loads(response.text) @@ -64,7 +65,7 @@ def __create_user(admin_token, variables): } response = requests.request( - "POST", url, headers=headers, data=json.dumps(payload), verify=False + "POST", url, headers=headers, data=json.dumps(payload), verify=False, timeout=10 ) response.raise_for_status() response_payload = json.loads(response.text) diff --git a/setup.py b/setup.py index fe14cdf2867a9acd527c6e1f23d229c23092f04e..c5eb6b22762657544b9cd0eac4aba4b363c8165c 100644 --- a/setup.py +++ b/setup.py @@ -7,9 +7,9 @@ with open(os.path.join(this_directory, "README_pipy.md"), encoding="utf-8") as f setup( name="opencapif_sdk", - version="0.1.21", - author="JorgeEcheva, dgs-cgm", - author_email="jorge.echevarriauribarri.practicas@telefonica.com, daniel.garciasanchez@telefonica.com", + version="0.1.22", + author="Guillermo Sanz Lรณpez. Miguel รngel Adorna Ruiz", + author_email="guillermo.sanzlopez@telefonica.com, miguelangel.adornaruiz@telefonica.com", description=( "This repository develops a Python Software Development Kit(SDK) which focuses on " "connecting to OpenCAPIF (Common API Framework for 3GPP Northbound APIs) in a simple way, " @@ -28,30 +28,35 @@ setup( ], packages=find_packages(include=["opencapif_sdk", "opencapif_sdk.*"]), # Ajusta segรบn tus necesidades install_requires=[ - "requests==2.32.3", - "PyYAML==6.0.1", - "cryptography==38.0.4", - "pyOpenSSL==22.1.0", - "urllib3==2.2.2", - "certifi==2024.7.4", - "idna==3.7", - "Flask==3.0.3", - "Flask-JWT-Extended==4.6.0", - "Jinja2==3.1.4", - "MarkupSafe==2.1.5", - "six==1.16.0", - "typing-extensions>=4.8.0", - "Werkzeug==3.0.4", - "pytest==8.3.2", - "flake8==3.9.2", - "coverage==4.5.4", - "mccabe==0.6.1", - "pycodestyle==2.7.0", - "pyflakes==2.3.1", - "python-dateutil==2.9.0.post0", - "jinja2-time==0.2.0", - "text-unidecode==1.3", - "binaryornot==0.4.4", + "Flask>=3.1.2,<4", + "Werkzeug>=3.1.2,<4", + "Jinja2>=3.1.4,<4", + "MarkupSafe>=2.1.5,<4", + "Flask-JWT-Extended>=4.6.0,<5", + "requests>=2.32.3,<3", + "urllib3>=2.2.2,<3", + "certifi>=2024.7.4", + "idna>=3.7,<4", + "PyYAML>=6.0.1,<7", + "cryptography>=43.0.1,<46", + "pyOpenSSL>=25.1.0,<26", + "python-dateutil>=2.9.0.post0,<3", + "six>=1.16.0,<2", + 'typing-extensions>=4.12.0,<5; python_version<"3.11"', + "connexion[flask]>=3.0.0,<4", + "text-unidecode>=1.3,<2", ], - url="https://github.com/Telefonica/pesp_capif_sdk", + extras_require={ + "dev": [ + "pytest>=8.3.2,<9", + "coverage>=7.4.0,<8", + "flake8>=7.1.0,<8", + "jinja2-time==0.2.0", + "binaryornot>=0.4.4,<0.5", + "pycodestyle>=2.14,<2.15", + "pyflakes>=3.4,<3.5", + "mccabe>=0.7,<0.8", + ], + }, + url="https://labs.etsi.org/rep/ocf/sdk", )