Skip to content

Commit 559d511

Browse files
committed
This commit contains following changes -
1. Added schema path as an options parameter 2. Added examples in example.py file 3. Added unit test cases for valid schema and invalid schema 4. Updated Readme file
1 parent 7fe50de commit 559d511

File tree

4 files changed

+143
-15
lines changed

4 files changed

+143
-15
lines changed

README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,30 @@ test_invalid_missing_files_directory (test_extracted_data_validator.TestExtracte
6565
test_invalid_missing_required_files_directory (test_extracted_data_validator.TestExtractedDataValidator) ... ok
6666
test_valid_directory_structure (test_extracted_data_validator.TestExtractedDataValidator) ... ok
6767
test_edges_invalid_zipfile (test_osw_validation.TestOSWValidation) ... ok
68+
test_edges_invalid_zipfile_with_invalid_schema (test_osw_validation.TestOSWValidation) ... ok
69+
test_edges_invalid_zipfile_with_schema (test_osw_validation.TestOSWValidation) ... ok
6870
test_invalid_zipfile (test_osw_validation.TestOSWValidation) ... ok
71+
test_invalid_zipfile_with_invalid_schema (test_osw_validation.TestOSWValidation) ... ok
72+
test_invalid_zipfile_with_schema (test_osw_validation.TestOSWValidation) ... ok
6973
test_missing_files_inside_zipfile (test_osw_validation.TestOSWValidation) ... ok
74+
test_missing_files_inside_zipfile_with_invalid_schema (test_osw_validation.TestOSWValidation) ... ok
75+
test_missing_files_inside_zipfile_with_schema (test_osw_validation.TestOSWValidation) ... ok
7076
test_nodes_invalid_zipfile (test_osw_validation.TestOSWValidation) ... ok
77+
test_nodes_invalid_zipfile_with_invalid_schema (test_osw_validation.TestOSWValidation) ... ok
78+
test_nodes_invalid_zipfile_with_schema (test_osw_validation.TestOSWValidation) ... ok
7179
test_points_invalid_zipfile (test_osw_validation.TestOSWValidation) ... ok
80+
test_points_invalid_zipfile_with_invalid_schema (test_osw_validation.TestOSWValidation) ... ok
81+
test_points_invalid_zipfile_with_schema (test_osw_validation.TestOSWValidation) ... ok
7282
test_valid_zipfile (test_osw_validation.TestOSWValidation) ... ok
83+
test_valid_zipfile_with_invalid_schema (test_osw_validation.TestOSWValidation) ... ok
84+
test_valid_zipfile_with_schema (test_osw_validation.TestOSWValidation) ... ok
7385
test_extract_invalid_zip (test_zipfile_handler.TestZipFileHandler) ... ok
7486
test_extract_valid_zip (test_zipfile_handler.TestZipFileHandler) ... ok
7587
test_remove_extracted_files (test_zipfile_handler.TestZipFileHandler) ... ok
7688

7789
----------------------------------------------------------------------
78-
Ran 13 tests in 82.787s
90+
Ran 25 tests in 85.914s
7991

8092
OK
93+
8194
```

src/example.py

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,37 @@
44
PARENT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
55
ASSETS_DIR = os.path.join(PARENT_DIR, 'tests/assets')
66
VALID_ZIP_FILE = os.path.join(ASSETS_DIR, 'valid.zip')
7+
INVALID_ZIP_FILE = os.path.join(ASSETS_DIR, 'invalid.zip')
8+
SCHEMA_DIR = os.path.join(PARENT_DIR, 'src/python_lib_osw_validation/schema')
9+
SCHEMA_FILE_PATH = os.path.join(SCHEMA_DIR, 'opensidewalks.schema.json')
710

8-
if __name__ == '__main__':
11+
12+
def valid_test_with_provided_schema():
13+
validator = OSWValidation(zipfile_path=VALID_ZIP_FILE, schema_file_path=SCHEMA_FILE_PATH)
14+
is_valid = validator.validate()
15+
print(f'Valid Test With Provided Schema: {"Passed" if is_valid else "Failed"}')
16+
17+
18+
def valid_test_without_provided_schema():
919
validator = OSWValidation(zipfile_path=VALID_ZIP_FILE)
1020
is_valid = validator.validate()
11-
if not is_valid:
12-
print(validator.error)
21+
print(f'Valid Test Without Schema: {"Passed" if is_valid else "Failed"}')
22+
23+
24+
def invalid_test_with_provided_schema():
25+
validator = OSWValidation(zipfile_path=INVALID_ZIP_FILE, schema_file_path=SCHEMA_FILE_PATH)
26+
is_valid = validator.validate()
27+
print(f'Invalid Test With Provided Schema: {"Failed" if is_valid else "Passed"}')
28+
29+
30+
def invalid_test_without_provided_schema():
31+
validator = OSWValidation(zipfile_path=INVALID_ZIP_FILE)
32+
is_valid = validator.validate()
33+
print(f'Invalid Test Without Schema: {"Failed" if is_valid else "Passed"}')
34+
35+
36+
if __name__ == '__main__':
37+
valid_test_with_provided_schema()
38+
valid_test_without_provided_schema()
39+
invalid_test_with_provided_schema()
40+
invalid_test_without_provided_schema()

src/python_lib_osw_validation/__init__.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,27 @@
1111
class OSWValidation:
1212
schema_dir = os.path.join(SCHEMA_PATH, 'opensidewalks.schema.json')
1313

14-
def __init__(self, zipfile_path: str):
14+
def __init__(self, zipfile_path: str, schema_file_path=None):
1515
self.zipfile_path = zipfile_path
1616
self.extracted_dir = None
17-
self.schema = self.load_osw_schema(OSWValidation.schema_dir)
17+
if schema_file_path is None:
18+
self.schema = self.load_osw_schema(OSWValidation.schema_dir)
19+
else:
20+
self.schema = self.load_osw_schema(schema_file_path)
21+
1822
self.error = None
1923

2024
def load_osw_schema(self, schema_path: str) -> Dict[str, Any]:
2125
'''Load OSW Schema'''
22-
with open(schema_path, 'r') as file:
23-
schema = json.load(file)
24-
return schema
26+
try:
27+
with open(schema_path, 'r') as file:
28+
schema = json.load(file)
29+
return schema
30+
except Exception as e:
31+
self.error = e
32+
raise Exception(f'Invalid or missing schema file: {e}')
33+
34+
2535

2636
def validate(self) -> bool:
2737
self.error = None

tests/unit_tests/test_osw_validation.py

Lines changed: 83 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
from src.python_lib_osw_validation import OSWValidation
44

55
PARENT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
6+
SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
67
ASSETS_PATH = os.path.join(PARENT_DIR, 'assets')
8+
SCHEMA_DIR = os.path.join(SRC_DIR, 'src/python_lib_osw_validation/schema')
9+
SCHEMA_FILE_PATH = os.path.join(SCHEMA_DIR, 'opensidewalks.schema.json')
10+
INVALID_SCHEMA_FILE_PATH = os.path.join(SCHEMA_DIR, 'opensidewalk.schema.json')
711

812

913
class TestOSWValidation(unittest.TestCase):
@@ -15,43 +19,116 @@ def setUp(self):
1519
self.edges_invalid_zipfile = os.path.join(ASSETS_PATH, 'edges_invalid.zip')
1620
self.points_invalid_zipfile = os.path.join(ASSETS_PATH, 'points_invalid.zip')
1721
self.missing_files_zipfile = os.path.join(ASSETS_PATH, 'invalid_files.zip')
22+
self.schema_file_path = SCHEMA_FILE_PATH
23+
self.invalid_schema_file_path = INVALID_SCHEMA_FILE_PATH
1824

1925
def test_valid_zipfile(self):
20-
validation = OSWValidation(self.valid_zipfile)
26+
validation = OSWValidation(zipfile_path=self.valid_zipfile)
2127
result = validation.validate()
2228
self.assertTrue(result)
2329
self.assertIsNone(validation.error)
2430

31+
def test_valid_zipfile_with_schema(self):
32+
validation = OSWValidation(zipfile_path=self.valid_zipfile, schema_file_path=self.schema_file_path)
33+
result = validation.validate()
34+
self.assertTrue(result)
35+
self.assertIsNone(validation.error)
36+
37+
def test_valid_zipfile_with_invalid_schema(self):
38+
with self.assertRaises(Exception):
39+
validation = OSWValidation(zipfile_path=self.valid_zipfile, schema_file_path=self.invalid_schema_file_path)
40+
validation.validate()
41+
2542
def test_invalid_zipfile(self):
26-
validation = OSWValidation(self.invalid_zipfile)
43+
validation = OSWValidation(zipfile_path=self.invalid_zipfile)
2744
result = validation.validate()
2845
self.assertFalse(result)
2946
self.assertIsNotNone(validation.error)
3047

48+
def test_invalid_zipfile_with_schema(self):
49+
validation = OSWValidation(zipfile_path=self.invalid_zipfile, schema_file_path=self.schema_file_path)
50+
result = validation.validate()
51+
self.assertFalse(result)
52+
self.assertIsNotNone(validation.error)
53+
54+
def test_invalid_zipfile_with_invalid_schema(self):
55+
with self.assertRaises(Exception):
56+
validation = OSWValidation(zipfile_path=self.invalid_zipfile,
57+
schema_file_path=self.invalid_schema_file_path)
58+
validation.validate()
59+
3160
def test_nodes_invalid_zipfile(self):
32-
validation = OSWValidation(self.nodes_invalid_zipfile)
61+
validation = OSWValidation(zipfile_path=self.nodes_invalid_zipfile)
3362
result = validation.validate()
3463
self.assertFalse(result)
3564
self.assertIsNotNone(validation.error)
3665

66+
def test_nodes_invalid_zipfile_with_schema(self):
67+
validation = OSWValidation(zipfile_path=self.nodes_invalid_zipfile, schema_file_path=self.schema_file_path)
68+
result = validation.validate()
69+
self.assertFalse(result)
70+
self.assertIsNotNone(validation.error)
71+
72+
def test_nodes_invalid_zipfile_with_invalid_schema(self):
73+
with self.assertRaises(Exception):
74+
validation = OSWValidation(zipfile_path=self.nodes_invalid_zipfile,
75+
schema_file_path=self.invalid_schema_file_path)
76+
validation.validate()
77+
3778
def test_edges_invalid_zipfile(self):
38-
validation = OSWValidation(self.edges_invalid_zipfile)
79+
validation = OSWValidation(zipfile_path=self.edges_invalid_zipfile)
3980
result = validation.validate()
4081
self.assertFalse(result)
4182
self.assertIsNotNone(validation.error)
4283

84+
def test_edges_invalid_zipfile_with_schema(self):
85+
validation = OSWValidation(zipfile_path=self.edges_invalid_zipfile, schema_file_path=self.schema_file_path)
86+
result = validation.validate()
87+
self.assertFalse(result)
88+
self.assertIsNotNone(validation.error)
89+
90+
def test_edges_invalid_zipfile_with_invalid_schema(self):
91+
with self.assertRaises(Exception):
92+
validation = OSWValidation(zipfile_path=self.edges_invalid_zipfile,
93+
schema_file_path=self.invalid_schema_file_path)
94+
validation.validate()
95+
4396
def test_points_invalid_zipfile(self):
44-
validation = OSWValidation(self.points_invalid_zipfile)
97+
validation = OSWValidation(zipfile_path=self.points_invalid_zipfile)
4598
result = validation.validate()
4699
self.assertFalse(result)
47100
self.assertIsNotNone(validation.error)
48101

102+
def test_points_invalid_zipfile_with_schema(self):
103+
validation = OSWValidation(zipfile_path=self.points_invalid_zipfile, schema_file_path=self.schema_file_path)
104+
result = validation.validate()
105+
self.assertFalse(result)
106+
self.assertIsNotNone(validation.error)
107+
108+
def test_points_invalid_zipfile_with_invalid_schema(self):
109+
with self.assertRaises(Exception):
110+
validation = OSWValidation(zipfile_path=self.points_invalid_zipfile,
111+
schema_file_path=self.invalid_schema_file_path)
112+
validation.validate()
113+
49114
def test_missing_files_inside_zipfile(self):
50-
validation = OSWValidation(self.missing_files_zipfile)
115+
validation = OSWValidation(zipfile_path=self.missing_files_zipfile)
51116
result = validation.validate()
52117
self.assertFalse(result)
53118
self.assertIsNotNone(validation.error)
54119

120+
def test_missing_files_inside_zipfile_with_schema(self):
121+
validation = OSWValidation(zipfile_path=self.missing_files_zipfile, schema_file_path=self.schema_file_path)
122+
result = validation.validate()
123+
self.assertFalse(result)
124+
self.assertIsNotNone(validation.error)
125+
126+
def test_missing_files_inside_zipfile_with_invalid_schema(self):
127+
with self.assertRaises(Exception):
128+
validation = OSWValidation(zipfile_path=self.missing_files_zipfile,
129+
schema_file_path=self.invalid_schema_file_path)
130+
validation.validate()
131+
55132

56133
if __name__ == '__main__':
57134
unittest.main()

0 commit comments

Comments
 (0)