| #!/usr/bin/python | |
| # | |
| # Copyright 2014 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. | |
| """Sample for the Group Settings API demonstrates get and update method. | |
| Usage: | |
| $ python groupsettings.py | |
| You can also get help on all the command-line flags the program understands | |
| by running: | |
| $ python groupsettings.py --help | |
| """ | |
| from __future__ import print_function | |
| __author__ = 'Shraddha Gupta <shraddhag@google.com>' | |
| from optparse import OptionParser | |
| import os | |
| import pprint | |
| import sys | |
| from googleapiclient.discovery import build | |
| import httplib2 | |
| from oauth2client.client import flow_from_clientsecrets | |
| from oauth2client.file import Storage | |
| from oauth2client.tools import run_flow | |
| # CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this | |
| # application, including client_id and client_secret, which are found | |
| # on the API Access tab on the Google APIs | |
| # Console <http://code.google.com/apis/console> | |
| CLIENT_SECRETS = 'client_secrets.json' | |
| # Helpful message to display in the browser if the CLIENT_SECRETS file | |
| # is missing. | |
| MISSING_CLIENT_SECRETS_MESSAGE = """ | |
| WARNING: Please configure OAuth 2.0 | |
| To make this sample run you will need to populate the client_secrets.json file | |
| found at: | |
| %s | |
| with information from the APIs Console <https://code.google.com/apis/console>. | |
| """ % os.path.join(os.path.dirname(__file__), CLIENT_SECRETS) | |
| def access_settings(service, groupId, settings): | |
| """Retrieves a group's settings and updates the access permissions to it. | |
| Args: | |
| service: object service for the Group Settings API. | |
| groupId: string identifier of the group@domain. | |
| settings: dictionary key-value pairs of properties of group. | |
| """ | |
| # Get the resource 'group' from the set of resources of the API. | |
| # The Group Settings API has only one resource 'group'. | |
| group = service.groups() | |
| # Retrieve the group properties | |
| g = group.get(groupUniqueId=groupId).execute() | |
| print('\nGroup properties for group %s\n' % g['name']) | |
| pprint.pprint(g) | |
| # If dictionary is empty, return without updating the properties. | |
| if not settings.keys(): | |
| print('\nGive access parameters to update group access permissions\n') | |
| return | |
| body = {} | |
| # Settings might contain null value for some keys(properties). | |
| # Extract the properties with values and add to dictionary body. | |
| for key in settings.iterkeys(): | |
| if settings[key] is not None: | |
| body[key] = settings[key] | |
| # Update the properties of group | |
| g1 = group.update(groupUniqueId=groupId, body=body).execute() | |
| print('\nUpdated Access Permissions to the group\n') | |
| pprint.pprint(g1) | |
| def main(argv): | |
| """Demos the setting of the access properties by the Groups Settings API.""" | |
| usage = 'usage: %prog [options]' | |
| parser = OptionParser(usage=usage) | |
| parser.add_option('--groupId', | |
| help='Group email address') | |
| parser.add_option('--whoCanInvite', | |
| help='Possible values: ALL_MANAGERS_CAN_INVITE, ' | |
| 'ALL_MEMBERS_CAN_INVITE') | |
| parser.add_option('--whoCanJoin', | |
| help='Possible values: ALL_IN_DOMAIN_CAN_JOIN, ' | |
| 'ANYONE_CAN_JOIN, CAN_REQUEST_TO_JOIN, ' | |
| 'CAN_REQUEST_TO_JOIN') | |
| parser.add_option('--whoCanPostMessage', | |
| help='Possible values: ALL_IN_DOMAIN_CAN_POST, ' | |
| 'ALL_MANAGERS_CAN_POST, ALL_MEMBERS_CAN_POST, ' | |
| 'ANYONE_CAN_POST, NONE_CAN_POST') | |
| parser.add_option('--whoCanViewGroup', | |
| help='Possible values: ALL_IN_DOMAIN_CAN_VIEW, ' | |
| 'ALL_MANAGERS_CAN_VIEW, ALL_MEMBERS_CAN_VIEW, ' | |
| 'ANYONE_CAN_VIEW') | |
| parser.add_option('--whoCanViewMembership', | |
| help='Possible values: ALL_IN_DOMAIN_CAN_VIEW, ' | |
| 'ALL_MANAGERS_CAN_VIEW, ALL_MEMBERS_CAN_VIEW, ' | |
| 'ANYONE_CAN_VIEW') | |
| (options, args) = parser.parse_args() | |
| if options.groupId is None: | |
| print('Give the groupId for the group') | |
| parser.print_help() | |
| return | |
| settings = {} | |
| if (options.whoCanInvite or options.whoCanJoin or options.whoCanPostMessage | |
| or options.whoCanPostMessage or options.whoCanViewMembership) is None: | |
| print('No access parameters given in input to update access permissions') | |
| parser.print_help() | |
| else: | |
| settings = {'whoCanInvite': options.whoCanInvite, | |
| 'whoCanJoin': options.whoCanJoin, | |
| 'whoCanPostMessage': options.whoCanPostMessage, | |
| 'whoCanViewGroup': options.whoCanViewGroup, | |
| 'whoCanViewMembership': options.whoCanViewMembership} | |
| # Set up a Flow object to be used if we need to authenticate. | |
| FLOW = flow_from_clientsecrets(CLIENT_SECRETS, | |
| scope='https://www.googleapis.com/auth/apps.groups.settings', | |
| message=MISSING_CLIENT_SECRETS_MESSAGE) | |
| storage = Storage('groupsettings.dat') | |
| credentials = storage.get() | |
| if credentials is None or credentials.invalid: | |
| print('invalid credentials') | |
| # Save the credentials in storage to be used in subsequent runs. | |
| credentials = run_flow(FLOW, storage) | |
| # Create an httplib2.Http object to handle our HTTP requests and authorize it | |
| # with our good Credentials. | |
| http = httplib2.Http() | |
| http = credentials.authorize(http) | |
| service = build('groupssettings', 'v1', http=http) | |
| access_settings(service=service, groupId=options.groupId, settings=settings) | |
| if __name__ == '__main__': | |
| main(sys.argv) |