Source code for ievv_opensource.utils.ievvbuildstatic.installers.yarn

import json

from .abstract_npm_installer import AbstractNpmInstaller
from ievv_opensource.utils.shellcommandmixin import ShellCommandError


[docs]class NpmInstallerError(Exception): pass
[docs]class PackageJsonDoesNotExist(NpmInstallerError): pass
[docs]class YarnInstaller(AbstractNpmInstaller): """ Yarn installer. """ name = 'yarninstall' optionprefix = 'yarn' def yarn_json_output_handler(self, outputdict): ignored_messagetypes = { 'progressTick', 'step', } ignored_messages = { 'Saved 0 new dependencies.', 'Saved lockfile.', } if isinstance(outputdict, dict): messagetype = outputdict.get('type') data = outputdict.get('data', {}) if isinstance(data, dict): message = data.get('message') elif isinstance(data, str): message = data else: message = None else: message = str(outputdict) messagetype = 'unknown' if message and messagetype and message not in ignored_messages: if messagetype == 'error': super(YarnInstaller, self).log_shell_command_stderr(line=message) elif messagetype not in ignored_messagetypes: super(YarnInstaller, self).log_shell_command_stdout(line=message)
[docs] def log_shell_command_stdout(self, line): try: outputdict = json.loads(line) except ValueError: super(YarnInstaller, self).log_shell_command_stdout(line=line) else: self.yarn_json_output_handler(outputdict=outputdict)
def _run_yarn(self, args): self.run_shell_command('yarn', args=args, _cwd=self.app.get_source_path())
[docs] def log_shell_command_stderr(self, line): try: outputdict = json.loads(line) except ValueError: super(YarnInstaller, self).log_shell_command_stdout(line=line) else: self.yarn_json_output_handler(outputdict=outputdict)
def install_packages_from_packagejson(self): try: self._run_yarn(args=['--json']) except ShellCommandError: self.get_logger().command_error('yarn FAILED!') self.add_deferred_warning('Installing packages from package.json failed') raise SystemExit() def install_npm_package(self, package, properties): package_spec = package if properties['version']: package_spec = '{package}@{version}'.format( package=package, version=properties['version']) args = ['add', '--json', package_spec] if properties['installtype'] is not None: args.append('--{}'.format(properties['installtype'])) try: self._run_yarn(args=args) except ShellCommandError: self.get_logger().command_error( 'yarn add {package} (properties: {properties!r}) FAILED!'.format( package=package, properties=properties)) raise SystemExit() def uninstall_npm_package(self, package): try: self._run_yarn(args=['remove', package]) except ShellCommandError: message = 'yarn remove {package} FAILED!'.format( package=package) self.get_logger().command_error(message)
[docs] def run_packagejson_script(self, script, args=None): args = args or [] args = ['run', script] + args self._run_yarn(args=args)
def link_package(self, packagename): self._run_yarn(args=['link', packagename]) def unlink_package(self, packagename): self._run_yarn(args=['unlink', packagename])