def prepare_temporary_test_environment( destination_directory: str, repository: GithubRepository, pull_request_number: Optional[int], verbose: bool, env_name: str = '.test_virtualenv', python_path: str = '/usr/bin/python3.5', commit_ids_known_callback: Callable[[PreparedEnv], None] = None ) -> PreparedEnv: """Prepares a temporary test environment at the (existing empty) directory. Args: destination_directory: The location to put files. The caller is responsible for deleting the directory, whether or not this method succeeds or fails. repository: The github repository to download content from, if a pull request number is given. pull_request_number: If set, test content is fetched from github. Otherwise copies of local files are used. verbose: When set, more progress output is produced. env_name: The name to use for the virtual environment. python_path: Location of the python binary to use within the virtual environment. commit_ids_known_callback: A function to call when the actual commit id being tested is known, before the virtual environment is ready. Returns: Commit ids corresponding to content to test/compare. """ # Fetch content. if pull_request_number is not None: env = git_env_tools.fetch_github_pull_request( destination_directory=destination_directory, repository=repository, pull_request_number=pull_request_number, verbose=verbose) else: env = git_env_tools.fetch_local_files( destination_directory=destination_directory, verbose=verbose) if commit_ids_known_callback is not None: commit_ids_known_callback(env) # Create virtual environment. base_path = cast(str, env.destination_directory) env_path = os.path.join(base_path, env_name) req_path = os.path.join(base_path, 'requirements.txt') req_path_2 = os.path.join(base_path, 'dev_tools', 'conf', 'pip-list-dev-tools.txt') create_virtual_env(venv_path=env_path, python_path=python_path, requirements_paths=[req_path, req_path_2], verbose=verbose) return PreparedEnv(github_repo=env.repository, actual_commit_id=env.actual_commit_id, compare_commit_id=env.compare_commit_id, destination_directory=env.destination_directory, virtual_env_path=env_path)
def derive_temporary_python2_environment( destination_directory: str, python3_environment: PreparedEnv, verbose: bool, env_name: str = '.test_virtualenv_py2', python_path: str = "/usr/bin/python2.7") -> PreparedEnv: """Creates a python 2.7 environment starting from a prepared python 3 one. Args: destination_directory: Where to put the python 2 environment. python3_environment: The prepared environment to start from. verbose: When set, more progress output is produced. env_name: The name to use for the virtualenv directory. python_path: The python binary to use. Returns: A description of the environment that was prepared. """ shutil.rmtree(destination_directory) input_directory = cast(str, python3_environment.destination_directory) os.chdir(input_directory) conversion_script_path = os.path.join( input_directory, 'dev_tools', 'python2.7-generate.sh') shell_tools.run_cmd('bash', conversion_script_path, destination_directory, input_directory, python3_environment.virtual_env_path, out=sys.stderr) os.chdir(destination_directory) # Create virtual environment. env_path = os.path.join(destination_directory, env_name) # (These files are output by dev_tools/python2.7-generate.sh.) req_path = os.path.join(destination_directory, 'requirements.txt') dev_req_path = os.path.join(destination_directory, 'pip-list-test-tools.txt') contrib_req_path = os.path.join(destination_directory, 'cirq', 'contrib', 'contrib-requirements.txt') req_paths = [req_path, dev_req_path, contrib_req_path] create_virtual_env(venv_path=env_path, python_path=python_path, requirements_paths=req_paths, verbose=verbose) return PreparedEnv(github_repo=python3_environment.repository, actual_commit_id=python3_environment.actual_commit_id, compare_commit_id=python3_environment.compare_commit_id, destination_directory=destination_directory, virtual_env_path=env_path)