Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: scripts/master/buildbucket/client.py

Issue 2133263002: buildbucket: always bypass cloud endpoints server (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """This file contains buildbucket service client.""" 5 """This file contains buildbucket service client."""
6 6
7 import datetime 7 import datetime
8 import json 8 import json
9 import os 9 import os
10 import urlparse 10 import urlparse
11 11
12 from master import auth 12 from master import auth
13 from master import deferred_resource 13 from master import deferred_resource
14 from master.buildbucket import common 14 from master.buildbucket import common
15 import apiclient 15 import apiclient
16 import httplib2 16 import httplib2
17 17
18 BUILDBUCKET_HOSTNAME_PRODUCTION = 'cr-buildbucket.appspot.com' 18 BUILDBUCKET_HOSTNAME_PRODUCTION = 'cr-buildbucket.appspot.com'
19 BUILDBUCKET_HOSTNAME_TESTING = 'cr-buildbucket-test.appspot.com' 19 BUILDBUCKET_HOSTNAME_TESTING = 'cr-buildbucket-test.appspot.com'
20 20
21 THIS_DIR = os.path.dirname(os.path.abspath(os.path.realpath(__file__))) 21 THIS_DIR = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))
22 DISCOVERY_DOC_PATH = os.path.join(THIS_DIR, 'discovery_doc.json') 22 DISCOVERY_DOC_PATH = os.path.join(THIS_DIR, 'discovery_doc.json')
23 23
24 24
25 # A list of buckets for which we bypass Cloud Endpoints proxy.
26 BYPASS_ENDPOINTS_WHITELIST = {
27 'master.tryserver.infra',
28 }
29
30
31 def get_default_buildbucket_hostname(master): 25 def get_default_buildbucket_hostname(master):
32 return ( 26 return (
33 BUILDBUCKET_HOSTNAME_PRODUCTION if master.is_production_host 27 BUILDBUCKET_HOSTNAME_PRODUCTION if master.is_production_host
34 else BUILDBUCKET_HOSTNAME_TESTING) 28 else BUILDBUCKET_HOSTNAME_TESTING)
35 29
36 30
37 def create_buildbucket_service(master, hostname=None, verbose=None): 31 def create_buildbucket_service(master, hostname=None, verbose=None):
38 """Asynchronously creates buildbucket API resource. 32 """Asynchronously creates buildbucket API resource.
39 33
40 Returns: 34 Returns:
41 A DeferredResource as Deferred. 35 A DeferredResource as Deferred.
42 """ 36 """
43 hostname = hostname or get_default_buildbucket_hostname(master) 37 hostname = hostname or get_default_buildbucket_hostname(master)
44 38
45 cred_factory = deferred_resource.CredentialFactory( 39 cred_factory = deferred_resource.CredentialFactory(
46 lambda: auth.create_credentials_for_master(master), 40 lambda: auth.create_credentials_for_master(master),
47 ttl=datetime.timedelta(minutes=5), 41 ttl=datetime.timedelta(minutes=5),
48 ) 42 )
49 43
50 with open(DISCOVERY_DOC_PATH) as f: 44 with open(DISCOVERY_DOC_PATH) as f:
51 discovery_doc = json.load(f) 45 discovery_doc = json.load(f)
52 46
53 # This block of code is adapted from 47 # This block of code is adapted from
54 # https://chromium.googlesource.com/chromium/tools/build/+/08b404f/third_party /google_api_python_client/googleapiclient/discovery.py#146 48 # https://chromium.googlesource.com/chromium/tools/build/+/08b404f/third_party /google_api_python_client/googleapiclient/discovery.py#146
55 # https://chromium.googlesource.com/chromium/tools/build/+/08b404f/third_party /google_api_python_client/googleapiclient/discovery.py#218 49 # https://chromium.googlesource.com/chromium/tools/build/+/08b404f/third_party /google_api_python_client/googleapiclient/discovery.py#218
56 baseUrl = 'https://%s/%sapi/buildbucket/v1/' % (
57 hostname,
58 '' if master.buildbucket_bucket in BYPASS_ENDPOINTS_WHITELIST else '_ah/',
59 )
60 resource = apiclient.discovery.Resource( 50 resource = apiclient.discovery.Resource(
61 http=httplib2.Http(), 51 http=httplib2.Http(),
62 baseUrl=baseUrl, 52 # Note that this does not include _ah/ in URL path, which means
53 # we bypass Cloud Endpoints proxy server. See also:
54 # https://bugs.chromium.org/p/chromium/issues/detail?id=626650
55 # https://codereview.chromium.org/2117833003/
56 # https://codereview.chromium.org/2116783003/
57 baseUrl='https://%s/api/buildbucket/v1/' % hostname,
63 model=apiclient.model.JsonModel(False), 58 model=apiclient.model.JsonModel(False),
64 requestBuilder=apiclient.http.HttpRequest, 59 requestBuilder=apiclient.http.HttpRequest,
65 developerKey=None, 60 developerKey=None,
66 resourceDesc=discovery_doc, 61 resourceDesc=discovery_doc,
67 rootDesc=discovery_doc, 62 rootDesc=discovery_doc,
68 schema=apiclient.schema.Schemas(discovery_doc)) 63 schema=apiclient.schema.Schemas(discovery_doc))
69 64
70 return deferred_resource.DeferredResource( 65 return deferred_resource.DeferredResource(
71 resource, 66 resource,
72 credentials=cred_factory, 67 credentials=cred_factory,
73 max_concurrent_requests=10, 68 max_concurrent_requests=10,
74 verbose=verbose or False, 69 verbose=verbose or False,
75 log_prefix=common.LOG_PREFIX, 70 log_prefix=common.LOG_PREFIX,
76 timeout=60, 71 timeout=60,
77 ) 72 )
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698