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
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)