Source code for dktasklib.npm

# -*- coding: utf-8 -*-
import shlex
import subprocess

# from invoke import run
from dktasklib.executables import exe
from .utils import null, win32


[docs]def npm(cmdline): npm_exe = exe.find('npm', requires=['nodejs']) return subprocess.check_output("npm " + cmdline, shell=True).decode('u8')
# # # def cmd2args(cmd): # if isinstance(cmd, basestring): # return cmd if win32 else shlex.split(cmd) # # return cmd.split() if win32 else shlex.split(cmd) # return cmd # # # class RunError(Exception): # def __init__(self, cmd, errno): # self.errno = errno # super(RunError, self).__init__(cmd, errno) # # # def _run(cmd): # popen = subprocess.Popen( # cmd2args(cmd), # stdout=subprocess.PIPE, # stderr=subprocess.STDOUT, # cwd=None, # shell=win32 # ) # # for line in iter(popen.stdout.readline, ""): # # print ">>", line # yield line # # exitcode = popen.wait() # if exitcode != 0: # raise RunError(cmd, exitcode) # # # class run(object): # def __init__(self, cmd): # self.return_code = 0 # try: # self.output = '\n'.join(line for line in _run(cmd)) # except RunError as e: # self.return_code = e.errno
[docs]def global_package(pkgname): """Check if an npm package is installed globally. """ try: # this is the 'correct' way, but it's increadably slow (4+ secs) npm('ls -g --depth 0 ' + pkgname) return True except subprocess.CalledProcessError: return False