예제 #1
0
    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
예제 #2
0
    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))
예제 #3
0
    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)
예제 #5
0
    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]