1 # 2 # Copyright (C) 2015 The Android Open Source Project 3 # 4 # Licensed under the Apache License, Version 2.0 (the 'License'); 5 # you may not use this file except in compliance with the License. 6 # You may obtain a copy of the License at 7 # 8 # http://www.apache.org/licenses/LICENSE-2.0 9 # 10 # Unless required by applicable law or agreed to in writing, software 11 # distributed under the License is distributed on an 'AS IS' BASIS, 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 # See the License for the specific language governing permissions and 14 # limitations under the License. 15 # 16 import base64 17 import httplib2 18 19 import config 20 21 22 def get_body(msg): 23 if 'attachmentId' in msg['payload']['body']: 24 raise NotImplementedError('Handling of messages contained in ' 25 'attachments not yet implemented.') 26 b64_body = msg['payload']['body']['data'] 27 return base64.urlsafe_b64decode(b64_body.encode('ASCII')) 28 29 30 def build_service(): 31 from apiclient.discovery import build 32 from oauth2client.client import flow_from_clientsecrets 33 from oauth2client.file import Storage 34 from oauth2client.tools import run 35 36 OAUTH_SCOPE = 'https://www.googleapis.com/auth/gmail.modify' 37 STORAGE = Storage('oauth.storage') 38 39 # Start the OAuth flow to retrieve credentials 40 flow = flow_from_clientsecrets(config.client_secret_file, 41 scope=OAUTH_SCOPE) 42 http = httplib2.Http() 43 44 # Try to retrieve credentials from storage or run the flow to generate them 45 credentials = STORAGE.get() 46 if credentials is None or credentials.invalid: 47 credentials = run(flow, STORAGE, http=http) 48 49 http = credentials.authorize(http) 50 return build('gmail', 'v1', http=http) 51 52 53 def get_gerrit_label(labels): 54 for label in labels: 55 if label['name'] == 'gerrit': 56 return label['id'] 57 return None 58 59 60 def get_all_messages(service, label): 61 msgs = [] 62 response = service.users().messages().list( 63 userId='me', labelIds=label).execute() 64 if 'messages' in response: 65 msgs.extend(response['messages']) 66 while 'nextPageToken' in response: 67 page_token = response['nextPageToken'] 68 response = service.users().messages().list( 69 userId='me', pageToken=page_token).execute() 70 msgs.extend(response['messages']) 71 return msgs 72