mirror of
				https://github.com/decompals/frogress.git
				synced 2025-10-27 12:10:38 +00:00 
			
		
		
		
	Improvements to get_progress_shield (#19)
- Use passed in category_slug
- Default to {measure}/total when not specified
- Use colors with better contrast
			
			
This commit is contained in:
		
							parent
							
								
									ba9bc093b0
								
							
						
					
					
						commit
						e98cbf8159
					
				| @ -1,6 +1,8 @@ | ||||
| from typing import Any | ||||
| 
 | ||||
| from django.db import models | ||||
| from django.template.defaultfilters import title | ||||
| 
 | ||||
| from frog_api.exceptions import ( | ||||
|     InvalidDataException, | ||||
|     NoEntriesException, | ||||
| @ -96,7 +98,8 @@ class ProjectDataView(APIView): | ||||
| def get_progress_shield( | ||||
|     request: Request, project_slug: str, version_slug: str, category_slug: str | ||||
| ) -> dict[str, Any]: | ||||
|     latest = get_latest_entry(project_slug, version_slug, "default") | ||||
|     latest = get_latest_entry(project_slug, version_slug, category_slug) | ||||
|     latest_measures = latest[0]["measures"] | ||||
| 
 | ||||
|     project = get_project(project_slug) | ||||
|     version = get_version(version_slug, project) | ||||
| @ -104,35 +107,41 @@ def get_progress_shield( | ||||
| 
 | ||||
|     params = request.query_params | ||||
|     if not params: | ||||
|         raise InvalidDataException("No measure or total specified") | ||||
| 
 | ||||
|     try: | ||||
|         measure = params["measure"] | ||||
|         numerator = latest[0]["measures"][measure] | ||||
|     except: | ||||
|         raise InvalidDataException("No measure specified") | ||||
| 
 | ||||
|     if "measure" in params: | ||||
|         measure = params["measure"] | ||||
|     else: | ||||
|         raise InvalidDataException("No measure specified") | ||||
|     if measure not in latest_measures: | ||||
|         raise InvalidDataException(f"Measure '{measure}' not found") | ||||
|     numerator = latest_measures[measure] | ||||
| 
 | ||||
|     label = params.get( | ||||
|         "label", | ||||
|         " ".join( | ||||
|             [ | ||||
|                 version.name, | ||||
|                 category.name, | ||||
|                 str(measure), | ||||
|                 title(str(measure)), | ||||
|             ] | ||||
|         ), | ||||
|     ) | ||||
| 
 | ||||
|     try: | ||||
|     if "total" in params: | ||||
|         total = params["total"] | ||||
|         denominator = latest[0]["measures"][total] | ||||
|     except: | ||||
|     elif f"{measure}/total" in latest_measures: | ||||
|         total = f"{measure}/total" | ||||
|     else: | ||||
|         raise InvalidDataException("No total specified") | ||||
|     if total not in latest_measures: | ||||
|         raise InvalidDataException(f"Measure '{total}' not found") | ||||
|     denominator = latest_measures[total] | ||||
| 
 | ||||
|     fraction = float(numerator) / float(denominator) | ||||
|     message = f"{fraction:.2%}" | ||||
| 
 | ||||
|     color = params.get("color", "yellow" if fraction < 1.0 else "green") | ||||
|     color = params.get("color", "informational" if fraction < 1.0 else "success") | ||||
| 
 | ||||
|     return {"schemaVersion": 1, "label": label, "message": message, "color": color} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user