/ / No entiendo este Python TypeError - python, linode

No entiendo este Python TypeError - python, linode

Estoy tratando de usar el API de Linode Junto con esto linode-python SDK para gestionar mis servidores Linode. Sin embargo, estoy obteniendo un TypeError que no entiendo cuando ejecuto el linode-disk-list () mando.

Así es como la API de linode-python define el método al que estoy llamando. Como puede ver, se requiere un ID de Linode.

@__api_request(required=["LinodeID"],
returns=[{u"CREATE_DT": u"YYYY-MM-DD hh:mm:ss.0",
u"DISKID": "Disk ID",
u"ISREADONLY": "0 or 1",
u"LABEL": "Disk label",
u"LINODEID": "Linode ID",
u"SIZE": "Size of disk (MB)",
u"STATUS": "Status flag",
u"TYPE": "in ["ext3", "swap", "raw"]",
u"UPDATE_DT": u"YYYY-MM-DD hh:mm:ss.0"}])
def linode_disk_list(self, request):
"""Lists all disk images associated with a Linode."""
pass

Mi código crea una instancia de la API de Python de Linode según las instrucciones del SDK y luego llama al método linode_disk_list:

from linode import api as linode_api

api = linode_api.Api(<my_api_key>)
linode_id = 1800300
disks = api.linode_disk_list(linode_id)

Mi código genera este error:

TypeError: wrapper() takes exactly 1 argument (2 given)

Sé que estoy creando la instancia de api correctamente, ya que la estoy utilizando para llamar con éxito al método linode_ip_list antes de llamar al método de la lista de discos.

Solo para ver qué sucede, si no proporciono el argumento linode_id, obtengo este error:

linode.api.MissingRequiredArgument: "LinodeID"

Si llamo al método con un ID de linodo, el errordice que le estoy dando dos argumentos. Pero si no le doy ningún argumento, dice que me estoy perdiendo un argumento. En este punto, no estoy seguro de si LinodeID debería ser un número entero o una cadena, pero obtener el mismo error en cualquier caso. ¿Cómo llamo a este método para no obtener el argumento TypeError?

¡Gracias!

Respuestas

2 para la respuesta № 1

los @__api_request decorador toma una lista para cada uno de sus argumentos:

def __api_request(required=[], optional=[], returns=[]):
"""Decorator to define required and optional parameters"""
for k in required:
[...]

Pero, estas pasando en un entero

linode_id = 1800300
disks = api.linode_disk_list(linode_id)

Y está recibiendo un mensaje de error conflictivo sobre la cantidad de parámetros debido a que wrapper() método toma una cantidad arbitraria de argumentos de palabras clave

 def wrapper(self, **kw):