3939
4040def _get_result_from_cache (
4141 package_name : str ,
42- badge_type : badge_utils .BadgeType ) -> dict :
42+ badge_type : badge_utils .BadgeType ,
43+ commit_number : str = None ) -> dict :
4344 """Get check result from cache."""
4445 # Return unknown if package not in whitelist
4546 if not utils ._is_package_in_whitelist ([package_name ]):
@@ -49,7 +50,9 @@ def _get_result_from_cache(
4950 details = {})
5051 # Get the result from cache, return None if not in cache
5152 else :
52- result = cache .get ('{}_{}' .format (package_name , badge_type .value ))
53+ package_key = '{}_{}' .format (
54+ package_name , commit_number ) if commit_number else package_name
55+ result = cache .get ('{}_{}' .format (package_key , badge_type .value ))
5356
5457 if result is None :
5558 result = badge_utils ._build_default_result (
@@ -109,7 +112,7 @@ def _get_pair_status_for_packages(pkg_sets):
109112 return version_and_res
110113
111114
112- def _get_all_results_from_cache (package_name ):
115+ def _get_all_results_from_cache (package_name , commit_number = None ):
113116 """Get all the check results from cache.
114117
115118 Rules:
@@ -118,13 +121,16 @@ def _get_all_results_from_cache(package_name):
118121 """
119122 self_compat_res = _get_result_from_cache (
120123 package_name = package_name ,
121- badge_type = badge_utils .BadgeType .SELF_COMP_BADGE )
124+ badge_type = badge_utils .BadgeType .SELF_COMP_BADGE ,
125+ commit_number = commit_number )
122126 google_compat_res = _get_result_from_cache (
123127 package_name = package_name ,
124- badge_type = badge_utils .BadgeType .GOOGLE_COMP_BADGE )
128+ badge_type = badge_utils .BadgeType .GOOGLE_COMP_BADGE ,
129+ commit_number = commit_number )
125130 dependency_res = _get_result_from_cache (
126131 package_name = package_name ,
127- badge_type = badge_utils .BadgeType .DEP_BADGE )
132+ badge_type = badge_utils .BadgeType .DEP_BADGE ,
133+ commit_number = commit_number )
128134
129135 if self_compat_res ['py3' ]['status' ] == 'SUCCESS' and \
130136 google_compat_res ['py3' ]['status' ] == 'SUCCESS' and \
@@ -177,6 +183,8 @@ def one_badge_image():
177183 badge_name = badge_utils .GITHUB_HEAD_NAME
178184 is_github = True
179185
186+ commit_number = badge_utils ._calculate_commit_number (package_name )
187+
180188 force_run_check = flask .request .args .get ('force_run_check' )
181189 # Remove the last '/' from the url root
182190 url_prefix = flask .request .url_root [:- 1 ]
@@ -186,19 +194,23 @@ def one_badge_image():
186194 requests .get (url_prefix + flask .url_for (
187195 'self_compatibility_badge_image' ,
188196 package = package_name ,
189- force_run_check = force_run_check ))
197+ force_run_check = force_run_check ,
198+ commit_number = commit_number ))
190199 # Google compatibility badge
191200 requests .get (url_prefix + flask .url_for (
192201 'google_compatibility_badge_image' ,
193202 package = package_name ,
194- force_run_check = force_run_check ))
203+ force_run_check = force_run_check ,
204+ commit_number = commit_number ))
195205 # Self dependency badge
196206 requests .get (url_prefix + flask .url_for (
197207 'self_dependency_badge_image' ,
198208 package = package_name ,
199- force_run_check = force_run_check ))
209+ force_run_check = force_run_check ,
210+ commit_number = commit_number ))
200211
201- status , timestamp , _ , _ , _ = _get_all_results_from_cache (package_name )
212+ status , timestamp , _ , _ , _ = _get_all_results_from_cache (
213+ package_name , commit_number = commit_number )
202214 color = badge_utils .STATUS_COLOR_MAPPING [status ]
203215
204216 details_link = url_prefix + flask .url_for ('one_badge_target' ,
@@ -224,24 +236,30 @@ def one_badge_image():
224236@app .route ('/one_badge_target' )
225237def one_badge_target ():
226238 package_name = flask .request .args .get ('package' )
239+ commit_number = badge_utils ._calculate_commit_number (package_name )
240+
227241 status , _ , self_compat_res , google_compat_res , dependency_res = \
228- _get_all_results_from_cache (package_name )
242+ _get_all_results_from_cache (package_name , commit_number )
229243
230244 return flask .render_template (
231245 'one-badge.html' ,
232246 package_name = package_name ,
233247 self_compat_res = self_compat_res ,
234248 google_compat_res = google_compat_res ,
235- dependency_res = dependency_res )
249+ dependency_res = dependency_res ,
250+ commit_number = commit_number )
236251
237252
238253@app .route ('/self_compatibility_badge_image' )
239254def self_compatibility_badge_image ():
240255 """Badge showing whether a package is compatible with itself."""
241256 package_name = flask .request .args .get ('package' )
242257 force_run_check = flask .request .args .get ('force_run_check' )
258+ commit_number = flask .request .args .get ('commit_number' )
243259
244260 badge_name = flask .request .args .get ('badge_name' )
261+ package_key = '{}_{}' .format (
262+ package_name , commit_number ) if commit_number else package_name
245263
246264 if badge_name is None :
247265 badge_name = 'self compatibility'
@@ -285,16 +303,15 @@ def run_check():
285303 badge_utils .TIMESTAMP_FORMAT )
286304
287305 # Write the result to Cloud Datastore
288- cache .set (
289- '{}_self_comp_badge' .format (package_name ), version_and_res )
306+ cache .set ('{}_self_comp_badge' .format (package_key ), version_and_res )
290307
291308 if not utils ._is_package_in_whitelist ([package_name ]):
292309 self_comp_res = badge_utils ._build_default_result (
293310 badge_type = badge_utils .BadgeType .SELF_COMP_BADGE ,
294311 status = 'UNKNOWN' ,
295312 details = badge_utils .PACKAGE_NOT_SUPPORTED )
296313 else :
297- self_comp_res = cache .get ('{}_self_comp_badge' .format (package_name ))
314+ self_comp_res = cache .get ('{}_self_comp_badge' .format (package_key ))
298315
299316 if self_comp_res is None :
300317 details = version_and_res
@@ -347,7 +364,11 @@ def self_dependency_badge_image():
347364
348365 package_name = flask .request .args .get ('package' )
349366 force_run_check = flask .request .args .get ('force_run_check' )
367+ commit_number = flask .request .args .get ('commit_number' )
368+
350369 badge_name = flask .request .args .get ('badge_name' )
370+ package_key = '{}_{}' .format (
371+ package_name , commit_number ) if commit_number else package_name
351372
352373 if badge_name is None :
353374 badge_name = 'dependency status'
@@ -382,17 +403,15 @@ def run_check():
382403 badge_utils .TIMESTAMP_FORMAT )
383404
384405 # Write the result to Cloud Datastore
385- cache .set (
386- '{}_dependency_badge' .format (package_name ), res )
406+ cache .set ('{}_dependency_badge' .format (package_key ), res )
387407
388408 if not utils ._is_package_in_whitelist ([package_name ]):
389409 dependency_res = badge_utils ._build_default_result (
390410 badge_type = badge_utils .BadgeType .DEP_BADGE ,
391411 status = 'UNKNOWN' ,
392412 details = {})
393413 else :
394- dependency_res = cache .get (
395- '{}_dependency_badge' .format (package_name ))
414+ dependency_res = cache .get ('{}_dependency_badge' .format (package_key ))
396415
397416 if dependency_res is None :
398417 details = badge_utils .DEFAULT_DEPENDENCY_RESULT
@@ -433,7 +452,11 @@ def google_compatibility_badge_image():
433452 to one of the failure types, details can be found at the target link."""
434453 package_name = flask .request .args .get ('package' )
435454 force_run_check = flask .request .args .get ('force_run_check' )
455+ commit_number = flask .request .args .get ('commit_number' )
456+
436457 badge_name = flask .request .args .get ('badge_name' )
458+ package_key = '{}_{}' .format (
459+ package_name , commit_number ) if commit_number else package_name
437460
438461 if badge_name is None :
439462 badge_name = 'google compatibility'
@@ -492,11 +515,9 @@ def run_check():
492515 result = version_and_res
493516
494517 # Write the result to Cloud Datastore
495- cache .set (
496- '{}_google_comp_badge' .format (package_name ), result )
518+ cache .set ('{}_google_comp_badge' .format (package_key ), result )
497519
498- google_comp_res = cache .get (
499- '{}_google_comp_badge' .format (package_name ))
520+ google_comp_res = cache .get ('{}_google_comp_badge' .format (package_key ))
500521
501522 if not utils ._is_package_in_whitelist ([package_name ]):
502523 google_comp_res = badge_utils ._build_default_result (
0 commit comments