#!/usr/bin/env python3 # # Copyright 2020 - The Android Open Source Project # # 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. """Asuite plugin deployment.""" import os import subprocess from aidegen.lib import common_util from aidegen.lib import config _ASK_INSTALL_PLUGIN = """\nAsuite plugin is a new tool with following features: -Atest UI widget. For more information: go/atest_plugin -Code search integration. For more information and locate build module: go/android-platform-plugin Would you like to install the Asuite plugin? (Yes/no/auto)""" _ASK_UPGRADE_PLUGIN = ('\nAsuite plugin has a new version. Would you like to ' 'upgrade Asuite plugin? (Yes/no/auto)') _YES_RESPONSE = 'Thank you, Asuit plugin will be installed in IntelliJ.' _NO_RESPONSE = ('Thank you, if you want to install Asuite plugin, please use ' 'aidegen --plugin.') _AUTO_RESPONSE = ('Thank you, Asuit plugin will be installed in IntelliJ, and ' 'automatically updated to the newest version.') _THANKS_UPGRADE = 'Thank you for upgrading the Asuite plugin.' _NO_NEED_UPGRADE = 'Awesome! You have the newest Asuite plugin.' _SELECTION_ITEM = {'yes': 'yes', 'no': 'no', 'auto': 'auto', 'y': 'yes', 'n': 'no', 'a': 'auto', '': 'yes'} class PluginDeployment: """The util class of Asuite plugin deployment. Usage: PluginDeployment.install_asuite_plugin() It will start installation process. Attributes: is_internal: True if the user is a internal user. """ def __init__(self): """PluginDeployment initialize.""" self.is_internal = self._is_internal_user() def install_asuite_plugin(self): """It is the main entry function for installing Asuite plugin.""" def _ask_for_install(self): """Asks the user to install the Asuite plugin.""" input_data = input(_ASK_INSTALL_PLUGIN) while input_data.lower() not in _SELECTION_ITEM.keys(): input_data = input(_ASK_INSTALL_PLUGIN) choice = _SELECTION_ITEM.get(input_data) self._user_selection = choice if choice == 'no': print(_NO_RESPONSE) else: self._copy_jars() if choice == 'yes': print(_YES_RESPONSE) else: print(_AUTO_RESPONSE) def _ask_for_upgrade(self): """Asks the user to upgrade the Asuite plugin.""" def _copy_jars(self): """Copies jars to IntelliJ plugin folders.""" def _build_jars(self): """builds jars to IntelliJ plugin folders.""" asuite_plugin_path = os.path.join(common_util.get_android_root_dir(), 'tools/asuite/asuite_plugin/') asuite_plugin_gradle_path = os.path.join(asuite_plugin_path, 'gradlew') cmd = [asuite_plugin_gradle_path, 'build'] subprocess.check_call(cmd, cwd=asuite_plugin_path) def _is_plugin_installed(self): """Checks if the user has installed Asuite plugin before. Return: True if the user has installed Asuite plugin. """ def _is_version_up_to_date(self): """Checks if all plugins' versions are up to date or not. Return: True if all plugins' versions are up to date. """ @property def _user_selection(self): """Reads the user's selection from config file. Return: A string of the user's selection: yes/no/auto. """ with config.AidegenConfig() as aconf: return aconf.plugin_preference @_user_selection.setter def _user_selection(self, selection): """Writes the user's selection to config file. Args: selection: A string of the user's selection: yes/no/auto. """ with config.AidegenConfig() as aconf: aconf.plugin_preference = selection @staticmethod def _is_internal_user(): """Checks if the user is internal user or external user. Return: True if the user is a internal user. """ return True