| OLD | NEW |
| 1 # Copyright 2008 Google Inc. | 1 # Copyright 2008 Google Inc. |
| 2 # | 2 # |
| 3 # Licensed under the Apache License, Version 2.0 (the "License"); | 3 # Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 # you may not use this file except in compliance with the License. | 4 # you may not use this file except in compliance with the License. |
| 5 # You may obtain a copy of the License at | 5 # You may obtain a copy of the License at |
| 6 # | 6 # |
| 7 # http://www.apache.org/licenses/LICENSE-2.0 | 7 # http://www.apache.org/licenses/LICENSE-2.0 |
| 8 # | 8 # |
| 9 # Unless required by applicable law or agreed to in writing, software | 9 # Unless required by applicable law or agreed to in writing, software |
| 10 # distributed under the License is distributed on an "AS IS" BASIS, | 10 # distributed under the License is distributed on an "AS IS" BASIS, |
| 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 # See the License for the specific language governing permissions and | 12 # See the License for the specific language governing permissions and |
| 13 # limitations under the License. | 13 # limitations under the License. |
| 14 | 14 |
| 15 """Rietveld-BuildBucket integration module.""" | 15 """Rietveld-BuildBucket integration module.""" |
| 16 | 16 |
| 17 import datetime | 17 import datetime |
| 18 import json | 18 import json |
| 19 import logging | 19 import logging |
| 20 import os | 20 import os |
| 21 import urllib | 21 import urllib |
| 22 | 22 |
| 23 from google.appengine.api import app_identity | |
| 24 from google.appengine.api import urlfetch | 23 from google.appengine.api import urlfetch |
| 25 from google.appengine.api import users | 24 from google.appengine.api import users |
| 26 from google.appengine.ext import ndb | 25 from google.appengine.ext import ndb |
| 27 | 26 |
| 28 from django.conf import settings | |
| 29 | |
| 30 from codereview import common | 27 from codereview import common |
| 31 from codereview import models | 28 from codereview import models |
| 32 | 29 |
| 33 EPOCH = datetime.datetime.utcfromtimestamp(0) | 30 EPOCH = datetime.datetime.utcfromtimestamp(0) |
| 34 BUILDBUCKET_HOSTNAME = ( | 31 BUILDBUCKET_HOSTNAME = ( |
| 35 'cr-buildbucket-test.appspot.com' if common.IS_DEV | 32 'cr-buildbucket-test.appspot.com' if common.IS_DEV |
| 36 else 'cr-buildbucket.appspot.com') | 33 else 'cr-buildbucket.appspot.com') |
| 37 BUILDBUCKET_API_ROOT = ( | 34 BUILDBUCKET_API_ROOT = ( |
| 38 'https://%s/_ah/api/buildbucket/v1' % BUILDBUCKET_HOSTNAME) | 35 'https://%s/_ah/api/buildbucket/v1' % BUILDBUCKET_HOSTNAME) |
| 39 | 36 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 timestamp=timestamp, | 130 timestamp=timestamp, |
| 134 clobber=read_prop('clobber', bool), | 131 clobber=read_prop('clobber', bool), |
| 135 tests=read_prop('testfilter', list) or [], | 132 tests=read_prop('testfilter', list) or [], |
| 136 project=read_prop('project', basestring), | 133 project=read_prop('project', basestring), |
| 137 requester=requester, | 134 requester=requester, |
| 138 category=read_prop('category', basestring), | 135 category=read_prop('category', basestring), |
| 139 build_properties=json.dumps(properties, sort_keys=True), | 136 build_properties=json.dumps(properties, sort_keys=True), |
| 140 ) | 137 ) |
| 141 | 138 |
| 142 | 139 |
| 143 def get_self_hostname(): | 140 ################################################################################ |
| 144 """Returns hostname to use for buildset tag. | 141 ## Gettings builds. |
| 145 | |
| 146 See tag conventions http://cr-buildbucket.appspot.com/#docs/conventions | |
| 147 """ | |
| 148 app_id = app_identity.get_application_id() | |
| 149 return settings.PREFERRED_DOMAIN_NAMES.get(app_id) | |
| 150 | 142 |
| 151 | 143 |
| 152 def get_builds_for_patchset(issue_id, patchset_id): | 144 def get_builds_for_patchset(issue_id, patchset_id): |
| 153 """Queries BuildBucket for builds associated with the patchset. | 145 """Queries BuildBucket for builds associated with the patchset. |
| 154 | 146 |
| 155 Requests for max 500 builds and does not check "next_cursor". Currently if | 147 Requests for max 500 builds and does not check "next_cursor". Currently if |
| 156 more than 100 builds are requested, only 100 are returned. Presumably there | 148 more than 100 builds are requested, only 100 are returned. Presumably there |
| 157 will be no patchsets with >100 builds. | 149 will be no patchsets with >100 builds. |
| 158 | 150 |
| 159 Returns: | 151 Returns: |
| 160 A list of buildbucket build dicts. | 152 A list of buildbucket build dicts. |
| 161 """ | 153 """ |
| 162 hostname = get_self_hostname() | 154 hostname = common.get_preferred_domain_name() |
| 163 if not hostname: | 155 if not hostname: |
| 164 logging.error( | 156 logging.error( |
| 165 'Preferred domain name for this app is not set. ' | 157 'Preferred domain name for this app is not set. ' |
| 166 'See PREFERRED_DOMAIN_NAMES in settings.py') | 158 'See PREFERRED_DOMAIN_NAMES in settings.py') |
| 167 return [] | 159 return [] |
| 168 | 160 |
| 169 buildset_tag = BUILDSET_TAG_FORMAT.format( | 161 buildset_tag = BUILDSET_TAG_FORMAT.format( |
| 170 hostname=hostname, | 162 hostname=hostname, |
| 171 issue=issue_id, | 163 issue=issue_id, |
| 172 patch=patchset_id, | 164 patch=patchset_id, |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 return None | 237 return None |
| 246 return value | 238 return value |
| 247 | 239 |
| 248 | 240 |
| 249 def timestamp_to_datetime(timestamp): | 241 def timestamp_to_datetime(timestamp): |
| 250 if timestamp is None: | 242 if timestamp is None: |
| 251 return None | 243 return None |
| 252 if isinstance(timestamp, basestring): | 244 if isinstance(timestamp, basestring): |
| 253 timestamp = int(timestamp) | 245 timestamp = int(timestamp) |
| 254 return EPOCH + datetime.timedelta(microseconds=timestamp) | 246 return EPOCH + datetime.timedelta(microseconds=timestamp) |
| OLD | NEW |