예제 #1
0
파일: base.py 프로젝트: nsrishankar/pymor
 def sid(self):
     sid = getattr(self, '__sid', None)
     if sid:
         return sid
     else:
         self.__sid = sid = generate_sid(dict(self))
         return sid
예제 #2
0
파일: cache.py 프로젝트: renemilk/pyMor
    def _cached_method_call(self, method, pass_self, argnames, defaults, args, kwargs):
            if not cache_regions:
                default_regions()
            try:
                region = cache_regions[self.cache_region]
            except KeyError:
                raise KeyError('No cache region "{}" found'.format(self.cache_region))

            # compute id for self
            if region.persistent:
                self_id = getattr(self, 'sid')
                if not self_id:     # this can happen when cache_region is already set by the class to
                                    # a persistent region
                    self_id = self.generate_sid()
            else:
                self_id = self.uid

            # ensure that passing a value as positional or keyword argument does not matter
            kwargs.update(zip(argnames, args))

            # ensure the values of optional parameters enter the cache key
            if defaults:
                kwargs = dict(defaults, **kwargs)

            key = generate_sid((method.__name__, self_id, kwargs, defaults_sid()))
            found, value = region.get(key)
            if found:
                return value
            else:
                self.logger.debug('creating new cache entry for {}.{}'
                                  .format(self.__class__.__name__, method.__name__))
                value = method(self, **kwargs) if pass_self else method(**kwargs)
                region.set(key, value)
                return value
예제 #3
0
파일: cache.py 프로젝트: sdrave/pymor
    def __call__(self, im_self, *args, **kwargs):
        """Via the magic that is partial functions returned from __get__, im_self is the instance object of the class
        we're decorating a method of and [kw]args are the actual parameters to the decorated method"""
        if not cache_regions:
            default_regions()
        try:
            region = cache_regions[im_self.cache_region]
        except KeyError:
            raise KeyError('No cache region "{}" found'.format(im_self.cache_region))
        if not region.enabled:
            return self.decorated_function(im_self, *args, **kwargs)

        # ensure that passing a value as positional or keyword argument does not matter
        kwargs.update(zip(self.argnames, args))

        # ensure the values of optional parameters enter the cache key
        defaults = self.defaults
        if defaults:
            kwargs = dict(defaults, **kwargs)

        key = generate_sid((self.decorated_function.__name__, getattr(im_self, 'sid', im_self.uid),
                            kwargs,
                            defaults_sid()))
        found, value = region.get(key)
        if found:
            return value
        else:
            im_self.logger.debug('creating new cache entry for {}.{}'
                                 .format(im_self.__class__.__name__, self.decorated_function.__name__))
            value = self.decorated_function(im_self, **kwargs)
            region.set(key, value)
            return value
예제 #4
0
파일: defaults.py 프로젝트: sdrave/pymor
 def sid(self):
     sid = getattr(self, '_sid', None)
     if not sid:
         from pymor.core.interfaces import generate_sid
         user_dict = {k: v['user'] if 'user' in v else v['file']
                      for k, v in self._data.items() if 'user' in v or 'file' in v and not v['sid_ignore']}
         self._sid = sid = generate_sid(user_dict)
     return sid
예제 #5
0
파일: defaults.py 프로젝트: JuliaBru/pymor
    def sid(self):
        sid = getattr(self, "_sid", None)
        if not sid:
            from pymor.core.interfaces import generate_sid

            user_dict = {
                k: v["user"] if "user" in v else v["file"]
                for k, v in self._data.items()
                if "user" in v or "file" in v and not v["sid_ignore"]
            }
            self._sid = sid = generate_sid(user_dict)
        return sid
예제 #6
0
    def _cached_method_call(self, method, pass_self, argnames, defaults, args,
                            kwargs):
        if not cache_regions:
            default_regions()
        try:
            region = cache_regions[self.cache_region]
        except KeyError:
            raise KeyError('No cache region "{}" found'.format(
                self.cache_region))

        # compute id for self
        if region.persistent:
            self_id = getattr(self, 'sid')
            if not self_id:  # this can happen when cache_region is already set by the class to
                # a persistent region
                self_id = self.generate_sid()
        else:
            self_id = self.uid

        # ensure that passing a value as positional or keyword argument does not matter
        kwargs.update(zip(argnames, args))

        # ensure the values of optional parameters enter the cache key
        if defaults:
            kwargs = dict(defaults, **kwargs)

        key = generate_sid((method.__name__, self_id, kwargs, defaults_sid()))
        found, value = region.get(key)
        if found:
            return value
        else:
            self.logger.debug('creating new cache entry for {}.{}'.format(
                self.__class__.__name__, method.__name__))
            value = method(self, **kwargs) if pass_self else method(**kwargs)
            region.set(key, value)
            return value