예제 #1
0
    def test_list_labbooks_modified_date(self, mock_config_file):
        """Test list modified dated sorted labbooks"""
        inv_manager = InventoryManager(mock_config_file[0])

        lb1 = inv_manager.create_labbook("user1",
                                         "user1",
                                         "labbook3",
                                         description="my first labbook")
        time.sleep(1.2)
        lb2 = inv_manager.create_labbook("user1",
                                         "user1",
                                         "asdf",
                                         description="my second labbook")
        time.sleep(1.2)
        lb3 = inv_manager.create_labbook("user1",
                                         "user2",
                                         "labbook1",
                                         description="my other labbook")
        time.sleep(1.2)
        lb4 = inv_manager.create_labbook("user1",
                                         "user1",
                                         "hhghg",
                                         description="my other labbook")

        inv_manager = InventoryManager(mock_config_file[0])
        labbooks = inv_manager.list_labbooks(username="******",
                                             sort_mode="modified_on")

        assert len(labbooks) == 4
        assert labbooks[0].name == 'labbook3'
        assert labbooks[1].name == 'asdf'
        assert labbooks[2].name == 'labbook1'
        assert labbooks[3].name == 'hhghg'

        # modify a repo
        time.sleep(1.2)
        with open(os.path.join(lb2.root_dir, "code", "test.txt"), 'wt') as tf:
            tf.write("asdfasdf")

        lb2.git.add_all()
        lb2.git.commit("Changing the repo")

        labbooks = inv_manager.list_labbooks(username="******",
                                             sort_mode="modified_on")

        assert len(labbooks) == 4
        assert labbooks[0].name == 'labbook3'
        assert labbooks[1].name == 'labbook1'
        assert labbooks[2].name == 'hhghg'
        assert labbooks[3].name == 'asdf'
예제 #2
0
    def test_list_labbooks_az(self, mock_config_file):
        """Test list az labbooks"""
        inv_manager = InventoryManager(mock_config_file[0])
        lb1 = inv_manager.create_labbook("user1",
                                         "user1",
                                         "labbook0",
                                         description="my first labbook")
        lb2 = inv_manager.create_labbook("user1",
                                         "user1",
                                         "labbook12",
                                         description="my second labbook")
        lb3 = inv_manager.create_labbook("user1",
                                         "user2",
                                         "labbook3",
                                         description="my other labbook")
        lb4 = inv_manager.create_labbook("user2",
                                         "user1",
                                         "labbook4",
                                         description="my other labbook")

        labbooks = inv_manager.list_labbooks(username="******")
        assert len(labbooks) == 3
        assert labbooks[0].name == 'labbook0'
        assert labbooks[1].name == 'labbook3'
        assert labbooks[2].name == 'labbook12'
예제 #3
0
def clean_dataset_file_cache(logged_in_username: str,
                             dataset_owner: str,
                             dataset_name: str,
                             cache_location: str,
                             config_file: str = None) -> None:
    """Method to import a dataset from a zip file

    Args:
        logged_in_username: username for the currently logged in user
        dataset_owner: Owner of the labbook if this dataset is linked
        dataset_name: Name of the labbook if this dataset is linked
        cache_location: Absolute path to the file cache (inside the container) for this dataset
        config_file:

    Returns:
        None
    """
    logger = LMLogger.get_logger()

    p = os.getpid()
    try:
        logger.info(
            f"(Job {p}) Starting clean_dataset_file_cache(logged_in_username={logged_in_username},"
            f"dataset_owner={dataset_owner}, dataset_name={dataset_name}")

        im = InventoryManager(config_file=config_file)

        # Check for dataset
        try:
            im.load_dataset(logged_in_username, dataset_owner, dataset_name)
            logger.info(
                f"{logged_in_username}/{dataset_owner}/{dataset_name} still exists. Skipping file cache clean."
            )
            return
        except InventoryException:
            # Dataset not found, move along
            pass

        # Check for submodule references
        for lb in im.list_labbooks(logged_in_username):
            for ds in im.get_linked_datasets(lb):
                if ds.namespace == dataset_owner and ds.name == dataset_name:
                    logger.info(
                        f"{logged_in_username}/{dataset_owner}/{dataset_name} still referenced by {str(lb)}."
                        f" Skipping file cache clean.")
                    return

        # If you get here the dataset no longer exists and is not used by any projects, clear files
        shutil.rmtree(cache_location)

    except Exception as err:
        logger.error(f"(Job {p}) Error in clean_dataset_file_cache job")
        logger.exception(err)
        raise
예제 #4
0
    def test_list_labbooks_create_date_no_metadata(self, mock_config_file):
        """Test list create dated sorted labbooks"""
        inv_manager = InventoryManager(mock_config_file[0])
        lb1 = inv_manager.create_labbook("user1",
                                         "user1",
                                         "labbook3",
                                         description="my first labbook")
        time.sleep(1.1)
        lb2 = inv_manager.create_labbook("user1",
                                         "user1",
                                         "asdf",
                                         description="my second labbook")
        time.sleep(1.1)
        lb3 = inv_manager.create_labbook("user1",
                                         "user2",
                                         "labbook1",
                                         description="my other labbook")
        time.sleep(1.1)
        labbooks = inv_manager.list_labbooks(username="******",
                                             sort_mode="created_on")

        assert len(labbooks) == 3
        assert labbooks[0].name == 'labbook3'
        assert labbooks[1].name == 'asdf'
        assert labbooks[2].name == 'labbook1'

        labbooks2 = inv_manager.list_labbooks(username="******",
                                              sort_mode="created_on")

        assert len(labbooks2) == 3
        assert labbooks2[0].name == 'labbook3'
        assert labbooks2[1].name == 'asdf'
        assert labbooks2[2].name == 'labbook1'

        os.remove(os.path.join(lb2.root_dir, '.gigantum', 'project.yaml'))
        labbooks3 = inv_manager.list_labbooks(username="******",
                                              sort_mode='modified_on')
        assert len(labbooks3) == 2
예제 #5
0
    def resolve_local_labbooks(self, info, order_by: str, sort: str, **kwargs):
        """Method to return all graphene Labbook instances for the logged in user available locally

        Uses the "currently logged in" user

        Args:
            order_by(str): String specifying how labbooks should be sorted
            sort(str): 'desc' for descending (default) 'asc' for ascending

        Returns:
            list(Labbook)
        """
        username = get_logged_in_username()

        if sort == "desc":
            reverse = True
        elif sort == "asc":
            reverse = False
        else:
            raise ValueError(f"Unsupported sort_str: {sort}. Use `desc`, `asc`")

        # Collect all labbooks for all owners
        inv_manager = InventoryManager()
        local_lbs = inv_manager.list_labbooks(username=username, sort_mode=order_by)
        if reverse:
            local_lbs.reverse()

        edges = [(inv_manager.query_owner(lb), lb.name) for lb in local_lbs]
        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()

        # Get Labbook instances
        edge_objs = []
        for edge, cursor in zip(lbc.edges, lbc.cursors):
            create_data = {"id": "{}&{}".format(edge[0], edge[1]),
                           "name": edge[1],
                           "owner": edge[0]}

            edge_objs.append(LabbookConnection.Edge(node=Labbook(**create_data),
                                                    cursor=cursor))

        return LabbookConnection(edges=edge_objs, page_info=lbc.page_info)
예제 #6
0
    def test_list_labbooks_create_date(self, mock_config_file):
        """Test list create dated sorted labbooks"""
        inv_manager = InventoryManager(mock_config_file[0])
        lb1 = inv_manager.create_labbook("user1",
                                         "user1",
                                         "labbook3",
                                         description="my first labbook")
        time.sleep(1.5)
        lb2 = inv_manager.create_labbook("user1",
                                         "user1",
                                         "asdf",
                                         description="my second labbook")
        time.sleep(1.5)
        lb3 = inv_manager.create_labbook("user1",
                                         "user2",
                                         "labbook1",
                                         description="my other labbook")

        labbooks = inv_manager.list_labbooks(username="******",
                                             sort_mode="created_on")
        assert len(labbooks) == 3
        assert labbooks[0].name == 'labbook3'
        assert labbooks[1].name == 'asdf'
        assert labbooks[2].name == 'labbook1'