def generate_sdk(ctx, sdk_type, outdir): # type: (click.Context, str, str) -> None config = create_config_obj(ctx) session = create_botocore_session(profile=config.profile, debug=ctx.obj['debug']) client = TypedAWSClient(session) rest_api_id = client.get_rest_api_id(config.app_name) stage_name = config.stage if rest_api_id is None: click.echo("Could not find API ID, has this application " "been deployed?") raise click.Abort() zip_stream = client.get_sdk(rest_api_id, stage=stage_name, sdk_type=sdk_type) tmpdir = tempfile.mkdtemp() with open(os.path.join(tmpdir, 'sdk.zip'), 'wb') as f: f.write(zip_stream.read()) tmp_extract = os.path.join(tmpdir, 'extracted') with zipfile.ZipFile(os.path.join(tmpdir, 'sdk.zip')) as z: z.extractall(tmp_extract) # The extract zip dir will have a single directory: # ['apiGateway-js-sdk'] dirnames = os.listdir(tmp_extract) if len(dirnames) == 1: full_dirname = os.path.join(tmp_extract, dirnames[0]) if os.path.isdir(full_dirname): final_dirname = '%s-js-sdk' % config.app_name full_renamed_name = os.path.join(tmp_extract, final_dirname) os.rename(full_dirname, full_renamed_name) shutil.move(full_renamed_name, outdir) return click.echo("The downloaded SDK had an unexpected directory structure: %s" % (', '.join(dirnames))) raise click.Abort()
def test_get_sdk(self, stubbed_session): apig = stubbed_session.stub('apigateway') apig.get_sdk(restApiId='rest-api-id', stageName='dev', sdkType='javascript').returns({'body': 'foo'}) stubbed_session.activate_stubs() awsclient = TypedAWSClient(stubbed_session) response = awsclient.get_sdk('rest-api-id', 'dev', 'javascript') stubbed_session.verify_stubs() assert response == 'foo'
def test_get_sdk(self, stubbed_session): apig = stubbed_session.stub('apigateway') apig.get_sdk( restApiId='rest-api-id', stageName='dev', sdkType='javascript').returns({'body': 'foo'}) stubbed_session.activate_stubs() awsclient = TypedAWSClient(stubbed_session) response = awsclient.get_sdk('rest-api-id', 'dev', 'javascript') stubbed_session.verify_stubs() assert response == 'foo'