image_collection_disk_storage.py (3050B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\caching\client\storage\image_collection_disk_storage.py 2 import os 3 from datetime import datetime 4 import blue 5 from caching.client.cache_entry import CacheEntry 6 from caching.client.cache_key import CacheKey 7 from caching.client.storage.base_storage import BaseCollectionStorage 8 9 class ImageCollectionDiskStorage(BaseCollectionStorage): 10 11 def __init__(self, content_id, file_extension = '.jpg'): 12 super(ImageCollectionDiskStorage, self).__init__(content_id) 13 self._file_extension = file_extension 14 self._base_uri = u'cache:/Storage/%s' % content_id 15 16 def _ensure_dir(self): 17 base_resolved = blue.paths.ResolvePathForWriting(u'cache:/Storage') 18 if not os.path.exists(base_resolved): 19 os.makedirs(base_resolved) 20 content_resolved = blue.paths.ResolvePathForWriting(self._base_uri) 21 if not os.path.exists(content_resolved): 22 os.makedirs(content_resolved) 23 24 def _resolve(self, key): 25 return blue.paths.ResolvePathForWriting(self.get_uri(key)) 26 27 def get_uri(self, key): 28 return u'%s/%s%s' % (self._base_uri, key, self._file_extension) 29 30 def get_resolved_dir(self): 31 return blue.paths.ResolvePathForWriting(self._base_uri) 32 33 def get(self, key): 34 path = self._resolve(key) 35 if os.path.exists(path): 36 return self.get_uri(key) 37 38 def get_entry(self, key): 39 path = self._resolve(key) 40 if not os.path.exists(path): 41 return None 42 stored_at = datetime.utcfromtimestamp(os.path.getmtime(path)) 43 cache_key = CacheKey(self.content_id, str(key)) 44 return CacheEntry(cache_key, self.get_uri(key), stored_at=stored_at) 45 46 def get_all(self): 47 result = {} 48 base_path = self.get_resolved_dir() 49 if os.path.exists(base_path): 50 ext_len = len(self._file_extension) 51 for file_name in os.listdir(base_path): 52 if file_name.endswith(self._file_extension): 53 key = file_name[:-ext_len] 54 result[key] = self.get_uri(key) 55 56 return result 57 58 def set(self, key, value): 59 self._ensure_dir() 60 path = self._resolve(key) 61 with open(path, 'wb') as f: 62 f.write(value) 63 64 def set_all(self, values): 65 for key, value in values.iteritems(): 66 self.set(key, value) 67 68 def invalidate(self, key): 69 uri = self.get_uri(key) 70 path = self._resolve(key) 71 if os.path.exists(path): 72 os.remove(path) 73 blue.motherLode.Delete(uri) 74 75 def clear(self): 76 base_path = self.get_resolved_dir() 77 if os.path.exists(base_path): 78 for file_name in os.listdir(base_path): 79 try: 80 os.remove(os.path.join(base_path, file_name)) 81 uri = u'%s/%s' % (self._base_uri, file_name) 82 blue.motherLode.Delete(uri) 83 except OSError: 84 pass