File size: 586 Bytes
a30d31a
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
from __future__ import annotations
class SourceCache:
    def __init__(self):self.data={}
    def put_role(self,ref,version,role,payload):self.data[(ref,version,role)]=payload
    def check_role(self,ref,version,role):
        if (ref,version,role) in self.data:return {'status':'HIT','payload':self.data[(ref,version,role)]}
        if any(r==ref and ro==role and v!=version for r,v,ro in self.data):return {'status':'REFRESH_VERSION_CHANGED'}
        if any(r==ref and v==version for r,v,ro in self.data):return {'status':'MISS_ROLE'}
        return {'status':'MISS_SOURCE'}