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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top