| # | 
 | # Copyright (C) 2015 The Android Open Source Project | 
 | # | 
 | # 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. | 
 | # | 
 | import base64 | 
 | import httplib2 | 
 |  | 
 | import config | 
 |  | 
 |  | 
 | def get_body(msg): | 
 |     if 'attachmentId' in msg['payload']['body']: | 
 |         raise NotImplementedError('Handling of messages contained in ' | 
 |                                   'attachments not yet implemented.') | 
 |     b64_body = msg['payload']['body']['data'] | 
 |     return base64.urlsafe_b64decode(b64_body.encode('ASCII')) | 
 |  | 
 |  | 
 | def build_service(): | 
 |     from apiclient.discovery import build | 
 |     from oauth2client.client import flow_from_clientsecrets | 
 |     from oauth2client.file import Storage | 
 |     from oauth2client.tools import run | 
 |  | 
 |     OAUTH_SCOPE = 'https://www.googleapis.com/auth/gmail.modify' | 
 |     STORAGE = Storage('oauth.storage') | 
 |  | 
 |     # Start the OAuth flow to retrieve credentials | 
 |     flow = flow_from_clientsecrets(config.client_secret_file, | 
 |                                    scope=OAUTH_SCOPE) | 
 |     http = httplib2.Http() | 
 |  | 
 |     # Try to retrieve credentials from storage or run the flow to generate them | 
 |     credentials = STORAGE.get() | 
 |     if credentials is None or credentials.invalid: | 
 |         credentials = run(flow, STORAGE, http=http) | 
 |  | 
 |     http = credentials.authorize(http) | 
 |     return build('gmail', 'v1', http=http) | 
 |  | 
 |  | 
 | def get_gerrit_label(labels): | 
 |     for label in labels: | 
 |         if label['name'] == 'gerrit': | 
 |             return label['id'] | 
 |     return None | 
 |  | 
 |  | 
 | def get_all_messages(service, label): | 
 |     msgs = [] | 
 |     response = service.users().messages().list( | 
 |         userId='me', labelIds=label).execute() | 
 |     if 'messages' in response: | 
 |         msgs.extend(response['messages']) | 
 |     while 'nextPageToken' in response: | 
 |         page_token = response['nextPageToken'] | 
 |         response = service.users().messages().list( | 
 |             userId='me', pageToken=page_token).execute() | 
 |         msgs.extend(response['messages']) | 
 |     return msgs |