Skip to content

Commit bd28137

Browse files
committed
Add schema validation for safety_db importer
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent 00e715a commit bd28137

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@ tqdm==4.41.1
3030
wcwidth==0.1.7
3131
whitenoise==5.0.1
3232
zipp==0.6.0
33-
pytoml==0.1.21
33+
pytoml==0.1.21
34+
schema==0.7.1

vulnerabilities/scraper/safety_db.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Data Imported from https://github.com/pyupio/safety-db
22
import json
3+
from schema import Regex, Or, Schema, SchemaError
34
from urllib.error import HTTPError
45
from urllib.request import urlopen
56
from dephell_specifier import RangeSpecifier
@@ -13,6 +14,24 @@ def get_data_file():
1314
return json_file
1415

1516

17+
def validate_schema(advisory_dict):
18+
19+
scheme = {
20+
str:
21+
[
22+
{
23+
"advisory": str,
24+
"cve": Or(None, Regex(r"CVE-\d+-\d+")),
25+
"id": Regex(r"^pyup.io-\d"),
26+
"specs": list,
27+
"v": str
28+
}
29+
]
30+
}
31+
32+
Schema(scheme).validate(advisory_dict)
33+
34+
1635
def get_all_versions_of_package(package_name):
1736
url = "https://pypi.org/pypi/{}/json".format(package_name)
1837
releases = set()
@@ -29,6 +48,7 @@ def get_all_versions_of_package(package_name):
2948
def import_vulnerabilities():
3049
vulnerability_package_dicts = []
3150
data = get_data_file()
51+
validate_schema(data)
3252
cves = set()
3353
for package_name in data:
3454
all_package_versions = set(get_all_versions_of_package(package_name))

0 commit comments

Comments
 (0)