0

他の誰かがこれを見ていますか?マルチドメイン用の Google プロビジョニング API に変更が加えられたようです。作業を停止した停止中のユーザーを復元できるコードを長時間実行しています。これを行うには、Python と 2.0.17 の Python GData ライブラリ、および UpdateUser メソッドを使用します。また、同じライブラリの RetrieveUser が停止されたユーザーの姓名を返さなくなったことにも注意しました。Google apps-api-issues に問題を提出しました。これが表示されている場合はスターを付けてください。

http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3281

4

3 に答える 3

1

これは、問題を説明する簡単な例です。中断されたユーザーの RetrieveUser() から返された user_entry オブジェクトには、姓または名のプロパティ値がないことに注意してください。変更された user_entry オブジェクトが UpdateUser() に渡され、姓名の欠落値が許可されません。

#!/usr/bin/python
import sys
import gdata.apps.multidomain.client

if len(sys.argv) < 4:
  print "\nUsage:"
  print sys.argv[0], "admin_email admin_password user_email\n"
  sys.exit(0)

admin = sys.argv[1]
password = sys.argv[2]
email = sys.argv[3]
domain = ""
if '@' in admin:
  admin_name,domain = admin.split('@', 1)
else:
  print "Specify full email address of administrator.\n"
  print "\nUsage:"
  print sys.argv[0], "admin_email admin_password user_email\n"
  sys.exit(0)
if '@' not in email:
  print "Specify full email address of user.\n"
  print "\nUsage:"
  print sys.argv[0], "admin_email admin_password user_email\n"
  sys.exit(0)

md_client = gdata.apps.multidomain.client.MultiDomainProvisioningClient(
  domain=domain)
md_client.ClientLogin(email=admin, password=password, source='MDPROVISIONING')
print "Retrieve user: %s\n" %(email)
user_entry = md_client.RetrieveUser(email)
print user_entry
print ('\nRetrieve results: email: %s, suspended: %s,'
  ' first name: %s, last name: %s\n' 
  %(user_entry.email,user_entry.suspended,
    user_entry.first_name,user_entry.last_name))
print "Update user (suspend): %s\n" %(email)
user_entry.suspended = 'true'
updated_user_entry = md_client.UpdateUser(email, user_entry)
print updated_user_entry
print ('\nSuspend results: email: %s, suspended: %s,'
  ' first name: %s, last name: %s\n' 
  %(updated_user_entry.email,updated_user_entry.suspended,
    updated_user_entry.first_name,updated_user_entry.last_name))
print "Retrieve user: %s\n" %(email)
user_entry = md_client.RetrieveUser(email)
print user_entry
print ('\nRetrieve results: email: %s, suspended: %s,'
  ' first name: %s, last name: %s\n' 
  %(user_entry.email,user_entry.suspended,
    user_entry.first_name,user_entry.last_name))
print "Update user (restore): %s\n" %(email)
user_entry.suspended = 'false'
updated_user_entry = md_client.UpdateUser(email, user_entry)
print updated_user_entry
print ('\nRestore results: email: %s, suspended: %s,'
  ' first name: %s, last name: %s\n' 
  %(updated_user_entry.email,updated_user_entry.suspended,
    updated_user_entry.first_name,updated_user_entry.last_name))
于 2012-11-24T16:59:54.317 に答える
1

user1803418 に感謝します。これは、ユーザーの復元がコードではなく GAM で機能する理由を説明しています。RetrieveUser API 呼び出しでの firstName と lastName の欠如は、間違いなく Google 側の問題であり、修正する必要があります。ただし、サスペンド解除の問題は、firstName/lastName の問題によって悪化したクライアント ライブラリの欠陥であると説明したいと思います。

API は、更新ユーザー API 呼び出しで送信される更新される属性のみを必要とします。ユーザーの firstName、lastName、およびその他のオブジェクトの詳細を指定する必要はありません。これは、更新を実行するためにユーザーを取得すると、更新プロセスにかかる時間が長くなることを意味します。実際に必要な API 呼び出しは 1 つだけです。

GAM は、multidomain/client.py がリリースされる前に私が書いたマルチドメイン API 呼び出しの独自の実装を使用します。GAM の実装では、更新を実行するためにすべてのユーザー属性を設定する必要はありません。これは、 http ://code.google.com/p/google-apps-manager/source/browse/trunk/gdata/apps/multidomain/service.py#69 で確認できます。

UpdateUser() の呼び出し時に設定された属性のみが Google に送信されます。これは、GAM コマンドでユーザーのサスペンドを解除する前に、GAM をインストールして debug.gam という名前のファイルを作成することで確認できます。

ゲームの更新ユーザーが停止されました

Google への XML リクエストは最小限で、ユーザーの停止ステータスを含むいくつかのフィールドのみが表示されます。firstName と lastName はリクエストに含まれません。

したがって、ここには3つのオプションがあると思います:

1) firstName/lastName の問題については、Google からの修正を待ちます。これにより、サスペンド解除の問題も解決されるはずです。

2) multidomain/client.py UpdateUser() 関数を書き直して、更新を実行するためにすべてのユーザー属性を設定する必要がないようにします。

3) GAM のカスタム multidomain/service.py ライブラリを使用するようにコードを切り替えます。これは、ユーザーに提供された属性のみの更新をサポートするためです。

于 2012-11-25T19:24:37.930 に答える
0

Google が不足している名前をすぐに修正してくれることを願っています。マルチドメイン クライアント (gdata.apps.multidomain.client) で UpdateUser を変更すると、次のようになります。

def update_user(self, email, user_entry, **kwargs):

    user_entry = gdata.apps.multidomain.data.UserEntry(
        email=email,first_name=user_entry.first_name,
        last_name=user_entry.last_name,password=user_entry.password,
        change_password=user_entry.change_password_at_next_login,
        suspended=user_entry.suspended, is_admin=user_entry.is_admin,
        ip_whitelisted=user_entry.ip_whitelisted, quota=user_entry.quota)

    return self.update(user_entry,
                   uri=self.MakeMultidomainUserProvisioningUri(email),
                   **kwargs)
于 2012-11-26T18:44:56.423 に答える