3

Google Apps ドメイン内の組織単位で動作するコマンド ライン スクリプトを作成しようとしています。したがって、これに関する Google の多くの複雑なドキュメントを使用して、API コンソールでアプリケーションを正常に作成し、Admin SDK を有効にして、スクリプト内で正常に接続しました。ただし、ディレクトリ サービス オブジェクトを作成すると (これは成功したようです)、そのメッセージが表示されるため、操作に問題が発生します。Python API パッケージもインストールしました。これが私の現在のコードです:

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')

そのコードを実行すると、次のエラー メッセージが表示されます。

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

「my_customer」エイリアスを使用せずに試してみましたが、提供していないというエラーが表示されます。私は非常に長い間Pythonを使用していません。ユーザーエラーである可能性が非常に高いです。

4

2 に答える 2

12

Google Apps API には詳しくありませんが、

orgunits.list() は次のように定義されます。

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

したがって、これらのコマンドを実行すると:

>>> 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

次回エラーが発生した場合は、引数リストにパラメーター名を追加して、問題が解決するかどうかを確認してください。

詳しくは:

ディクショナリのアンパック演算子 (**) は、パラメーター リストの通常の引数のようには機能しません。位置引数を渡すと、これがリスト内の唯一の引数である場合、コードが代わりにキーワード引数を期待しているため、(見たように) エラーがスローされます。

unpack オペレーターは、任意のキーワード引数を受け入れて、それらを辞書で使用できます。

于 2013-11-07T17:36:56.190 に答える