| 898 | |
| 899 | |
| 900 | def validate_entry_point( |
| 901 | pex, # type: PEX |
| 902 | entry_point, # type: str |
| 903 | ): |
| 904 | # type: (...) -> None |
| 905 | |
| 906 | try: |
| 907 | ep = parse_entry_point(entry_point) |
| 908 | except ValueError as e: |
| 909 | raise PEX.InvalidEntryPoint( |
| 910 | "Failed to parse `{entry_point}`: {err}".format(entry_point=entry_point, err=e) |
| 911 | ) |
| 912 | |
| 913 | if isinstance(ep, ModuleEntryPoint): |
| 914 | import_statement = "import {module}".format(module=ep.module) |
| 915 | else: |
| 916 | import_statement = "from {module} import {method}".format( |
| 917 | module=ep.module, method=ep.attrs[0] |
| 918 | ) |
| 919 | |
| 920 | with named_temporary_file() as fp: |
| 921 | fp.write(import_statement.encode("utf-8")) |
| 922 | fp.close() |
| 923 | retcode = pex.run([fp.name], env={"PEX_INTERPRETER": "1"}) |
| 924 | if retcode != 0: |
| 925 | raise PEX.InvalidEntryPoint( |
| 926 | "Invalid entry point: `{entry_point}`\n" |
| 927 | "Entry point verification failed: `{import_statement}`".format( |
| 928 | entry_point=entry_point, import_statement=import_statement |
| 929 | ) |
| 930 | ) |