1- from typing import Any , List , Tuple
1+ import datetime
2+ from typing import Any , List , Tuple , Union
23
34from django .db .models import Max , QuerySet
45from semantic_version import Version
@@ -24,6 +25,12 @@ def create_etag(pairs: List[Tuple[QuerySet, str]]) -> str:
2425 return str (max (result , default = "" ))
2526
2627
28+ def get_last_modified (pairs : List [Tuple [QuerySet , str ]]) -> Union [datetime .datetime , None ]:
29+ result = map (lambda p : p [0 ].aggregate (m = Max (p [1 ]))["m" ], pairs )
30+ result = filter (lambda r : r is not None , result )
31+ return max (result , default = None )
32+
33+
2734def apps_etag (request : Any , version : str ) -> str :
2835 return create_etag (
2936 [
@@ -33,6 +40,15 @@ def apps_etag(request: Any, version: str) -> str:
3340 )
3441
3542
43+ def apps_last_modified (request : Any , version : str ) -> Union [datetime .datetime , None ]:
44+ return get_last_modified (
45+ [
46+ (App .objects .all (), "last_release" ),
47+ (AppReleaseDeleteLog .objects .all (), "last_modified" ),
48+ ]
49+ )
50+
51+
3652def apps_all_etag (request : Any ) -> str :
3753 return create_etag (
3854 [
@@ -42,6 +58,15 @@ def apps_all_etag(request: Any) -> str:
4258 )
4359
4460
61+ def apps_all_last_modified (request : Any ) -> Union [datetime .datetime , None ]:
62+ return get_last_modified (
63+ [
64+ (App .objects .all (), "last_release" ),
65+ (AppReleaseDeleteLog .objects .all (), "last_modified" ),
66+ ]
67+ )
68+
69+
4570def app_etag (request : Any , id : str ) -> str :
4671 return str (App .objects .get (id = id ).last_modified )
4772
@@ -54,6 +79,10 @@ def categories_etag(request: Any) -> str:
5479 return create_etag ([(Category .objects .all (), "last_modified" )])
5580
5681
82+ def categories_last_modified (request : Any ) -> Union [datetime .datetime , None ]:
83+ return get_last_modified ([(Category .objects .all (), "last_modified" )])
84+
85+
5786def app_ratings_etag (request : Any ) -> str :
5887 return create_etag ([(AppRating .objects .all (), "rated_at" )])
5988
0 commit comments