Skip to content

Commit 202cd75

Browse files
committed
Reduce the time complexity of bulk api request fetch
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent 66cf49a commit 202cd75

1 file changed

Lines changed: 15 additions & 15 deletions

File tree

vulnerabilities/api.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,21 +133,21 @@ class PackageViewSet(viewsets.ReadOnlyModelViewSet):
133133
# TODO: Find a good name for this endpoint
134134
@action(detail=False, methods=["post"])
135135
def fetch(self, request):
136-
137136
filter_list = Q()
138-
# TODO: Do some validation here
137+
response = {}
138+
# TODO: Do some validation here of request body
139+
139140
for purl in request.data["packages"]:
140141
filter_list |= Q(
141142
**{k: v for k, v in PackageURL.from_string(purl).to_dict().items() if v}
142143
)
143144

144-
res = Package.objects.filter(filter_list)
145-
response = {}
146-
for purl in request.data["packages"]:
145+
# This handles the case when the said purl doesnt exist in db
147146
response[purl] = {}
148-
for p in res:
149-
if p.package_url == purl:
150-
response[purl] = PackageSerializer(p, context={"request": request}).data
147+
148+
res = Package.objects.filter(filter_list)
149+
for p in res:
150+
response[p.package_url] = PackageSerializer(p, context={"request": request}).data
151151

152152
return Response(response)
153153

@@ -172,16 +172,16 @@ class VulnerabilityViewSet(viewsets.ReadOnlyModelViewSet):
172172
@action(detail=False, methods=["post"])
173173
def fetch(self, request):
174174
filter_list = Q()
175-
# TODO: Do some validation here
175+
response = {}
176+
# TODO: Do some validation here of request body
176177
for cve_id in request.data["vulnerabilities"]:
177178
filter_list |= Q(cve_id=cve_id)
178179

180+
# This handles the case when the said cve doesnt exist in db
181+
response[cve_id] = {}
182+
179183
res = Vulnerability.objects.filter(filter_list)
180-
response = {}
181-
for cve in request.data["vulnerabilities"]:
182-
response[cve] = {}
183-
for vuln in res:
184-
if vuln.cve_id == cve:
185-
response[cve] = VulnerabilitySerializer(vuln, context={"request": request}).data
184+
for vuln in res:
185+
response[vuln.cve_id] = VulnerabilitySerializer(vuln, context={"request": request}).data
186186

187187
return Response(response)

0 commit comments

Comments
 (0)