Beaker Cache complains TypeError

315 views Asked by At

Beaker cache complains a TypeError. I've searched on Google, even tracked beaker's issue tracker but couldn't find anything.

I cache the queries like the following method

@staticmethod
def get_queries(query):
    @cache.cache(query, type = 'file', expire = 300)
    def load(query):
        entries = db.get_expensive_query(query)
        return entries
    return load(query)

However when I run the program, this is what I receive;

  File "/Users/ivan/project/controller/caching.py", line 15, in get_queries
      return load(query)
  File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/cache.py", line 417, in cached
    return cache[0].get_value(cache_key, createfunc=go)
  File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/cache.py", line 214, in get
    return self._get_value(key, **kw).get_value()
  File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/container.py", line 256, in get_value
    if not self._is_expired(stored, expired):
  File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/container.py", line 245, in _is_expired
    time.time() >= expiretime + storedtime
TypeError: cannot concatenate 'str' and 'float' objects

Am I doing something wrong or is this a beaker's bug?

1

There are 1 answers

1
DSM On BEST ANSWER

Your code calls cache.cache with an integer for expire, which is correct, but clearly either expiretime or storedtime is winding up with a string. [From the error message it has to be expiretime. --ed] So here's what I think happened:

(1) You called cache.cache with a string expire at some point. [Maybe even from the default cache.expire in the CacheManager opts, not sure.]

(2) You fixed the bug, producing the code you submitted (which works for me).

(3) You reran the code without deleting the cache directory, and so somehow it picked up the previous state.

I can reproduce your error by following the above prescription. Could you delete your cache (everything in cache.data_dir and cache.lock_dir) and try again?