Source code for gigl.scripts.post_install
#!/usr/bin/env python3
"""
Once GiGL is installed w/ `pip install gigl`, this script can be executed by running:
`gigl-post-install`
This script is used to install the dependencies for GIGL.
- Currently, it installs GLT by running install_glt.sh.
"""
import subprocess
import sys
from pathlib import Path
from typing import Optional
[docs]
def run_command_and_stream_stdout(cmd: str) -> Optional[int]:
    """
    Executes a command and streams the stdout output.
    Args:
        cmd (str): The command to be executed.
    Returns:
        Optional[int]: The return code of the command, or None if the command failed to execute.
    """
    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
    while True:
        output = process.stdout.readline()  # type: ignore
        if output == b"" and process.poll() is not None:
            break
        if output:
            print(output.strip())
    return_code: Optional[int] = process.poll()
    return return_code 
[docs]
def main():
    """Main entry point for the post-install script."""
    print("Running GIGL post-install script...")
    # Get the directory where this script is located
    script_dir = Path(__file__).parent
    # Path to the install_glt.sh script
    install_glt_script = script_dir / "install_glt.sh"
    if not install_glt_script.exists():
        print(f"Error: install_glt.sh not found at {install_glt_script}")
        sys.exit(1)
    cmd = f"bash {install_glt_script}"
    try:
        print(f"Executing {cmd}...")
        result = run_command_and_stream_stdout(cmd)
        print("Post-install script finished running, with return code: ", result)
        return result
    except subprocess.CalledProcessError as e:
        print(f"Error running install_glt.sh: {e}")
        sys.exit(1)
    except Exception as e:
        print(f"Unexpected error: {e}")
        sys.exit(1) 
if __name__ == "__main__":
    main()