Skip to content

Taskpacks manager reference

install(packages, context, console)

summary

Parameters:

Name Type Description Default
packages _type_

description

required
context _type_

description

required
console _type_

description

required
Source code in taskpacks/manager/manager.py
def install(packages, context, console):
    """_summary_

    Args:
        packages (_type_): _description_
        context (_type_): _description_
        console (_type_): _description_
    """
    if(packages != []):
        console.print("[bold white]Installing the following packages: ")
        [console.print(f"\t[italic green](+) {x}") for x in packages]
        if(context['handler']['dir']):
            installDependencies = False
            extractedPackages = []
            handlerDir = ""
            for package in packages:
                if(package in context["officialPackagesManifest"]):
                    console.print(f"[bold white](wheel/handler/install) donwloading package [bold green]'{package}'")
                    packageUrl = context["officialPackagesManifest"][package]['link']
                    handlerDir = context['handler']['dir']
                    if(os.path.isdir(handlerDir)):
                        os.chdir(handlerDir)
                        packageInstallDir = os.path.join(handlerDir, f'tasks/packs/{package}')
                        if(os.path.isdir(packageInstallDir)):
                            os.system(f'rm -rf {packageInstallDir}')
                        else:
                            os.mkdir(packageInstallDir)
                        if package not in extractedPackages:
                            with urlopen(packageUrl) as zipresp:
                                console.print(f"[bold white](wheel/handler/install) extracting package [bold green]'{package}'")
                                with ZipFile(BytesIO(zipresp.read())) as zfile:
                                    zip_parent_dir = zfile.infolist()[0].filename
                                    zip_infos = zfile.infolist()
                                    zip_infos.pop(0)
                                    for zip_info in zip_infos:
                                        zip_info.filename = zip_info.filename.replace(zip_parent_dir, '')
                                        zfile.extract(zip_info, path=packageInstallDir)
                                    console.print(f"[bold white](wheel/handler/install) extracted package [bold green]'{package}'")
                                    extractedPackages.append(package)
                        installDependencies = True
                else:
                    console.print(f"[bold red]:warning: (wheel/handler/install) package '{package}' not found on official packages manifest.")

            console.print(f"[bold white](wheel/handler/install) installing dependencies for extracted packages [bold green]{extractedPackages}\n")
            os.chdir(handlerDir)
            if(os.path.isfile(os.path.join(handlerDir, 'tasks/install_packs.py'))):
                os.system('python tasks/install_packs.py')
                console.print(f"\n[bold white](wheel/handler/install) installed dependencies for extracted packages [bold green]{extractedPackages}")
            else:
                console.print(f"\n[bold red]:warning: (wheel/handler/install) couldn't install dependencies for extracted packages [bold green]{extractedPackages}: [bold white] install_packs.py not found on handler/tasks/packs.")
            console.print(f"\n[bold white](wheel/handler/install) finished.\n")
        else:
            console.print(":warning: (wheel/handler/install) Argument --handler was not passed. No changes will be made on handler directory.")
        if(context['api']['dir']):
            installDependencies = False
            extractedPackages = []
            apiDir = ""
            for package in packages:
                if(package in context["officialPackagesManifest"]):
                    console.print(f"[bold white](wheel/api/install) donwloading package [bold green]'{package}'")
                    packageUrl = context["officialPackagesManifest"][package]['link']
                    apiDir = context['api']['dir']
                    if(os.path.isdir(apiDir)):
                        os.chdir(apiDir)
                        packageInstallDir = os.path.join(apiDir, f'tasks/packs/{package}')
                        if(os.path.isdir(packageInstallDir)):
                            os.system(f'rm -rf {packageInstallDir}')
                        else:
                            os.mkdir(packageInstallDir)
                        if package not in extractedPackages:
                            with urlopen(packageUrl) as zipresp:
                                console.print(f"[bold white](wheel/api/install) extracting package [bold green]'{package}'")
                                with ZipFile(BytesIO(zipresp.read())) as zfile:
                                    zip_parent_dir = zfile.infolist()[0].filename
                                    zip_infos = zfile.infolist()
                                    zip_infos.pop(0)
                                    for zip_info in zip_infos:
                                        zip_info.filename = zip_info.filename.replace(zip_parent_dir, '')
                                        zfile.extract(zip_info, path=packageInstallDir)
                                    console.print(f"[bold white](wheel/api/install) extracted package [bold green]'{package}'")
                                    extractedPackages.append(package)
                        installDependencies = True
                else:
                    console.print(f"[bold red]:warning: (wheel/api/install) package '{package}' not found on official packages manifest.")

            console.print(f"[bold white](wheel/api/install) installing dependencies for extracted packages [bold green]{extractedPackages}\n")
            os.chdir(apiDir)
            if(os.path.isfile(os.path.join(apiDir, 'tasks/install_packs.py'))):
                os.system('python tasks/install_packs.py')
                console.print(f"\n[bold white](wheel/api/install) installed dependencies for extracted packages [bold green]{extractedPackages}")
            else:
                console.print(f"\n[bold red]:warning: (wheel/api/install) couldn't install dependencies for extracted packages [bold green]{extractedPackages}: [bold white] install_packs.py not found on api/tasks/packs.")
            console.print(f"\n[bold white](wheel/api/install) finished.\n")
        else:
            console.print(":warning: (wheel/api/install) Argument --api was not passed. No changes will be made on api directory.")
    return