Functions/Module-Tools.ps1

# ===========================================================================
# Module-Tools.ps1 --------------------------------------------------------
# ===========================================================================

# function ----------------------------------------------------------------
# ---------------------------------------------------------------------------
function Set-VirtualEnvSystem {

    <#
    .DESCRIPTION
        Set environment variable
     
    .PARAMETER Name
 
    .PARAMETER PYTHON
 
    .OUTPUTS
        None.
    #>


    [OutputType([System.String])]

    Param(
        [Parameter(HelpMessage="Name of the virtual environment.")]
        [System.String] $Name,

        [Parameter(HelpMessage="Executable of a python distribution.")]
        [System.String] $Python
    )

    # set a backup of the pythonhome environment variable
    [System.Environment]::SetEnvironmentVariable($PSVirtualEnv.EnvBackup,  [System.Environment]::GetEnvironmentVariable($PSVirtualEnv.EnvPython, "process"), "process")
    # set the pythonhome variable in scope process to the path of the virtual environment
    if ($Name) {
        $Python = Get-VirtualEnvPath -Name $Name
    }
    
    [System.Environment]::SetEnvironmentVariable($PSVirtualEnv.EnvPython, $python_path, "process")

    #set the name of the virtual environment
    [System.Environment]::SetEnvironmentVariable($PSVirtualEnv.EnvVenv, $Name,"process")
    
    Return $Null
}

function Restore-VirtualEnvSystem {
    <#
    .DESCRIPTION
        Restore environment variable
     
    .PARAMETER Name
 
    .OUTPUTS
        None.
    #>


    [OutputType([Void])]

    Param ()

    # set the pythonhome variable in scope process to the stored backup variable
    [System.Environment]::SetEnvironmentVariable($PSVirtualEnv.EnvPython,  [System.Environment]::GetEnvironmentVariable($PSVirtualEnv.EnvBackup, "process"), "process")

    # emtpy the name of the virtual environment
    [System.Environment]::SetEnvironmentVariable($PSVirtualEnv.EnvVenv, $Null ,"process")

    Return $Null
}

# function ----------------------------------------------------------------
# ---------------------------------------------------------------------------
function Get-VirtualEnvPath {

    <#
    .DESCRIPTION
        Get the absolute path of a virtual environment, which is composed of the predefined system variable and a specified virtual environment
     
    .PARAMETER Name
 
    .OUTPUTS
        System.String. Absolute path of a specified virtual environment
    #>


    [OutputType([System.String])]

    Param(
        [Parameter(Position=1, Mandatory=$True, ValueFromPipeline=$True, HelpMessage="Name of the virtual environment.")]
        [System.String] $Name
    )

    return Join-Path -Path $PSVirtualEnv.WorkDir -ChildPath $Name
}

# function ----------------------------------------------------------------
# ---------------------------------------------------------------------------
function Get-VirtualPython {

    <#
    .DESCRIPTION
        Get the absolute path of the executable of a specified virtual environment, which is composed of the predefined system variable, a specified virtual environment and the fixed location of the executable
     
    .PARAMETER Name
 
    .OUTPUTS
        System.String. Absolute path of the executable of a specified virtual environment
    #>


    [OutputType([System.String])]

    Param(
        [Parameter(Position=1, Mandatory=$True, ValueFromPipeline=$True, HelpMessage="Name of the virtual environment.")]
        [System.String] $Name
    )

    return Join-Path -Path (Get-VirtualEnvPath -Name $Name) -ChildPath $PSVirtualEnv.VirtualEnv 
}

# function ----------------------------------------------------------------
# ---------------------------------------------------------------------------
function Get-VirtualEnvActivationScript {

    <#
    .DESCRIPTION
        Get the absolute path of the activation sript of a specified virtual environment, which is composed of the predefined system variable, a specified virtual environment and the fixed location of the executable
     
    .PARAMETER Name
 
    .OUTPUTS
        System.String. Absolute path ofthe activation sript a specified virtual environment
    #>


    [OutputType([System.String])]

    Param(
        [Parameter(Position=1, Mandatory=$True, ValueFromPipeline=$True, HelpMessage="Name of the virtual environment.")]
        [System.String] $Name
    )

    return Join-Path -Path (Get-VirtualEnvPath -Name $Name) -ChildPath $PSVirtualEnv.Activation
}

# function ----------------------------------------------------------------
# ---------------------------------------------------------------------------
function Get-VirtualEnvLocalDir {

    <#
    .DESCRIPTION
        Get the absolute path of the download directory of a virtual environment.
     
    .PARAMETER Name
 
    .OUTPUTS
        Get the absolute path of the download directory of a virtual environment
    #>


    [OutputType([System.String])]

    Param(
        [Parameter(Position=1, Mandatory=$True, ValueFromPipeline=$True, HelpMessage="Name of the virtual environment.")]
        [System.String] $Name
    )

    return  Join-Path -Path $PSVirtualEnv.LocalDir -ChildPath $Name
}

# function ----------------------------------------------------------------
# ---------------------------------------------------------------------------
function Get-PythonVersion() {
    
    <#
    .DESCRIPTION
        Retrieve the python version of a given python distribution.
     
    .PARAMETER Path
 
    .OUTPUTS
        Int. The version of the detected python distribution.
    #>


    [CmdletBinding(PositionalBinding=$True)]

    [OutputType([Int])]

    Param(
        [Parameter(Position=1, Mandatory=$True, HelpMessage="Path to a folder or executable of a python distribution.")]
        [System.String] $Path
    )

    # get the version of a given python distribution
    $Path = Find-Python $Path
    if (-not $Path) { return }
    $pythonVersion = . $Path --version 2>&1
    write-host $pythonVersion
    # check the compatibility of the detected python version
    $pythonVersion2 = ($pythonVersion -match "^Python\s2") -or ($pythonVersion -match "^Python\s3.3")
    $pythonVersion3 = $pythonVersion -match "^Python\s3" -and -not $pythonVersion2
    if (-not $pythonVersion2 -and -not $pythonVersion3) {
        if ($VerbosePreference) {
            Write-FormattedError -Message "This module is not compatible with the detected python version $pythonVersion" -Module $PSVirtualEnv.Name
        }
        return $Null
    }

    # return the version of the detected python distribution.
    return $(if ($pythonVersion2) {"2"} else {"3"})
}

# function ----------------------------------------------------------------
# ---------------------------------------------------------------------------
function Get-ActiveVirtualEnv {

    <#
    .DESCRIPTION
        Detects activated virtual environments.
     
    .PARAMETER Name
 
    .OUTPUTS
       Boolean. True if the specified virtual environment is running, respectivly false if it is not activated.
    #>

    
    [CmdletBinding(PositionalBinding=$True)]

    [OutputType([Boolean])]

    Param(
        [Parameter(Position=1, ValueFromPipeline=$True, HelpMessage="Name of the virtual environment.")]
        [System.String] $Name
    )
    
    $virtual_env = [System.Environment]::GetEnvironmentVariable($PSVirtualEnv.EnvVenv, "process")
    if ($virtual_env) {
        if ($Name) {
            if (([System.String]$virtual_env).EndsWith($Name)) {
                return $True
            }
            return $False;
        }
        return $True
    }

    return $False
}