Beispiel #1
0
    def test_walkdir(self, mock_labbook):
        lb = mock_labbook[2]
        dirs = [
            "code/cat_dir", "code/dog_dir", "code/mouse_dir/",
            "code/mouse_dir/new_dir", "code/.hidden_dir"
        ]
        for d in dirs:
            FO.makedir(lb, d)

        for d in ['.hidden_dir/', '', 'dog_dir', 'mouse_dir/new_dir/']:
            open('/tmp/myfile.c', 'w').write('data')
            FO.insert_file(lb, 'code', '/tmp/myfile.c', d)

        dir_walks_hidden = FO.walkdir(lb, 'code', show_hidden=True)
        assert any([
            os.path.basename('/tmp/myfile.c') in d['key']
            for d in dir_walks_hidden
        ])
        assert not any(
            ['.git' in d['key'].split(os.path.sep) for d in dir_walks_hidden])
        assert not any(['.gigantum' in d['key'] for d in dir_walks_hidden])
        assert all([d['key'][0] != '/' for d in dir_walks_hidden])

        # Spot check some entries
        assert len(dir_walks_hidden) == 15
        assert dir_walks_hidden[0]['key'] == '.hidden_dir/'
        assert dir_walks_hidden[0]['is_dir'] is True
        assert dir_walks_hidden[3]['key'] == 'mouse_dir/'
        assert dir_walks_hidden[3]['is_dir'] is True
        assert dir_walks_hidden[6]['key'] == '.hidden_dir/.gitkeep'
        assert dir_walks_hidden[6]['is_dir'] is False
        assert dir_walks_hidden[13]['key'] == 'mouse_dir/new_dir/.gitkeep'
        assert dir_walks_hidden[13]['is_dir'] is False

        # Since the file is in a hidden directory, it should not be found.
        dir_walks = FO.walkdir(lb, 'code')
        # Spot check some entries
        assert len(dir_walks) == 7
        assert dir_walks[0]['key'] == 'cat_dir/'
        assert dir_walks[0]['is_dir'] is True
        assert dir_walks[1]['key'] == 'dog_dir/'
        assert dir_walks[1]['is_dir'] is True
        assert dir_walks[2]['key'] == 'mouse_dir/'
        assert dir_walks[2]['is_dir'] is True
        assert dir_walks[3]['is_dir'] is False
        assert dir_walks[4]['is_dir'] is False
        assert dir_walks[5]['is_dir'] is True
        assert dir_walks[5]['key'] == 'mouse_dir/new_dir/'
        assert dir_walks[6]['is_dir'] is False
Beispiel #2
0
    def test_walkdir_with_favorites(self, mock_labbook, sample_src_file):
        lb = mock_labbook[2]
        dirs = ["code/cat_dir", "code/dog_dir"]
        for d in dirs:
            FO.makedir(lb, d)

        sfile = '/tmp/testwalkdirwithfavorites.file'
        for d in ['', 'dog_dir', 'cat_dir']:
            open(sfile, 'w').write('xxx')
            FO.insert_file(lb, 'code', sfile, d)

        sample_filename = os.path.basename(sfile)

        # Since the file is in a hidden directory, it should not be found.
        dir_walks = FO.walkdir(lb, 'code')
        # Spot check some entries
        assert len(dir_walks) == 5
        assert dir_walks[0]['key'] == 'cat_dir/'
        assert dir_walks[0]['is_dir'] is True
        assert dir_walks[0]['is_favorite'] is False
        assert dir_walks[1]['key'] == 'dog_dir/'
        assert dir_walks[1]['is_dir'] is True
        assert dir_walks[1]['is_favorite'] is False
        assert dir_walks[2]['is_favorite'] is False
        assert dir_walks[2]['is_dir'] is False
        assert dir_walks[3]['is_favorite'] is False
        assert dir_walks[3]['is_dir'] is False
        assert dir_walks[4]['is_favorite'] is False
        assert dir_walks[4]['is_dir'] is False

        lb.create_favorite("code", sample_filename, description="Fav 1")
        lb.create_favorite("code", f"dog_dir/{sample_filename}", description="Fav 2")
        lb.create_favorite("code", f"cat_dir/", description="Fav 3", is_dir=True)

        dir_walks = FO.walkdir(lb, 'code')
        # Spot check some entries
        assert len(dir_walks) == 5
        assert dir_walks[0]['key'] == 'cat_dir/'
        assert dir_walks[0]['is_dir'] is True
        assert dir_walks[0]['is_favorite'] is True
        assert dir_walks[1]['key'] == 'dog_dir/'
        assert dir_walks[1]['is_dir'] is True
        assert dir_walks[1]['is_favorite'] is False
        assert dir_walks[2]['is_favorite'] is True
        assert dir_walks[2]['is_dir'] is False
        assert dir_walks[3]['is_favorite'] is False
        assert dir_walks[3]['is_dir'] is False
        assert dir_walks[4]['is_favorite'] is True
        assert dir_walks[4]['is_dir'] is False
    def helper_resolve_all_files(self, labbook, kwargs):
        """Helper method to populate the LabbookFileConnection"""
        # Check if file info has been cached
        redis_conn = redis.Redis(db=5)
        cache_key = f"FILE_LIST_CACHE|{labbook.key}|{self.section}"
        if redis_conn.exists(cache_key):
            # Load from cache
            edges = json.loads(redis_conn.get(cache_key).decode("utf-8"))
            redis_conn.expire(cache_key, 5)
        else:
            # Load from disk and cache
            # Get all files and directories, with the exception of anything in .git or .gigantum
            edges = FileOperations.walkdir(labbook,
                                           section=self.section,
                                           show_hidden=False)
            redis_conn.set(cache_key, json.dumps(edges))
            redis_conn.expire(cache_key, 5)

        # Generate naive cursors
        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()

        edge_objs = []
        for edge, cursor in zip(lbc.edges, lbc.cursors):
            create_data = {
                "owner": self.owner,
                "section": self.section,
                "name": self.name,
                "key": edge['key'],
                "_file_info": edge
            }
            edge_objs.append(
                LabbookFileConnection.Edge(node=LabbookFile(**create_data),
                                           cursor=cursor))

        return LabbookFileConnection(edges=edge_objs, page_info=lbc.page_info)