def _helper(root_directory, current_directory, meta_data_tree, visited_info_file_set): info_file_path = get_info_file(current_directory) if info_file_path in visited_info_file_set: msg = "Info file '{info_file_path}' has already been visited and will be skipped, this is indicative of a path or symlink loop" logging.warning(msg.format(info_file_path=info_file_path)) return info = parse_yaml_info_file(info_file_path) visited_info_file_set.add(info_file_path) for item_file_name, item_meta_data in info.items(): item_file_path = join_and_normalize(current_directory, item_file_name) raise_if_not_exist(item_file_path) if os.path.isdir(item_file_path): _helper(root_directory, item_file_path, meta_data_tree, visited_info_file_set) elif os.path.isfile(item_file_path): pass else: msg = "Path '{item_file_path}' is neither a file, a directory, nor a symlink to a file/directory and will be skipped" logging.warning(msg.format(item_file_path=item_file_path)) continue pp = get_path_parts_after_prefix(item_file_path, root_directory) node = get_node(meta_data_tree, *pp) if item_meta_data is None: node.metadata = {} else: node.metadata.update(item_meta_data)
import logging import query import metatree from pprint import pprint from libraryreader import create_item_meta_data_cache from path import join_and_normalize from metarules import * from labels import get_label_from_key, get_label_trail_from_key_trail from query import query logging.basicConfig(filename='example.log', level=logging.DEBUG, format='%(asctime)s: %(levelname)s: %(message)s', datefmt='%m/%d/%Y %H:%M:%S') random.seed() root_dir = join_and_normalize(os.getcwd(), "test_library") meta_tree = create_item_meta_data_cache(root_dir) # print(meta_tree) def test_agg_predicate(item_file_path, meta_data_dict): return isinstance(meta_data_dict, dict) and "artist" in meta_data_dict and (meta_data_dict["artist"] == "DAISHI DANCE" or str(meta_data_dict["artist"]).casefold().startswith("dj")) for q_result in query(test_agg_predicate, meta_tree): print(q_result) # # all_key_trails = metatree.generate_all_keytrails(meta_tree) # # sample_key_trails = random.sample(all_key_trails, 8) # # specific_key_trail = ["ALBUM_00016", "TRACK_00006.ogg"]