From 0cf0c4f57fc44ed475b469eb7ffa4e76c9f47209 Mon Sep 17 00:00:00 2001 From: Sujata Date: Thu, 4 Jul 2024 12:12:09 +0530 Subject: [PATCH 1/4] Fixed Task 1078 - Fixed Task [1078](https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/1078) - Updated python package - max_errors can be passed as a parameter to validate function - Added unit test cases --- requirements.txt | 2 +- src/validation.py | 8 ++--- tests/unit_tests/test_validation.py | 48 +++++++++++++++++++++++------ 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2e81635..d9ed8bf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,4 @@ uvicorn==0.20.0 coverage==7.2.7 html_testRunner==1.2.1 httpx==0.24.1 -python-osw-validation==0.2.1 \ No newline at end of file +python-osw-validation==0.2.2 \ No newline at end of file diff --git a/src/validation.py b/src/validation.py index 9ef6a5a..dfc3e45 100644 --- a/src/validation.py +++ b/src/validation.py @@ -26,10 +26,10 @@ def __init__(self, file_path=None, storage_client=None): self.file_relative_path = file_path.split('/')[-1] self.client = self.storage_client.get_container(container_name=self.container_name) - def validate(self) -> ValidationResult: - return self.is_osw_valid() + def validate(self, max_errors=20) -> ValidationResult: + return self.is_osw_valid(max_errors) - def is_osw_valid(self) -> ValidationResult: + def is_osw_valid(self, max_errors) -> ValidationResult: result = ValidationResult() result.is_valid = False result.validation_message = '' @@ -38,7 +38,7 @@ def is_osw_valid(self) -> ValidationResult: downloaded_file_path = self.download_single_file(self.file_path) logger.info(f' Downloaded file path: {downloaded_file_path}') validator = OSWValidation(zipfile_path=downloaded_file_path) - validation_result = validator.validate() + validation_result = validator.validate(max_errors) result.is_valid = validation_result.is_valid if not result.is_valid: result.validation_message = validation_result.errors diff --git a/tests/unit_tests/test_validation.py b/tests/unit_tests/test_validation.py index b469969..e70e872 100644 --- a/tests/unit_tests/test_validation.py +++ b/tests/unit_tests/test_validation.py @@ -131,6 +131,36 @@ def test_validate_with_invalid_file(self): self.assertFalse(result.is_valid) self.assertIsInstance(result.validation_message, list) + def test_validate_with_invalid_file_with_default_error_counts(self): + # Arrange + file_path = f'{SAVED_FILE_PATH}/{FAILURE_FILE_NAME}' + expected_downloaded_file_path = file_path + self.validator.download_single_file = MagicMock(return_value=expected_downloaded_file_path) + Validation.clean_up = MagicMock() + + # Act + result = self.validator.validate() + + # Assert + self.assertFalse(result.is_valid) + self.assertIsInstance(result.validation_message, list) + self.assertLessEqual(len(result.validation_message), 20) + + def test_validate_with_invalid_file_with_specific_error_counts(self): + # Arrange + file_path = f'{SAVED_FILE_PATH}/{FAILURE_FILE_NAME}' + expected_downloaded_file_path = file_path + self.validator.download_single_file = MagicMock(return_value=expected_downloaded_file_path) + Validation.clean_up = MagicMock() + + # Act + result = self.validator.validate(max_errors=10) + + # Assert + self.assertFalse(result.is_valid) + self.assertIsInstance(result.validation_message, list) + self.assertLessEqual(len(result.validation_message), 10) + def test_is_osw_valid_with_invalid_zip_file(self): # Arrange file_path = f'{SAVED_FILE_PATH}/{FAILURE_FILE_NAME}' @@ -184,7 +214,7 @@ def test_is_osw_valid_with_id_missing_zip(self): Validation.clean_up = MagicMock() # Act - result = self.validator.is_osw_valid() + result = self.validator.is_osw_valid(max_errors=2) # Assert self.assertFalse(result.is_valid) @@ -214,7 +244,7 @@ def test_is_osw_valid_with_invalid_edges_zip(self): Validation.clean_up = MagicMock() # Act - result = self.validator.is_osw_valid() + result = self.validator.is_osw_valid(max_errors=2) # Assert self.assertFalse(result.is_valid) @@ -244,7 +274,7 @@ def test_is_osw_valid_with_invalid_nodes_zip(self): Validation.clean_up = MagicMock() # Act - result = self.validator.is_osw_valid() + result = self.validator.is_osw_valid(max_errors=2) # Assert self.assertFalse(result.is_valid) @@ -274,7 +304,7 @@ def test_is_osw_valid_with_invalid_points_zip(self): Validation.clean_up = MagicMock() # Act - result = self.validator.is_osw_valid() + result = self.validator.is_osw_valid(max_errors=2) # Assert self.assertFalse(result.is_valid) @@ -304,7 +334,7 @@ def test_is_osw_valid_with_invalid_files_zip(self): Validation.clean_up = MagicMock() # Act - result = self.validator.is_osw_valid() + result = self.validator.is_osw_valid(max_errors=2) # Assert self.assertFalse(result.is_valid) @@ -334,7 +364,7 @@ def test_is_osw_valid_with_invalid_geometry_zip(self): Validation.clean_up = MagicMock() # Act - result = self.validator.is_osw_valid() + result = self.validator.is_osw_valid(max_errors=2) # Assert self.assertFalse(result.is_valid) @@ -364,7 +394,7 @@ def test_is_osw_valid_with_missing_identifier_zip(self): Validation.clean_up = MagicMock() # Act - result = self.validator.is_osw_valid() + result = self.validator.is_osw_valid(max_errors=2) # Assert self.assertFalse(result.is_valid) @@ -394,7 +424,7 @@ def test_is_osw_valid_with_no_entity_zip(self): Validation.clean_up = MagicMock() # Act - result = self.validator.is_osw_valid() + result = self.validator.is_osw_valid(max_errors=2) # Assert self.assertFalse(result.is_valid) @@ -424,7 +454,7 @@ def test_is_osw_valid_with_wring_datatype_zip(self): Validation.clean_up = MagicMock() # Act - result = self.validator.is_osw_valid() + result = self.validator.is_osw_valid(max_errors=2) # Assert self.assertFalse(result.is_valid) From d52c582547b32d3bc307acb434e26f2f798d35b5 Mon Sep 17 00:00:00 2001 From: Sujata Date: Thu, 4 Jul 2024 12:19:16 +0530 Subject: [PATCH 2/4] Fixed unit tests --- .github/workflows/unit_tests.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/unit_tests.yaml b/.github/workflows/unit_tests.yaml index dbce725..92d59b8 100644 --- a/.github/workflows/unit_tests.yaml +++ b/.github/workflows/unit_tests.yaml @@ -32,7 +32,6 @@ jobs: - name: Install dependencies run: | pip install -r requirements.txt - pip install -i https://test.pypi.org/simple/ python-osw-validation==0.0.3 - name: Run unit tests run: | From 5a304d917f73e07d7a0bd70233eab16b436ee635 Mon Sep 17 00:00:00 2001 From: Sujata Date: Fri, 5 Jul 2024 20:46:11 +0530 Subject: [PATCH 3/4] Updated python-osw-validation version --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d9ed8bf..73cac28 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,4 @@ uvicorn==0.20.0 coverage==7.2.7 html_testRunner==1.2.1 httpx==0.24.1 -python-osw-validation==0.2.2 \ No newline at end of file +python-osw-validation==0.2.3 \ No newline at end of file From c468ab19510910b8d093e0618e8a5f4c3dc233b2 Mon Sep 17 00:00:00 2001 From: pramodbontha <58882551+pramodbontha@users.noreply.github.com> Date: Sat, 3 Aug 2024 13:35:38 +0200 Subject: [PATCH 4/4] Created prod workflow (#23) --- .github/workflows/prod_workflow.yaml | 43 ++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/prod_workflow.yaml diff --git a/.github/workflows/prod_workflow.yaml b/.github/workflows/prod_workflow.yaml new file mode 100644 index 0000000..7673784 --- /dev/null +++ b/.github/workflows/prod_workflow.yaml @@ -0,0 +1,43 @@ +--- +######### Prod Workflow ######## +on: + pull_request: + branches: [main] + types: + - closed + workflow_dispatch: +permissions: + id-token: write + contents: read + +jobs: + Build: + environment: Production + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true + steps: + - uses: actions/checkout@v2 + - uses: azure/docker-login@v1 + with: + login-server: ${{ secrets.REGISTRY_DOMAIN }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} + - name: Publish image to Azure Registry + run: | + docker build -t ${{ secrets.REGISTRY_DOMAIN }}/${{ secrets.REGISTRY_REPO }}:${{ github.sha }} -t ${{ secrets.REGISTRY_DOMAIN }}/${{ secrets.REGISTRY_REPO }}:${{ github.ref_name == 'master' && 'prod' || github.ref_name }}${{ github.ref_name != 'master' && '-latest' || 'latest' }} . + docker push ${{ secrets.REGISTRY_DOMAIN }}/${{ secrets.REGISTRY_REPO }} --all-tags + Deploy: + needs: Build + environment: + name: Production + runs-on: ubuntu-latest + steps: + - name: Login to Azure + uses: azure/login@v2.0.0 + with: + creds: ${{secrets.TDEI_CORE_AZURE_CREDS}} + - name: Deploy to Production + uses: azure/webapps-deploy@v2 + with: + app-name: ${{ secrets.AZURE_WEBAPP_NAME }} + images: ${{ secrets.REGISTRY_DOMAIN }}/${{ secrets.REGISTRY_REPO }}:${{ github.sha }}.