Beaker Cache reclama TypeError
Pergunta
O cache do copo reclama um TypeError.Pesquisei no Google, até rastreei o rastreador de problemas do copo, mas não consegui encontrar nada.
Eu armazeno em cache as consultas como o método a seguir
@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)
Porém, quando executo o programa, é isso que recebo;
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
Estou fazendo algo errado ou isso é um bug do copo?
Solução
Seu código chama cache.cache com um número inteiro para expirar, o que é correto, mas claramente expiratime ou storagetime termina com uma string.[Na mensagem de erro, deve ser o tempo de expiração.--ed] Então aqui está o que eu acho que aconteceu:
(1) Você chamou cache.cache com uma string que expira em algum momento.[Talvez até mesmo do cache.expire padrão nas opções do CacheManager, não tenho certeza.]
(2) Você corrigiu o bug, produzindo o código enviado (que funciona para mim).
(3) Você reexecutou o código sem excluir o diretório de cache, e então, de alguma forma, ele recuperou o estado anterior.
Posso reproduzir seu erro seguindo a prescrição acima.Você poderia excluir seu cache (tudo em cache.data_dir e cache.lock_dir) e tentar novamente?