# Copyright (C) 2020 Alteryx, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Wrappers to handle interactions with YXI installer."""
import subprocess
import sys
from pathlib import Path
from typing import List
[docs]class YxiInstaller:
"""Class that wraps install commands from the YXI installer executable."""
def __init__(
self,
yxi_paths: List[Path],
alteryx_path: Path,
clean: bool = False,
update_venv: bool = False,
) -> None:
if len(yxi_paths) < 1:
raise ValueError("At least one yxi path is required for the yxi installer.")
self.yxi_paths = yxi_paths
self.alteryx_path = alteryx_path
self.clean = clean
self.update_venv = update_venv
[docs] def install_yxi(self) -> None:
"""Execute the install YXI command from the YXI installer executable."""
run_command = [
sys.executable,
str(self._get_installer_artifact_path()),
"install-yxis",
self._get_yxi_paths(),
"--alteryx-path",
str(self.alteryx_path),
"--uninstall-previous" if self.clean else "--keep-previous",
"--install-anaconda" if self.update_venv else "--skip-anaconda",
"--quiet",
"--install-type",
"User",
]
subprocess.run(run_command, stdout=subprocess.PIPE)
@staticmethod
def _get_installer_artifact_path() -> Path:
"""Get the path to the YXI installer excutable."""
curr_dir = Path(__file__).parent.parent.resolve()
return curr_dir / "assets" / "executables" / "yxi-installer.pyz"
def _get_yxi_paths(self) -> str:
"""Get the paths to the YXIs as a CLI string."""
return " ".join([str(path) for path in self.yxi_paths])