Recentemente, tenho feito manutenção de código para um produto executado no Google App Engine. Parte disso era descobrir por que uma tarefa estava falhando repetidamente. Olhando os logs, encontrei o erro mencionado acima … Algo parecido com:
getheader() only accepts 2 arguments, 3 given.
Olhando mais profundamente, parece que isso foi desencadeado em atom.http_core
. As instruções na função que disparou o erro ( get_headers()
) foram bastante explícitas, afirmando que, enquanto você estava executando o Python2.7, ele não deveria estar chegando à parte do código em que tive falhas … então, o que acontece?
Acontece que GData tem sua própria classe HTTPResponse. Por que eles usaram uma classe do zero está além de mim, já que não cavei muito fundo. No entanto, esta classe está faltando algumas coisas. A get_headers()
função mencionada funciona atom.http_core
verificando primeiro se o objeto passado tem um método getheaders e, se não tiver, ele pega os cabeçalhos de acordo com uma lista pré-preenchida. O formato de saída é simplesmente uma lista de tuplas, pares de chaves e valores.
O próprio objeto HTTPResponse do GData tem uma getheader()
função, que é o que o código estava tentando usar originalmente, mas não aceita um valor padrão. Na verdade, se você passar uma chave que não existe, ele acionará um KeyError
. Não querendo modificar aquela função original, optei pela segunda opção, que era implementar o método da classe ausente getheaders()
,. Simples o suficiente:
def getheaders(self):
return [(k, v) for k, v in self.headers.iteritems()]
Depois disso, aquele erro específico foi embora e eu pude continuar com minha depuração e teste.