¿Por qué recibo un error "TypeError: Method () toma exactamente 1 argumento (2 dado) en Python usando la API de directorio?

StackOverflow https://stackoverflow.com/questions/19842347

Pregunta

Estoy intentando escribir un script de línea de comandos que funcione con unidades de organización dentro de nuestro dominio de Google Apps. Por lo tanto, utilizando la documentación complicada de Google en esto, he creado con éxito la aplicación en la consola API, enciende SDK de administración y he conectado con éxito dentro de mi script. Sin embargo, cuando creo el objeto de servicio de directorio (que parece tener éxito) tengo problemas para interactuar con él porque recibo ese mensaje. También he instalado el paquete API de Python. Aquí está mi código actual:

import argparse
import httplib2
import os
import sys
from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials

f = file("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12", "rb")
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials(
    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
    key,
    scope = "https://www.googleapis.com/auth/admin.directory.orgunit"
)

http = httplib2.Http()
http = credentials.authorize(http)

directoryservice = build("admin", "directory_v1", http=http)
orgunits = directoryservice.orgunits()

thelist = orgunits.list('my_customer')

Cuando ejecuto ese código recibo el mensaje de error:

Traceback (most recent call last):
  File "test.py", line 33, in <module>
    orgunits.list('my_customer')
TypeError: method() takes exactly 1 argument (2 given)

Intenté sin usar el alias "my_customer", pero luego el error se queja de que no lo he proporcionado. Cualquier ayuda sería apreciada, no he usado Python en mucho tiempo; Muy bien puede ser un error de usuario.

¿Fue útil?

Solución

No estoy familiarizado con la API de Google Apps, pero parece que

Orgunits.list () se define como:

class FactoryObject(object):
    # ... Code Here ...

    def list(self, **kwargs):
         if 'some_parameter' not in kwargs:
             raise Exception('some_parameter required argument')
         # ... code that uses kwargs['some_parameter']
         return True

Entonces, si ejecuto estos comandos:

>>> orgunits.list()
Exception: some_parameter required argument
>>> orgunits.list('my_customer')
TypeError: list() takes exactly 1 argument (2 given)
>>> orgunits.list(some_parameter='my_customer')
True

Entonces, la próxima vez que vea el error, intente agregar el nombre del parámetro a su lista de argumentos y vea si eso resuelve su problema.

Más información:

El Operador de Desempacada del Diccionario (**) no actúa como un argumento normal en una lista de parámetros. Si pasa un argumento posicional, cuando este es el único argumento en la lista, entonces lanzará un error (como lo vio) porque el código espera un argumento de palabras clave.

El operador de desagüe puede aceptar argumentos arbitrarios de palabras clave y usarlos en un diccionario.

Otros consejos

¿Podría ser que Python está pasando? self ¿automáticamente? También soy un poco nuevo en Python, así que no estoy seguro de cuándo Python hace eso, pero me ha causado cierta confusión en el pasado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top