Beispiel #1
0
    def _setConnectionName(self, name):
        self._connectionName = name
        cache = getCacheForObject(self)
        location = getLocationForCache(self)

        if cache and location:
            cache.invalidate(location)
Beispiel #2
0
    def invalidate(self):
        "Invalidate the current cached value."

        cache = getCacheForObject(self.context)
        location = getLocationForCache(self.context)
        if cache and location:
            cache.invalidate(location)
            return self.form(message=_("cache-invalidated", u"Invalidated."))
        else:
            return self.form(message=_("no-cache-associated",
                                       u"No cache associated with object."))
Beispiel #3
0
 def current_cache_url(self):
     "Returns the current cache provider's URL."
     cache = getCacheForObject(self.context)
     absolute_url = zapi.getMultiView((cache, self.request),
                                      name='absolute_url')
     try:
         return absolute_url()
     except TypeError:
         # In case the cache object is a global one and does not have a
         # location, then we just return None. 
         return None
Beispiel #4
0
    def __call__(self, **kw):
        """See zope.app.rdb.interfaces"""

        # Try to resolve arguments
        arg_values = {}
        missing = []
        for name in self._arguments.keys():
            name = name.encode('UTF-8')
            try:
                # Try to find argument in keywords
                arg_values[name] = kw[name]
            except KeyError:
                # Okay, the first try failed, so let's try to find the default
                arg = self._arguments[name]
                try:
                    arg_values[name] = arg['default']
                except KeyError:
                    # Now the argument might be optional anyways; let's check
                    try:
                        if not arg['optional']:
                            missing.append(name)
                    except KeyError:
                        missing.append(name)

        try:
            connection = self.getConnection()
        except KeyError:
            raise AttributeError("The database connection '%s' cannot be "
                                 "found." % (self.connectionName))

        query = apply(self.template, (), arg_values)
        cache = getCacheForObject(self)
        location = getLocationForCache(self)
        if cache and location:
            _marker = object()
            result = cache.query(location, {'query': query}, default=_marker)
            if result is not _marker:
                return result
        result = queryForResults(connection, query)
        if cache and location:
            cache.set(result, location, {'query': query})
        return result
Beispiel #5
0
 def testGetCacheForObj(self):
     obj = ObjectStub()
     self.assertEquals(getCacheForObject(obj), None)
     ICacheable(obj).setCacheId("my_cache")
     self.assertEquals(getCacheForObject(obj), self._cache)