blob: 9a98e0020bb04dcbce40c8a7669415e6a9a9ccb5 [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from recipe_engine import recipe_api
class GaeSdkApi(recipe_api.RecipeApi):
PLAT_PYTHON = 'python'
PLAT_GO = 'go'
# Map of {Platform => {Arch => (base, dirname)}}. Platform names are
# "recipe_engine/platform" values.
_PKG_MAP = {
PLAT_PYTHON: {
'all': ('google_appengine_', 'google_appengine'),
},
PLAT_GO: {
'linux-amd64': ('go_appengine_sdk_linux_amd64-', 'go_appengine'),
'mac-amd64': ('go_appengine_sdk_darwin_amd64-', 'go_appengine'),
},
}
# Map of architecture bitness to CIPD bitness suffix.
_BITS_MAP = {
64: 'amd64',
}
class PackageNotFound(Exception):
def __init__(self, plat, arch):
super(GaeSdkApi.PackageNotFound, self).__init__(
'Package not found for %s on %s' % (plat, arch))
self.plat = plat
self.arch = arch
@property
def latest_ref(self):
return 'latest'
def package_spec(self, plat, arch):
plat_dict = self._PKG_MAP.get(plat, {})
for a in (arch, 'all'):
spec = plat_dict.get(a)
if spec:
download_base, dirname = spec
pkg_name = 'infra/gae_sdk/%s/%s' % (plat, a)
return pkg_name, download_base, dirname
raise self.PackageNotFound(plat, arch)
def package(self, plat, arch=None):
arch = arch or '%s-%s' % (
self.m.platform.name, self._BITS_MAP[self.m.platform.bits])
pkg_name, _, _ = self.package_spec(plat, arch)
return pkg_name
@property
def platforms(self):
return sorted(self._PKG_MAP.keys())
@property
def all_packages(self):
for plat, arch_dict in sorted(self._PKG_MAP.items()):
for arch in sorted(arch_dict.keys()):
yield plat, arch
def fetch(self, plat, dst):
"""Fetch the AppEngine SDK for the specified platform.
Args:
plat (str): platform string, one of the PLAT_ local variables.
dst (path.Path): The destination directory to extract it.
"""
pkg = self.package(plat)
self.m.cipd.ensure(dst, {pkg: self.latest_ref})