Example #1
0
    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)
Example #2
0
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"]