# HG changeset patch # User Goffi # Date 1520008809 -3600 # Node ID d485e941649310e956fbd89670d01e6ac1c46964 # Parent 4e5cc45e2be74be11b088034ffb207313e6b675b core (memory/cache): common cache: host has now a common_cache attribute for data which can be shared between profiles. client.cache is for private data diff -r 4e5cc45e2be7 -r d485e9416493 src/core/sat_main.py --- a/src/core/sat_main.py Fri Mar 02 17:37:41 2018 +0100 +++ b/src/core/sat_main.py Fri Mar 02 17:40:09 2018 +0100 @@ -29,7 +29,8 @@ from sat.core.log import getLogger log = getLogger(__name__) from sat.core.constants import Const as C -from sat.memory.memory import Memory +from sat.memory import memory +from sat.memory import cache from sat.tools import trigger from sat.tools import utils from sat.tools.common import dynamic_import @@ -58,7 +59,7 @@ self.plugins = {} self.ns_map = {u'x-data': u'jabber:x:data'} # map for short name to whole namespace, # extended by plugins with registerNamespace - self.memory = Memory(self) + self.memory = memory.Memory(self) self.trigger = trigger.TriggerManager() # trigger are used to change SàT behaviour bridge_name = self.memory.getConfig('', 'bridge', 'dbus') @@ -149,6 +150,7 @@ def _postMemoryInit(self, ignore): """Method called after memory initialization is done""" + self.common_cache = cache.Cache(self, None) log.info(_("Memory initialised")) try: self._import_plugins() diff -r 4e5cc45e2be7 -r d485e9416493 src/core/xmpp.py --- a/src/core/xmpp.py Fri Mar 02 17:37:41 2018 +0100 +++ b/src/core/xmpp.py Fri Mar 02 17:40:09 2018 +0100 @@ -523,7 +523,7 @@ # but we restrict to domish.Element to make trigger treatments easier assert isinstance(obj, domish.Element) # XXX: this trigger is the last one before sending stanza on wire - # is it is intended for things like end 2 end encryption. + # it is intended for things like end 2 end encryption. # *DO NOT* cancel (i.e. return False) without very good reason # (out of band transmission for instance). # e2e should have a priority of 0 here, and out of band transmission diff -r 4e5cc45e2be7 -r d485e9416493 src/memory/cache.py --- a/src/memory/cache.py Fri Mar 02 17:37:41 2018 +0100 +++ b/src/memory/cache.py Fri Mar 02 17:40:09 2018 +0100 @@ -27,16 +27,25 @@ import os.path import time +DEFAULT_EXT = '.raw' + class Cache(object): """generic file caching""" - def __init__(self, host, profile=None): + def __init__(self, host, profile): + """ + @param profile(unicode, None): ame of the profile to set the cache for + if None, the cache will be common for all profiles + """ self.profile = profile - self.cache_dir = os.path.join( - host.memory.getConfig('', 'local_dir'), - C.CACHE_DIR, - regex.pathEscape(profile or '')) + path_elts = [host.memory.getConfig('', 'local_dir'), C.CACHE_DIR] + if profile: + path_elts.extend([u'profiles',regex.pathEscape(profile)]) + else: + path_elts.append(u'common') + self.cache_dir = os.path.join(*path_elts) + if not os.path.exists(self.cache_dir): os.makedirs(self.cache_dir) @@ -59,7 +68,7 @@ """ uid = uid.strip() if not uid: - return None + raise exceptions.InternalError(u"uid must not be empty") cache_url = self.getPath(uid) if not os.path.exists(cache_url): return None @@ -86,7 +95,7 @@ return self.getPath(cache_data['filename']) - def cacheData(self, source, uid, mime_type=u'', max_age=None, filename=None): + def cacheData(self, source, uid, mime_type=None, max_age=None, filename=None): """create cache metadata and file object to use for actual data @param source(unicode): source of the cache (should be plugin's import_name) @@ -102,21 +111,25 @@ @return(file): file object opened in write mode you have to close it yourself (hint: use with statement) """ - # FIXME: is it needed to use a separate thread? - # probably not with the little data expected with BoB cache_url = self.getPath(uid) - ext = mimetypes.guess_extension(mime_type, strict=False) - if ext is None: - log.warning(u"can't find extension for MIME type {}".format(mime_type)) - ext = '.dump' if filename is None: + if mime_type: + ext = mimetypes.guess_extension(mime_type, strict=False) + if ext is None: + log.warning(u"can't find extension for MIME type {}".format(mime_type)) + ext = DEFAULT_EXT + elif ext == u'.jpe': + ext = u'.jpg' + else: + ext = DEFAULT_EXT + mime_type = None filename = uid + ext if max_age is None: max_age = C.DEFAULT_MAX_AGE - cache_data = {'source': source, - 'filename': filename, - 'eol': int(time.time()) + max_age, - 'mime_type': mime_type, + cache_data = {u'source': source, + u'filename': filename, + u'eol': int(time.time()) + max_age, + u'mime_type': mime_type, } file_path = self.getPath(filename)