blob: 784598870c166cf1ec2942125a54f505ab27438d [file] [log] [blame]
# Copyright 2010 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""AppsClient adds Client Architecture to Provisioning API."""
__author__ = '<Shraddha Gupta shraddhag@google.com>'
import gdata.apps.data
import gdata.client
import gdata.service
class AppsClient(gdata.client.GDClient):
"""Client extension for the Google Provisioning API service.
Attributes:
host: string The hostname for the Provisioning API service.
api_version: string The version of the Provisioning API.
"""
host = 'apps-apis.google.com'
api_version = '2.0'
auth_service = 'apps'
auth_scopes = gdata.gauth.AUTH_SCOPES['apps']
def __init__(self, domain, auth_token=None, **kwargs):
"""Constructs a new client for the Provisioning API.
Args:
domain: string Google Apps domain name.
auth_token: (optional) gdata.gauth.ClientLoginToken, AuthSubToken, or
OAuthToken which authorizes client to make calls to Provisioning API.
"""
gdata.client.GDClient.__init__(self, auth_token=auth_token, **kwargs)
self.domain = domain
def _baseURL(self):
return '/a/feeds/%s' % self.domain
def _userURL(self):
return '%s/user/%s' % (self._baseURL(), self.api_version)
def _nicknameURL(self):
return '%s/nickname/%s' % (self._baseURL(), self.api_version)
def RetrieveAllPages(self, feed, desired_class=gdata.data.GDFeed):
"""Retrieve all pages and add all elements.
Args:
feed: gdata.data.GDFeed object with linked elements.
desired_class: type of feed to be returned.
Returns:
desired_class: subclass of gdata.data.GDFeed.
"""
next = feed.GetNextLink()
while next is not None:
next_feed = self.GetFeed(next.href, desired_class=desired_class)
for a_entry in next_feed.entry:
feed.entry.append(a_entry)
next = next_feed.GetNextLink()
return feed
def CreateUser(self, user_name, family_name, given_name, password,
suspended=False, admin=None, quota_limit=None,
password_hash_function=None,
agreed_to_terms=None, change_password=None):
"""Create a user account."""
uri = self._userURL()
user_entry = gdata.apps.data.UserEntry()
user_entry.login = gdata.apps.data.Login(user_name=user_name,
password=password, suspended=suspended, admin=admin,
hash_function_name=password_hash_function,
agreed_to_terms=agreed_to_terms,
change_password=change_password)
user_entry.name = gdata.apps.data.Name(family_name=family_name,
given_name=given_name)
return self.Post(user_entry, uri)
def RetrieveUser(self, user_name):
"""Retrieve a user account.
Args:
user_name: string user_name to be retrieved.
Returns:
gdata.apps.data.UserEntry
"""
uri = '%s/%s' % (self._userURL(), user_name)
return self.GetEntry(uri, desired_class=gdata.apps.data.UserEntry)
def RetrievePageOfUsers(self, start_username=None):
"""Retrieve one page of users in this domain.
Args:
start_username: string user to start from for retrieving a page of users.
Returns:
gdata.apps.data.UserFeed
"""
uri = self._userURL()
if start_username is not None:
uri += '?startUsername=%s' % start_username
return self.GetFeed(uri, desired_class=gdata.apps.data.UserFeed)
def RetrieveAllUsers(self):
"""Retrieve all users in this domain.
Returns:
gdata.apps.data.UserFeed
"""
ret = self.RetrievePageOfUsers()
# pagination
return self.RetrieveAllPages(ret, gdata.apps.data.UserFeed)
def UpdateUser(self, user_name, user_entry):
"""Update a user account.
Args:
user_name: string user_name to be updated.
user_entry: gdata.apps.data.UserEntry updated user entry.
Returns:
gdata.apps.data.UserEntry
"""
uri = '%s/%s' % (self._userURL(), user_name)
return self.Update(entry=user_entry, uri=uri)
def DeleteUser(self, user_name):
"""Delete a user account."""
uri = '%s/%s' % (self._userURL(), user_name)
self.Delete(uri)
def CreateNickname(self, user_name, nickname):
"""Create a nickname for a user.
Args:
user_name: string user whose nickname is being created.
nickname: string nickname.
Returns:
gdata.apps.data.NicknameEntry
"""
uri = self._nicknameURL()
nickname_entry = gdata.apps.data.NicknameEntry()
nickname_entry.login = gdata.apps.data.Login(user_name=user_name)
nickname_entry.nickname = gdata.apps.data.Nickname(name=nickname)
return self.Post(nickname_entry, uri)
def RetrieveNickname(self, nickname):
"""Retrieve a nickname.
Args:
nickname: string nickname to be retrieved.
Returns:
gdata.apps.data.NicknameEntry
"""
uri = '%s/%s' % (self._nicknameURL(), nickname)
return self.GetEntry(uri, desired_class=gdata.apps.data.NicknameEntry)
def RetrieveNicknames(self, user_name):
"""Retrieve nicknames of the user.
Args:
user_name: string user whose nicknames are retrieved.
Returns:
gdata.apps.data.NicknameFeed
"""
uri = '%s?username=%s' % (self._nicknameURL(), user_name)
ret = self.GetFeed(uri, desired_class=gdata.apps.data.NicknameFeed)
# pagination
return self.RetrieveAllPages(ret, gdata.apps.data.NicknameFeed)
def DeleteNickname(self, nickname):
"""Delete a nickname."""
uri = '%s/%s' % (self._nicknameURL(), nickname)
self.Delete(uri)