def create_python_awslambda(self, addr: str) -> Tuple[str, bytes]: lambdex_setup = self.request_single_product( LambdexSetup, Params( PythonSetup.global_instance(), PythonNativeCode.global_instance(), SubprocessEnvironment.global_instance(), Lambdex.global_instance(), )) target = self.request_single_product(HydratedTarget, Address.parse(addr)) created_awslambda = self.request_single_product( CreatedAWSLambda, Params( target.adaptor, lambdex_setup, SourceRootConfig.global_instance(), PythonSetup.global_instance(), PythonNativeCode.global_instance(), SubprocessEnvironment.global_instance(), )) files_content = list( self.request_single_product(FilesContent, Params(created_awslambda.digest))) assert len(files_content) == 1 return created_awslambda.name, files_content[0].content
def create_pex_and_get_all_data( self, *, requirements=PexRequirements(), entry_point=None, interpreter_constraints=PexInterpreterConstraints(), input_files: Digest = None) -> (Dict, List[str]): def hashify_optional_collection(iterable): return tuple(sorted(iterable)) if iterable is not None else tuple() request = CreatePex( output_filename="test.pex", requirements=requirements, interpreter_constraints=interpreter_constraints, entry_point=entry_point, input_files_digest=input_files, ) requirements_pex = self.request_single_product( Pex, Params(request, PythonSetup.global_instance(), SubprocessEnvironment.global_instance(), PythonNativeCode.global_instance())) self.scheduler.materialize_directory( DirectoryToMaterialize(requirements_pex.directory_digest), ) with zipfile.ZipFile(os.path.join(self.build_root, "test.pex"), "r") as pex: with pex.open("PEX-INFO", "r") as pex_info: pex_info_content = pex_info.readline().decode() pex_list = pex.namelist() return { 'pex': requirements_pex, 'info': json.loads(pex_info_content), 'files': pex_list }
def run_flake8( self, source_files: List[FileContent], *, config: Optional[str] = None, passthrough_args: Optional[Sequence[str]] = None, interpreter_constraints: Optional[Sequence[str]] = None, skip: bool = False, ) -> LintResult: if config is not None: self.create_file(relpath=".flake8", contents=config) input_snapshot = self.request_single_product( Snapshot, InputFilesContent(source_files)) target = Flake8Target( PythonTargetAdaptor( sources=EagerFilesetWithSpec('test', {'globs': []}, snapshot=input_snapshot), address=Address.parse("test:target"), compatibility=interpreter_constraints, )) flake8_subsystem = global_subsystem_instance( Flake8, options={ Flake8.options_scope: { "config": ".flake8" if config else None, "args": passthrough_args or [], "skip": skip, } }) return self.request_single_product( LintResult, Params(target, flake8_subsystem, PythonNativeCode.global_instance(), PythonSetup.global_instance(), SubprocessEnvironment.global_instance()))
def test_empty_target_succeeds(self) -> None: # NB: Because this particular edge case should early return, we can avoid providing valid # mocked yield gets for most of the rule's body. Future tests added to this file will need to # provide valid mocks instead. unimplemented_mock = lambda _: NotImplemented target = PythonTestsAdaptor( address=BuildFileAddress(target_name="target", rel_path="test")) result: TestResult = run_rule( run_python_test, rule_args=[ target, PyTest.global_instance(), PythonSetup.global_instance(), SubprocessEnvironment.global_instance(), ], mock_gets=[ MockGet(product_type=TransitiveHydratedTargets, subject_type=BuildFileAddresses, mock=lambda _: TransitiveHydratedTargets(roots=(), closure=())), MockGet( product_type=SourceRootStrippedSources, subject_type=Address, mock=lambda _: SourceRootStrippedSources(snapshot= EMPTY_SNAPSHOT), ), MockGet( product_type=SourceRootStrippedSources, subject_type=HydratedTarget, mock=unimplemented_mock, ), MockGet( product_type=Digest, subject_type=DirectoriesToMerge, mock=unimplemented_mock, ), MockGet( product_type=InjectedInitDigest, subject_type=Digest, mock=unimplemented_mock, ), MockGet( product_type=Pex, subject_type=CreatePex, mock=unimplemented_mock, ), MockGet( product_type=FallibleExecuteProcessResult, subject_type=ExecuteProcessRequest, mock=unimplemented_mock, ), ], ) self.assertEqual(result.status, Status.SUCCESS)
def run_black( self, source_files: List[FileContent], *, config: Optional[str] = None, passthrough_args: Optional[Sequence[str]] = None, ) -> Tuple[LintResult, FmtResult]: if config is not None: self.create_file(relpath="pyproject.toml", contents=config) input_snapshot = self.request_single_product( Snapshot, InputFilesContent(source_files)) target = FormattablePythonTarget( TargetAdaptor( sources=EagerFilesetWithSpec('test', {'globs': []}, snapshot=input_snapshot), address=Address.parse("test:target"), )) black_subsystem = global_subsystem_instance( Black, options={ Black.options_scope: { "config": "pyproject.toml" if config else None, "args": passthrough_args or [], } }) black_setup = self.request_single_product( BlackSetup, Params( black_subsystem, PythonNativeCode.global_instance(), PythonSetup.global_instance(), SubprocessEnvironment.global_instance(), )) fmt_and_lint_params = Params(target, black_setup, PythonSetup.global_instance(), SubprocessEnvironment.global_instance()) lint_result = self.request_single_product(LintResult, fmt_and_lint_params) fmt_result = self.request_single_product(FmtResult, fmt_and_lint_params) return lint_result, fmt_result
def run_isort( self, source_files: List[FileContent], *, config: Optional[str] = None, passthrough_args: Optional[Sequence[str]] = None, skip: bool = False, ) -> Tuple[LintResult, FmtResult]: if config is not None: self.create_file(relpath=".isort.cfg", contents=config) input_snapshot = self.request_single_product(Snapshot, InputFilesContent(source_files)) target_adaptor = TargetAdaptor( sources=EagerFilesetWithSpec('test', {'globs': []}, snapshot=input_snapshot), address=Address.parse("test:target"), ) lint_target = IsortTarget(target_adaptor) fmt_target = IsortTarget(target_adaptor, prior_formatter_result_digest=input_snapshot.directory_digest) isort_subsystem = global_subsystem_instance( Isort, options={Isort.options_scope: { "config": [".isort.cfg"] if config else None, "args": passthrough_args or [], "skip": skip, }} ) python_subsystems = [ PythonNativeCode.global_instance(), PythonSetup.global_instance(), SubprocessEnvironment.global_instance(), ] isort_setup = self.request_single_product( IsortSetup, Params(isort_subsystem, *python_subsystems) ) lint_result = self.request_single_product( LintResult, Params(lint_target, isort_setup, *python_subsystems) ) fmt_result = self.request_single_product( FmtResult, Params(fmt_target, isort_setup, *python_subsystems) ) return lint_result, fmt_result