@@ -831,7 +831,20 @@ def _datastore_normalized_purl(purl: PackageURL):
831
831
def query_by_commit (context : QueryContext ,
832
832
commit : bytes ,
833
833
to_response : Callable = bug_to_response ) -> list :
834
- """Query by commit."""
834
+ """
835
+ Perform a query by commit.
836
+
837
+ This is a ndb.tasklet, so will return a future that will need to be yielded.
838
+
839
+ Args:
840
+ context: QueryContext for the current query.
841
+ commit: The commit hash to query.
842
+ to_response: Optional function to convert osv.Bug to a
843
+ vulnerability response.
844
+
845
+ Returns:
846
+ list of responses (return values from to_response)
847
+ """
835
848
query = osv .AffectedCommits .query (osv .AffectedCommits .commits == commit )
836
849
837
850
context .query_counter += 1
@@ -948,8 +961,8 @@ def _is_version_affected(affected_packages,
948
961
purl : PackageURL | None ,
949
962
version ,
950
963
normalize = False ):
951
- """Returns whether or not the given version is within an affected ECOSYSTEM
952
-
964
+ """
965
+ Returns whether or not the given version is within an affected ECOSYSTEM
953
966
range.
954
967
"""
955
968
for affected_package in affected_packages :
@@ -980,9 +993,26 @@ def _is_version_affected(affected_packages,
980
993
981
994
982
995
@ndb .tasklet
983
- def _query_by_semver (context : QueryContext , query : ndb .Query , package_name : str ,
984
- ecosystem : str , purl : PackageURL | None , version : str ):
985
- """Query by semver."""
996
+ def _query_by_semver (context : QueryContext , query : ndb .Query ,
997
+ package_name : str | None , ecosystem : str | None ,
998
+ purl : PackageURL | None , version : str ):
999
+ """
1000
+ Perform a query by semver version.
1001
+
1002
+ This is a ndb.tasklet, so will return a future that will need to be yielded.
1003
+
1004
+ Args:
1005
+ context: QueryContext for the current query.
1006
+ query: A partially completed ndb.Query object which only needs
1007
+ semver filters to be added before query is performed.
1008
+ package_name: Optional name of the package to query.
1009
+ ecosystem: Optional ecosystem of the package to query.
1010
+ purl: Optional PackageURL.
1011
+ version: The semver version to query for.
1012
+
1013
+ Returns:
1014
+ list of osv.Bug entries wrapped in a Future.
1015
+ """
986
1016
if not semver_index .is_valid (version ):
987
1017
return []
988
1018
@@ -1015,30 +1045,46 @@ def _query_by_semver(context: QueryContext, query: ndb.Query, package_name: str,
1015
1045
def _query_by_generic_version (
1016
1046
context : QueryContext ,
1017
1047
base_query : ndb .Query ,
1018
- project : str ,
1019
- ecosystem : str ,
1048
+ package_name : str | None ,
1049
+ ecosystem : str | None ,
1020
1050
purl : PackageURL | None ,
1021
1051
version : str ,
1022
1052
):
1023
- """Query by generic version."""
1053
+ """
1054
+ Query by generic version.
1055
+
1056
+ This is a ndb.tasklet, so will return a future that will need to be yielded.
1057
+
1058
+ Args:
1059
+ context: QueryContext for the current query.
1060
+ base_query: A partially completed ndb.Query object which only needs
1061
+ version filters to be added before query is performed.
1062
+ package_name: Optional name of the package to query.
1063
+ ecosystem: Optional ecosystem of the package to query.
1064
+ purl: Optional PackageURL.
1065
+ version: The non-semver version to query for.
1066
+
1067
+ Returns:
1068
+ list of osv.Bug entries wrapped in a Future.
1069
+ """
1024
1070
# Try without normalizing.
1025
- results = yield query_by_generic_helper (context , base_query , project ,
1071
+ results = yield query_by_generic_helper (context , base_query , package_name ,
1026
1072
ecosystem , purl , version , False )
1027
1073
1028
1074
# If there are results, then we should return with this query,
1029
1075
# as no normalization seem to be the correct format.
1030
1076
if results :
1031
1077
return results
1032
1078
1033
- results = yield query_by_generic_helper (context , base_query , project ,
1079
+ results = yield query_by_generic_helper (context , base_query , package_name ,
1034
1080
ecosystem , purl ,
1035
1081
osv .normalize_tag (version ), True )
1036
1082
1037
1083
if results :
1038
1084
return results
1039
1085
1040
1086
# Try again after canonicalizing + normalizing version.
1041
- results = yield query_by_generic_helper (context , base_query , project ,
1087
+ results = yield query_by_generic_helper (context , base_query , package_name ,
1042
1088
ecosystem , purl ,
1043
1089
canonicalize_version (version ), True )
1044
1090
@@ -1047,7 +1093,7 @@ def _query_by_generic_version(
1047
1093
1048
1094
@ndb .tasklet
1049
1095
def query_by_generic_helper (context : QueryContext , base_query : ndb .Query ,
1050
- project : str , ecosystem : str ,
1096
+ package_name : str | None , ecosystem : str | None ,
1051
1097
purl : PackageURL | None , version : str ,
1052
1098
is_normalized ):
1053
1099
"""
@@ -1070,7 +1116,7 @@ def query_by_generic_helper(context: QueryContext, base_query: ndb.Query,
1070
1116
bug = it .next ()
1071
1117
if _is_version_affected (
1072
1118
bug .affected_packages ,
1073
- project ,
1119
+ package_name ,
1074
1120
ecosystem ,
1075
1121
purl ,
1076
1122
version ,
@@ -1082,12 +1128,28 @@ def query_by_generic_helper(context: QueryContext, base_query: ndb.Query,
1082
1128
1083
1129
@ndb .tasklet
1084
1130
def query_by_version (context : QueryContext ,
1085
- package_name : str ,
1086
- ecosystem : str ,
1131
+ package_name : str | None ,
1132
+ ecosystem : str | None ,
1087
1133
purl : PackageURL | None ,
1088
- version ,
1134
+ version : str ,
1089
1135
to_response : Callable = bug_to_response ):
1090
- """Query by (fuzzy) version."""
1136
+ """
1137
+ Query by (fuzzy) version.
1138
+
1139
+ This is a ndb.tasklet, so will return a future that will need to be yielded.
1140
+
1141
+ Args:
1142
+ context: QueryContext for the current query.
1143
+ package_name: Optional name of the package to query.
1144
+ ecosystem: Optional ecosystem of the package to query.
1145
+ purl: Optional PackageURL.
1146
+ version: The version str to query by.
1147
+ to_response: Optional function to convert osv.Bug to a
1148
+ vulnerability response.
1149
+
1150
+ Returns:
1151
+ list of responses (return values from to_response)
1152
+ """
1091
1153
1092
1154
if package_name :
1093
1155
query = osv .Bug .query (
@@ -1166,7 +1228,11 @@ def query_by_version(context: QueryContext,
1166
1228
@ndb .tasklet
1167
1229
def _query_by_comparing_versions (context : QueryContext , query : ndb .Query ,
1168
1230
ecosystem : str , version : str ) -> list :
1169
- """Query by package."""
1231
+ """
1232
+ Query by comparing versions.
1233
+
1234
+ TODO:
1235
+ """
1170
1236
bugs = []
1171
1237
1172
1238
context .query_counter += 1
@@ -1213,9 +1279,26 @@ def _query_by_comparing_versions(context: QueryContext, query: ndb.Query,
1213
1279
1214
1280
1215
1281
@ndb .tasklet
1216
- def query_by_package (context : QueryContext , package_name : str , ecosystem : str ,
1217
- purl : PackageURL | None , to_response : Callable ) -> list :
1218
- """Query by package."""
1282
+ def query_by_package (context : QueryContext , package_name : str | None ,
1283
+ ecosystem : str | None , purl : PackageURL | None ,
1284
+ to_response : Callable ) -> list :
1285
+ """
1286
+ Query by package.
1287
+
1288
+ This is a ndb.tasklet, so will return a future that will need to be yielded.
1289
+
1290
+ Args:
1291
+ context: QueryContext for the current query.
1292
+ package_name: Optional name of the package to query.
1293
+ ecosystem: Optional ecosystem of the package to query.
1294
+ purl: Optional PackageURL. If purl is None, then both
1295
+ package_name and ecosystem need to be set.
1296
+ to_response: Function to convert osv.Bug to a
1297
+ vulnerability response.
1298
+
1299
+ Returns:
1300
+ list of responses (return values from to_response)
1301
+ """
1219
1302
bugs = []
1220
1303
if package_name and ecosystem :
1221
1304
query = osv .Bug .query (
0 commit comments