def create_default_deployer(session, config, ui): # type: (Session, Config, UI) -> Deployer client = TypedAWSClient(session) osutils = OSUtils() pip_runner = PipRunner(pip=SubprocessPip(osutils=osutils), osutils=osutils) dependency_builder = PipDependencyBuilder(osutils=osutils, pip_runner=pip_runner) return Deployer( application_builder=ApplicationGraphBuilder(), deps_builder=DependencyBuilder(), build_stage=BuildStage(steps=[ InjectDefaults(), DeploymentPackager(packager=LambdaDeploymentPackager( osutils=osutils, dependency_builder=dependency_builder, ui=UI(), ), ), PolicyGenerator(policy_gen=AppPolicyGenerator(osutils=osutils), ), SwaggerBuilder(swagger_generator=TemplatedSwaggerGenerator(), ) ], ), plan_stage=PlanStage( osutils=osutils, remote_state=RemoteState( client, config.deployed_resources(config.chalice_stage)), ), sweeper=UnreferencedResourcePlanner(), executor=Executor(client, ui), recorder=ResultsRecorder(osutils=osutils), )
def create_app_packager(config, package_format='cloudformation', merge_template=None): # type: (Config, str, Optional[str]) -> AppPackager osutils = OSUtils() ui = UI() application_builder = ApplicationGraphBuilder() deps_builder = DependencyBuilder() post_processors = [] # type: List[TemplatePostProcessor] generator = None # type: Union[None, TemplateGenerator] if package_format == 'cloudformation': build_stage = create_build_stage(osutils, ui, CFNSwaggerGenerator()) post_processors.extend([ SAMCodeLocationPostProcessor(osutils=osutils), TemplateMergePostProcessor(osutils=osutils, merger=TemplateDeepMerger(), merge_template=merge_template) ]) generator = SAMTemplateGenerator(config) else: build_stage = create_build_stage(osutils, ui, TerraformSwaggerGenerator()) generator = TerraformGenerator(config) post_processors.append( TerraformCodeLocationPostProcessor(osutils=osutils)) resource_builder = ResourceBuilder(application_builder, deps_builder, build_stage) return AppPackager(generator, resource_builder, CompositePostProcessor(post_processors), osutils)
def _create_deployer( session, # type: Session config, # type: Config ui, # type: UI executor_cls, # type: Type[BaseExecutor] recorder_cls, # type: Type[ResultsRecorder] ): # type: (...) -> Deployer client = TypedAWSClient(session) osutils = OSUtils() return Deployer( application_builder=ApplicationGraphBuilder(), deps_builder=DependencyBuilder(), build_stage=create_build_stage( osutils, UI(), TemplatedSwaggerGenerator(), ), plan_stage=PlanStage( osutils=osutils, remote_state=RemoteState( client, config.deployed_resources(config.chalice_stage)), ), sweeper=ResourceSweeper(), executor=executor_cls(client, ui), recorder=recorder_cls(osutils=osutils), )
def __init__(self, osutils=None): # type: (Optional[OSUtils]) -> None self._mtime_cache = {} # type: Dict[str, float] self._shutdown_event = threading.Event() self._thread = None # type: Optional[threading.Thread] if osutils is None: osutils = OSUtils() self._osutils = osutils
def __init__(self, osutils=None, import_string=None): # type: (Optional[OSUtils], OptStr) -> None if osutils is None: osutils = OSUtils() self._osutils = osutils if import_string is None: import_string = pip_import_string() self._import_string = import_string
def __init__(self, osutils=None, dependency_builder=None): # type: (Optional[OSUtils], Optional[DependencyBuilder]) -> None if osutils is None: osutils = OSUtils() self._osutils = osutils if dependency_builder is None: dependency_builder = DependencyBuilder(self._osutils) self._dependency_builder = dependency_builder
def local_app(tmpdir): temp_dir_path = str(tmpdir) OSUtils().copytree(PROJECT_DIR, temp_dir_path) old_dir = os.getcwd() try: os.chdir(temp_dir_path) yield temp_dir_path finally: os.chdir(old_dir)
def __init__(self, directory, filename, osutils=None): # type: (str, str, Optional[OSUtils]) -> None self.dist_type = 'wheel' if filename.endswith('.whl') else 'sdist' self._directory = directory self.filename = filename if osutils is None: osutils = OSUtils() self._osutils = osutils self._name, self._version = self._calculate_name_and_version()
def create_deletion_deployer(client, ui): # type: (TypedAWSClient, UI) -> Deployer return Deployer( application_builder=ApplicationGraphBuilder(), deps_builder=DependencyBuilder(), build_stage=BuildStage(steps=[]), plan_stage=NoopPlanner(), sweeper=UnreferencedResourcePlanner(), executor=Executor(client, ui), recorder=ResultsRecorder(osutils=OSUtils()), )
def smoke_test_app(tmpdir_factory): # We can't use the monkeypatch fixture here because this is a module scope # fixture and monkeypatch is a function scoped fixture. os.environ['APP_NAME'] = RANDOM_APP_NAME tmpdir = str(tmpdir_factory.mktemp(RANDOM_APP_NAME)) OSUtils().copytree(PROJECT_DIR, tmpdir) _inject_app_name(tmpdir) application = _deploy_app(tmpdir) yield application _delete_app(application, tmpdir) os.environ.pop('APP_NAME')
def getting_started_prompt(): # type: () -> Dict[str, Any] print(WELCOME_PROMPT) projects = list_available_projects(TEMPLATES_DIR, OSUtils()) questions = [ inquirer.Text('project_name', message='Enter the project name'), inquirer.List('project_type', message='Select your project type', choices=[(p.description, p.key) for p in projects]) ] answers = inquirer.prompt(questions) return answers
def create_default_deployer(session, prompter=None): # type: (botocore.session.Session, NoPrompt) -> Deployer if prompter is None: prompter = NoPrompt() aws_client = TypedAWSClient(session) api_gateway_deploy = APIGatewayDeployer(aws_client) osutils = OSUtils() packager = LambdaDeploymentPackager(osutils=osutils) lambda_deploy = LambdaDeployer( aws_client, packager, prompter, osutils, ApplicationPolicyHandler(osutils, AppPolicyGenerator(osutils))) return Deployer(api_gateway_deploy, lambda_deploy)
def create_app_packager(config): # type: (Config) -> AppPackager osutils = OSUtils() # The config object does not handle a default value # for autogen'ing a policy so we need to handle this here. return AppPackager( # We're add place holder values that will be filled in once the # lambda function is deployed. SAMTemplateGenerator( CFNSwaggerGenerator('{region}', {}), PreconfiguredPolicyGenerator( config, ApplicationPolicyHandler(osutils, AppPolicyGenerator(osutils)))), LambdaDeploymentPackager())
def create_app_packager(config): # type: (Config) -> AppPackager osutils = OSUtils() ui = UI() application_builder = ApplicationGraphBuilder() deps_builder = DependencyBuilder() build_stage = create_build_stage(osutils, ui, CFNSwaggerGenerator()) resource_builder = ResourceBuilder(application_builder, deps_builder, build_stage) return AppPackager( SAMTemplateGenerator(), resource_builder, TemplatePostProcessor(osutils=osutils), osutils, )
def create_new_project_skeleton(project_name, project_type='legacy'): # type: (str, Optional[str]) -> None osutils = OSUtils() all_projects = list_available_projects(TEMPLATES_DIR, osutils) project = [p for p in all_projects if p.key == project_type][0] template_kwargs = { 'app_name': project_name, 'chalice_version': chalice_version, } project_creator = ProjectCreator(osutils) project_creator.create_new_project( os.path.join(TEMPLATES_DIR, project.dirname), project_name, template_kwargs=template_kwargs, )
def create_app_packager( config, package_format='cloudformation', template_format='json', merge_template=None): # type: (Config, str, str, Optional[str]) -> AppPackager osutils = OSUtils() ui = UI() application_builder = ApplicationGraphBuilder() deps_builder = DependencyBuilder() post_processors = [] # type: List[TemplatePostProcessor] generator = None # type: Union[None, TemplateGenerator] template_serializer = cast(TemplateSerializer, JSONTemplateSerializer()) if package_format == 'cloudformation': build_stage = create_build_stage( osutils, ui, CFNSwaggerGenerator()) use_yaml_serializer = template_format == 'yaml' if merge_template is not None and \ YAMLTemplateSerializer.is_yaml_template(merge_template): # Automatically switch the serializer to yaml if they specify # a yaml template to merge, regardless of what template format # they specify. use_yaml_serializer = True if use_yaml_serializer: template_serializer = YAMLTemplateSerializer() post_processors.extend([ SAMCodeLocationPostProcessor(osutils=osutils), TemplateMergePostProcessor( osutils=osutils, merger=TemplateDeepMerger(), template_serializer=template_serializer, merge_template=merge_template)]) generator = SAMTemplateGenerator(config) else: build_stage = create_build_stage( osutils, ui, TerraformSwaggerGenerator()) generator = TerraformGenerator(config) post_processors.append( TerraformCodeLocationPostProcessor(osutils=osutils)) resource_builder = ResourceBuilder( application_builder, deps_builder, build_stage) return AppPackager( generator, resource_builder, CompositePostProcessor(post_processors), template_serializer, osutils)
def create_default_deployer(session, ui=None): # type: (botocore.session.Session, UI) -> Deployer if ui is None: ui = UI() aws_client = TypedAWSClient(session) api_gateway_deploy = APIGatewayDeployer(aws_client, ui) osutils = OSUtils() dependency_builder = DependencyBuilder(osutils) packager = LambdaDeploymentPackager(osutils=osutils, dependency_builder=dependency_builder, ui=ui) lambda_deploy = LambdaDeployer( aws_client, packager, ui, osutils, ApplicationPolicyHandler(osutils, AppPolicyGenerator(osutils))) return Deployer(api_gateway_deploy, lambda_deploy, ui)
def create_default_deployer(session, config, ui): # type: (Session, Config, UI) -> Deployer client = TypedAWSClient(session) osutils = OSUtils() return Deployer( application_builder=ApplicationGraphBuilder(), deps_builder=DependencyBuilder(), build_stage=create_build_stage( osutils, UI(), TemplatedSwaggerGenerator(), ), plan_stage=PlanStage( osutils=osutils, remote_state=RemoteState( client, config.deployed_resources(config.chalice_stage)), ), sweeper=ResourceSweeper(), executor=Executor(client, ui), recorder=ResultsRecorder(osutils=osutils), )
def test_can_build_private_rest_api_custom_policy(self, tmpdir, sample_app): config = self.create_config(sample_app, app_name='rest-api-app', api_gateway_policy_file='foo.json', api_gateway_endpoint_type='PRIVATE', project_dir=str(tmpdir)) tmpdir.mkdir('.chalice').join('foo.json').write( serialize_to_json({ 'Version': '2012-10-17', 'Statement': [] })) application_builder = ApplicationGraphBuilder() build_stage = BuildStage( steps=[PolicyGenerator(osutils=OSUtils(), policy_gen=None)]) application = application_builder.build(config, stage_name='dev') build_stage.execute(config, application.resources) rest_api = application.resources[0] assert rest_api.policy.document == { 'Version': '2012-10-17', 'Statement': [] }
def create_app_packager(config, merge_template=None): # type: (Config, Optional[str]) -> AppPackager osutils = OSUtils() ui = UI() application_builder = ApplicationGraphBuilder() deps_builder = DependencyBuilder() build_stage = create_build_stage(osutils, ui, CFNSwaggerGenerator()) resource_builder = ResourceBuilder(application_builder, deps_builder, build_stage) processors = [ ReplaceCodeLocationPostProcessor(osutils=osutils), TemplateMergePostProcessor( osutils=osutils, merger=TemplateDeepMerger(), merge_template=merge_template, ), ] return AppPackager( SAMTemplateGenerator(), resource_builder, CompositePostProcessor(processors), osutils, )
def _make_appdir_and_dependency_builder(self, reqs, tmpdir, runner): appdir = str(_create_app_structure(tmpdir)) self._write_requirements_txt(reqs, appdir) builder = DependencyBuilder(OSUtils(), runner) return appdir, builder
def osutils(): return OSUtils()
def __init__(self, source_code_path, *args, **kwargs): self.source_code_path = source_code_path self._osutils = OSUtils() self._ui = MutedUI()
def basic_app(tmpdir): tmpdir = str(tmpdir.mkdir('basicapp')) OSUtils().copytree(BASIC_APP, tmpdir) return tmpdir
def __init__(self, pip, osutils=None): # type: (SubprocessPip, Optional[OSUtils]) -> None if osutils is None: osutils = OSUtils() self._wrapped_pip = pip self._osutils = osutils
def __init__(self, osutils=None): # type: (Optional[OSUtils]) -> None if osutils is None: osutils = OSUtils() self._osutils = osutils
parser.add_argument("--wheels-dir", default="vendor.in") args = parser.parse_args() if args.build_wheels: if platform.system() != "Linux": parser.exit(f"{parser.prog}: Expected to run on a Linux system.") shutil.rmtree(args.wheels_dir) subprocess.call( ["git", "checkout", "--", os.path.join(args.wheels_dir, ".keep")]) for wheel_identifier in args.build_wheels: build_wheel(wheel_identifier, args.wheels_dir) print(f'Please run "git add {args.wheels_dir}" and commit the result.') else: with TemporaryDirectory() as td: python_version = f"python{sys.version_info.major}.{sys.version_info.minor}" abi = LambdaDeploymentPackager._RUNTIME_TO_ABI[python_version] compat_wheels, missing_wheels = DependencyBuilder( OSUtils())._download_dependencies(abi, td, args.pip_reqs) need_wheels = [ w for w in missing_wheels if not os.path.exists(os.path.join(args.wheels_dir, w.identifier)) ] if need_wheels: msg = 'Missing wheels: {}. Please run "{}" in a Linux VM' parser.exit( msg.format( ", ".join(wheel.identifier for wheel in need_wheels), " ".join(sys.argv + ["--build-wheels"] + [w.identifier for w in missing_wheels])))
def smoke_test_app(tmpdir_factory): tmpdir = str(tmpdir_factory.mktemp('smoketestapp')) OSUtils().copytree(PROJECT_DIR, tmpdir) application = _deploy_app(tmpdir) yield application _delete_app(application)