From 1593e14832c8e5272ea0d4037da789f2edca6f5c Mon Sep 17 00:00:00 2001 From: Anuj Date: Thu, 6 Aug 2026 15:30:28 +0530 Subject: [PATCH] Add support for python-osw-validation 0.5.0 Summary: - Upgrade `python-osw-validation` from `0.4.5` to `0.5.0`. - Remove the obsolete `warning` field from validation results and outgoing messages. - Update documentation and sample payloads. - Adjust tests for the new response contract. - Verify all 59 unit tests pass on Python 3.11. --- README.md | 3 +-- requirements.txt | 2 +- src/assets/osw-validation.json | 3 +-- src/models/queue_message_content.py | 3 +-- src/osw_validator.py | 2 -- src/validation.py | 1 - tests/unit_tests/models/test_queue_message_content.py | 2 +- tests/unit_tests/test_service.py | 11 +++-------- tests/unit_tests/test_validation.py | 8 ++------ 9 files changed, 10 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index dcde238..7b69d8f 100644 --- a/README.md +++ b/README.md @@ -100,8 +100,7 @@ Follow the steps to install the python packages required for both building and r "user_id": "user_id", "tdei_project_group_id": "tdei_project_group_id", "success": true/false, - "message": "message", // if false the error string else empty string - "warning": "warning" // non-blocking validation warning else empty string + "message": "message" // if false the error string else empty string }, "publishedDate": "published date" } diff --git a/requirements.txt b/requirements.txt index b0038db..481ba03 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,4 @@ python-ms-core==0.0.25 uvicorn==0.20.0 html_testRunner==1.2.1 geopandas==0.14.4 -python-osw-validation==0.4.5 +python-osw-validation==0.5.0 diff --git a/src/assets/osw-validation.json b/src/assets/osw-validation.json index 4b997b4..78ea6a3 100644 --- a/src/assets/osw-validation.json +++ b/src/assets/osw-validation.json @@ -6,7 +6,6 @@ "user_id": "c59d29b6-a063-4249-943f-d320d15ac9ab", "tdei_project_group_id": "0b41ebc5-350c-42d3-90af-3af4ad3628fb", "success": true, - "message": "", - "warning": "" + "message": "" } } diff --git a/src/models/queue_message_content.py b/src/models/queue_message_content.py index e1d7ed4..56ece18 100644 --- a/src/models/queue_message_content.py +++ b/src/models/queue_message_content.py @@ -2,10 +2,9 @@ class ValidationResult: - def __init__(self, is_valid: bool = False, validation_message: str = '', warning: str = ''): + def __init__(self, is_valid: bool = False, validation_message: str = ''): self.is_valid = is_valid self.validation_message = validation_message - self.warning = warning or '' class Upload: diff --git a/src/osw_validator.py b/src/osw_validator.py index 7d1401f..6b8397e 100644 --- a/src/osw_validator.py +++ b/src/osw_validator.py @@ -85,7 +85,6 @@ def validate(self, received_message: Upload): result = ValidationResult() result.is_valid = False result.validation_message = f'Error occurred while validating OSW request {e}' - result.warning = '' self.send_status(result=result, upload_message=received_message) status_sent = True finally: @@ -98,7 +97,6 @@ def send_status(self, result: ValidationResult, upload_message: Upload): upload_message.data.success = result.is_valid upload_message.data.message = result.validation_message resp_data = upload_message.data.to_json() - resp_data['warning'] = result.warning resp_data['package'] = { 'python-ms-core': Core.__version__, 'python-osw-validation': python_osw_validation.__version__ diff --git a/src/validation.py b/src/validation.py index 5cd21e9..0a06035 100644 --- a/src/validation.py +++ b/src/validation.py @@ -59,7 +59,6 @@ def is_osw_valid(self, max_errors) -> ValidationResult: validator = OSWValidation(zipfile_path=downloaded_file_path, config=self.validation_config) validation_result = validator.validate(max_errors) result.is_valid = validation_result.is_valid - result.warning = validation_result.warnings if not result.is_valid: result.validation_message = json.dumps(validation_result.issues) logger.error(f' Error While Validating File: {json.dumps(validation_result.issues)}') diff --git a/tests/unit_tests/models/test_queue_message_content.py b/tests/unit_tests/models/test_queue_message_content.py index 330f11b..cd45283 100644 --- a/tests/unit_tests/models/test_queue_message_content.py +++ b/tests/unit_tests/models/test_queue_message_content.py @@ -92,7 +92,7 @@ def test_validation_result_init(self): result.validation_message = 'Validated' self.assertTrue(result.is_valid) self.assertEqual(result.validation_message, 'Validated') - self.assertEqual(result.warning, '') + self.assertFalse(hasattr(result, 'warning')) if __name__ == '__main__': diff --git a/tests/unit_tests/test_service.py b/tests/unit_tests/test_service.py index 5ac08db..69770c5 100644 --- a/tests/unit_tests/test_service.py +++ b/tests/unit_tests/test_service.py @@ -263,7 +263,6 @@ def test_send_status_success(self): validation_result = ValidationResult() validation_result.is_valid = True validation_result.validation_message = '' - validation_result.warning = 'Coordinate precision exceeds 7 decimal places.' mock_message = Upload(data={ 'data': { @@ -283,12 +282,8 @@ def test_send_status_success(self): mock_publish.assert_called_once() @patch('src.osw_validator.QueueMessage') - def test_send_status_includes_warning_in_response(self, mock_queue_message): - validation_result = ValidationResult( - is_valid=True, - validation_message='', - warning='Coordinate precision exceeds 7 decimal places.' - ) + def test_send_status_excludes_warning_from_response(self, mock_queue_message): + validation_result = ValidationResult(is_valid=True, validation_message='') mock_message = Upload(data={ 'data': { 'user_id': '1233', @@ -302,7 +297,7 @@ def test_send_status_includes_warning_in_response(self, mock_queue_message): self.service.send_status(result=validation_result, upload_message=mock_message) response_payload = mock_queue_message.data_from.call_args[0][0] - self.assertEqual(response_payload['data']['warning'], validation_result.warning) + self.assertNotIn('warning', response_payload['data']) def test_send_status_failure(self): validation_result = ValidationResult() diff --git a/tests/unit_tests/test_validation.py b/tests/unit_tests/test_validation.py index 126660f..d87ff7a 100644 --- a/tests/unit_tests/test_validation.py +++ b/tests/unit_tests/test_validation.py @@ -71,26 +71,22 @@ def test_validate_valid_zip(self, mock_download_file, mock_clean_up): @patch('src.validation.OSWValidation') @patch('src.validation.Validation.clean_up') @patch('src.validation.Validation.download_single_file') - def test_validate_includes_warning(self, mock_download_file, mock_clean_up, mock_osw_validation): - """Test the validate method includes warnings from the OSW validator.""" - expected_warning = 'Coordinate precision exceeds 7 decimal places.' + def test_validate_passes_validation_config(self, mock_download_file, mock_clean_up, mock_osw_validation): + """Test that configured validation limits are passed to the OSW validator.""" mock_download_file.return_value = f'{SAVED_FILE_PATH}/{SUCCESS_FILE_NAME}' mock_validation_result = MagicMock() mock_validation_result.is_valid = True - mock_validation_result.warnings = expected_warning mock_osw_validation.return_value.validate.return_value = mock_validation_result result = self.validation.validate(max_errors=10) self.assertTrue(result.is_valid) - self.assertEqual(result.warning, expected_warning) config = mock_osw_validation.call_args[1]['config'] self.assertEqual(config.max_geometry_vertices, 2000) self.assertEqual(config.coordinate_precision, 7) self.assertFalse(config.allow_zero_length_lines) self.assertEqual(mock_clean_up.call_count, 2) - @patch('src.validation.Validation.clean_up') @patch('src.validation.Validation.download_single_file') def test_validate_invalid_file(self, mock_download_file, mock_clean_up):