import sys
import os
import platform

class xCatError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)

def isMounted(mountPoint): 
    if os.path.ismount(mountPoint): 
        return True
    else:
        return False

def run_command(cmd):
    """
    Function: run_command
    Arguments: cmd - string to be run as a command
    Description: runs the command then returns out and err
    """
    import subprocess

    p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
    (out,err) = p.communicate()
    return (out,err)


def isRhel():
    myDistro = platform.linux_distribution()
    if "Red Hat Enterprise Linux Server" or "CentOS" in myDistro:
       return True
    else: 
       return False

def isSles(): 
    myDistro = platform.linux_distribution()
    if "SUSE Linux Enterprise Server" in myDistro:
       return True
    else: 
       return False

def isUbuntu():
    myDistro = platform.linux_distribution()
    if "Ubuntu" in myDistro:
       return True
    else: 
       return False

def getUserInput(question):
    response = raw_input("%s: " %(question))
    return response

def filterInstalledPackages(pkglist=[]):
    fulllist = "" 

    if isRhel():
        # using YUM
        import yum 
        yb = yum.YumBase()

        for x in pkglist:
            if not yb.rpmdb.searchNevra(name='%s' %(x)):
                fulllist += "%s " %(x) 
   
    return fulllist
 
def installPackages(pkglist=[]):
    fulllist = filterInstalledPackages(pkglist)

    if isRhel():
        if fulllist.strip() != "": 
            cmd = "yum -y install %s" %(fulllist)
            out,err = xcatutils.run_command(cmd)

    elif isSles(): 
        print "Using zyppr..."
    elif isUbuntu():
        print "Using apt-get..."
    else:
        print "Error!"