def _add_package_components(cls, lb, packages): manager = list(set([x['manager'] for x in packages])) if len(manager) != 1: raise ValueError( "Only batch add packages via 1 package manager at a time.") manager = manager[0] # Set the cursor to the end of the collection of packages glob_path = os.path.join(lb.root_dir, '.gigantum', 'env', 'package_manager', f"{manager}*") cursor = len(glob.glob(glob_path)) # Create Component Manager cm = ComponentManager(lb) cm.add_packages(package_manager=manager, packages=packages, from_base=False, force=True) new_edges = list() for cnt, pkg in enumerate(packages): new_edges.append( PackageComponentConnection.Edge( node=PackageComponent(manager=manager, package=pkg["package"], version=pkg["version"], schema=CURRENT_SCHEMA), cursor=base64.b64encode(str(cursor + cnt).encode()).decode())) return new_edges
def helper_resolve_package_dependencies(labbook, kwargs): """Helper to resolve the packages""" cm = ComponentManager(labbook) edges = cm.get_component_list("package_manager") if edges: cursors = [base64.b64encode("{}".format(cnt).encode("UTF-8")).decode("UTF-8") for cnt, x in enumerate(edges)] # Process slicing and cursor args lbc = ListBasedConnection(edges, cursors, kwargs) lbc.apply() # Create version dataloader keys = [f"{k['manager']}&{k['package']}" for k in lbc.edges] vd = PackageLatestVersionLoader(keys, labbook, get_logged_in_username()) # Get DevEnv instances edge_objs = [] for edge, cursor in zip(lbc.edges, lbc.cursors): edge_objs.append(PackageComponentConnection.Edge(node=PackageComponent(_version_dataloader=vd, manager=edge['manager'], package=edge['package'], version=edge['version'], from_base=edge['from_base'], is_valid=True, schema=edge['schema']), cursor=cursor)) return PackageComponentConnection(edges=edge_objs, page_info=lbc.page_info) else: return PackageComponentConnection(edges=[], page_info=graphene.relay.PageInfo(has_next_page=False, has_previous_page=False))
def helper_resolve_packages(labbook, package_input): """Helper to return a PackageComponent object""" manager = list(set([x['manager'] for x in package_input])) if len(manager) > 1: raise ValueError("Only batch add via 1 package manager at a time.") # Instantiate appropriate package manager mgr = get_package_manager(manager[0]) # Validate packages pkg_result = mgr.validate_packages(package_input, labbook, get_logged_in_username()) # Return object return [PackageComponent(manager=manager[0], package=pkg.package, version=pkg.version, is_valid=not pkg.error) for pkg in pkg_result]
def mutate_and_get_payload(cls, root, info, owner, labbook_name, packages, client_mutation_id=None): username = get_logged_in_username() # Load LabBook instance lb = LabBook(author=get_logged_in_author()) lb.from_name(username, owner, labbook_name) manager = list(set([x['manager'] for x in packages])) if len(manager) != 1: raise ValueError( "Only batch add packages via 1 package manager at a time.") manager = manager[0] # Set the cursor to the end of the collection of packages glob_path = os.path.join(lb.root_dir, '.gigantum', 'env', 'package_manager', f"{manager}*") cursor = len(glob.glob(glob_path)) # Create Component Manager cm = ComponentManager(lb) cm.add_packages(package_manager=manager, packages=packages, from_base=False, force=True) new_edges = list() for cnt, pkg in enumerate(packages): new_edges.append( PackageComponentConnection.Edge( node=PackageComponent(manager=manager, package=pkg["package"], version=pkg["version"], schema=CURRENT_SCHEMA), cursor=base64.b64encode(str(cursor + cnt).encode()).decode())) return AddPackageComponents(new_package_component_edges=new_edges)
def helper_resolve_check_packages(labbook, package_input): """Helper to return a list of PackageComponent objects that have been validated""" manager = list(set([x['manager'] for x in package_input])) if len(manager) > 1: raise ValueError("Only batch add via 1 package manager at a time.") # Instantiate appropriate package manager mgr = get_package_manager(manager[0]) # Validate packages pkg_result = mgr.validate_packages(package_input, labbook, get_logged_in_username()) # Create dataloader keys = [f"{manager[0]}&{pkg.package}" for pkg in pkg_result] vd = PackageDataloader(keys, labbook, get_logged_in_username()) # Return object return [PackageComponent(_dataloader=vd, manager=manager[0], package=pkg.package, version=pkg.version, is_valid=not pkg.error) for pkg in pkg_result]