import subprocess as sp # import subprocess as sp # import requests import json import os # from decouple import config # def install_available(pipfile): # """ Install Python packages or their dependencies mentioned in # pipfile if they are available in System repos # """ # def is_available_in_system_repos(package): # try: # sp.check_output(['apk', 'info', f'py3-{package}']) # except: # return False # else: # return True # if get_distro_name() == "alpine": # dependencies = [] # need_to_be_installed = [] # try: # with open(pipfile) as f: # lines = f.readlines() # try: # start_index = lines.index("[packages]\n") # end_index = lines.index("\n", start_index) # for package in lines[start_index: end_index]: # if '= "*"' in package: # package = package[:package.index(" =")] # if is_available_in_system_repos(package): # need_to_be_installed.append(f"py3-{package}") # else: # dependencies.append(package) # except ValueError: # print("Not Found") # except: # return # else: # for dependency in dependencies: # content = requests.get(f"https://libraries.io/api/pypi/{dependency}/latest/dependencies?api_key={config('LIBRARIES_IO_API')}") # content = json.loads(content.content.decode("utf-8")) # for subdependency in content["dependencies"]: # subdependency = subdependency["name"] # if is_available_in_system_repos(subdependency): # need_to_be_installed.append(f"py3-{subdependency}") # for package in need_to_be_installed: # try: # sp.check_output(["apk", "add", package]) # except: # print(f"Could not install {package}") def install_available(project_path): if get_distro_name() == "alpine": sp.check_output(['pipenv', 'lock']) with open(os.path.join(project_path, "Pipfile.lock")) as f: content = json.load(f) for package in content["default"].keys(): try: sp.check_output(["apk", "add", f"py3-{package}"]) except Exception: pass def clone_common(path='.'): sp.check_output(['git', 'clone', f'https://code.ungleich.ch/ungleich-public/ucloud_common'], cwd=path) def clone_etcd_wrapper(path='.'): sp.check_output(['git', 'clone', f'https://code.ungleich.ch/ahmedbilal/etcd3_wrapper'], cwd=path) def get_distro_name(): distro_name = None with open("/etc/os-release") as f: content = f.read() start = content.find("ID=") + 3 end = content.find("\n", start) distro_name = content[start:end] return distro_name