def test_get_versioned_baked_images(self): test_user = self.setup_user(authenticate=False) test_issuer = self.setup_issuer(owner=test_user) test_badgeclass = self.setup_badgeclass(issuer=test_issuer) assertion = test_badgeclass.issue(recipient_id='*****@*****.**') response = self.client.get('/public/assertions/{}/image'.format(assertion.entity_id), follow=True) self.verify_baked_image_response(assertion, response, obi_version=UNVERSIONED_BAKED_VERSION) for obi_version in list(OBI_VERSION_CONTEXT_IRIS.keys()): response = self.client.get('/public/assertions/{assertion}/baked?v={version}'.format( assertion=assertion.entity_id, version=obi_version ), follow=True) if obi_version == UNVERSIONED_BAKED_VERSION: # current_obi_versions aren't re-baked expanded self.verify_baked_image_response(assertion, response, obi_version=obi_version) else: self.verify_baked_image_response( assertion, response, obi_version=obi_version, expand_badgeclass=True, expand_issuer=True, include_extra=True )
class OpenBadgesContextCache(BaseCache): OPEN_BADGES_CONTEXT_V2_URI = OBI_VERSION_CONTEXT_IRIS.get('2_0') OPEN_BADGE_CONTEXT_CACHE_KEY = 'OPEN_BADGE_CONTEXT_CACHE_KEY' FORTY_EIGHT_HOURS_IN_SECONDS = 60 * 60 * 24 * 2 def __init__(self, *args, **kwargs): super(OpenBadgesContextCache, self).__init__(*args, **kwargs) cached_context = self._get_cached_content() if cached_context: self._intialize_instance_attributes(cached_context) else: self._set_cached_content() self._intialize_instance_attributes(self._get_cached_content()) def _get_cached_content(self): return cache.get(self.OPEN_BADGE_CONTEXT_CACHE_KEY, None) def _set_cached_content(self): self.session = requests_cache.CachedSession(backend='memory', expire_after=300) response = self.session.get( self.OPEN_BADGES_CONTEXT_V2_URI, headers={'Accept': 'application/ld+json, application/json'}) if response.status_code == 200: cache.set(self.OPEN_BADGE_CONTEXT_CACHE_KEY, { 'keys_map': self.session.cache.keys_map.copy(), 'response': self.session.cache.responses.copy() }, timeout=self.FORTY_EIGHT_HOURS_IN_SECONDS) def _intialize_instance_attributes(self, cached): self.keys_map = cached.get('keys_map', None) self.responses = cached.get('response', None)