Skip to content

meta_getter

ensembl.io.genomio.database.meta_getter

Connect to a core database and retrieve a meta_key:meta_value pair(s) and dump meta_key/value pairs to stdout / JSON.

get_meta_values(db_url, meta_keys)

Returns a set of meta values based on set of 1 or more input DB meta_keys.

Parameters:

Name Type Description Default
db_url URL

Target core database URL.

required
meta_keys StrPath | list[str]

File path with one meta key per line or list of meta keys.

required
Source code in src/python/ensembl/io/genomio/database/meta_getter.py
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
def get_meta_values(db_url: URL, meta_keys: StrPath | list[str]) -> dict[str, str]:
    """Returns a set of meta values based on set of 1 or more input DB meta_keys.

    Args:
        db_url: Target core database URL.
        meta_keys: File path with one meta key per line or list of meta keys.

    """
    db_name = db_url.database
    core_db = DBConnectionLite(db_url)
    query_meta_keys = []
    unpopulated_meta_keys = []
    meta_values_located = {}
    input_keys_count = 0
    meta_populated = False

    # Check input type and populated query list
    if isinstance(meta_keys, PosixPath):
        with Path(meta_keys).open(mode="r", encoding="UTF-8") as fh:
            for line in fh.readlines():
                meta_key = line.strip()
                query_meta_keys.append(meta_key)
    elif isinstance(meta_keys, list):
        query_meta_keys = meta_keys

    # Loop over input meta_key(s) and query DB
    for meta_key in query_meta_keys:
        input_keys_count += 1
        meta_value = core_db.get_meta_value(f"{meta_key}")

        if meta_value is not None:
            meta_values_located[f"{meta_key}"] = meta_value
        else:
            unpopulated_meta_keys.append(f"{meta_key}")
            logging.info(f"Meta query returned no entry on meta_key: '{meta_key}'")

    # Now assess what meta info was recovered and dump to JSON
    total_queries_located = len(meta_values_located)
    if total_queries_located >= 1:
        meta_populated = True
        if total_queries_located < input_keys_count:
            logging.info(f"Missing meta_key(s)-> {unpopulated_meta_keys}")
    else:
        logging.warning("Zero input query meta_keys present/populated.")

    if meta_populated:
        meta_values_located["database_name"] = f"{db_name}"
        print(json.dumps(meta_values_located, sort_keys=True, indent=2))
        return meta_values_located
    return {}

main(arg_list=None)

Main script entry-point.

Parameters:

Name Type Description Default
arg_list list[str] | None

Arguments to parse passing list to parse_args().

None
Source code in src/python/ensembl/io/genomio/database/meta_getter.py
105
106
107
108
109
110
111
112
113
114
def main(arg_list: list[str] | None = None) -> None:
    """Main script entry-point.

    Args:
        arg_list: Arguments to parse passing list to parse_args().
    """
    args = parse_args(arg_list)
    init_logging_with_args(args)

    _ = get_meta_values(db_url=args.url, meta_keys=args.meta_keys_list)

parse_args(arg_list)

Return a populated namespace with the arguments parsed from a list or from the command line.

Parameters:

Name Type Description Default
arg_list list[str] | None

List of arguments to parse. If None, grab them from the command line.

required
Source code in src/python/ensembl/io/genomio/database/meta_getter.py
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def parse_args(arg_list: list[str] | None) -> argparse.Namespace:
    """Return a populated namespace with the arguments parsed from a list or from the command line.

    Args:
        arg_list: List of arguments to parse. If `None`, grab them from the command line.

    """
    parser = ArgumentParser(description=__doc__)
    parser.add_server_arguments(include_database=True, help="server url and core database")
    parser.add_argument_src_path(
        "--meta_keys_list", help="Input File | List with >=2 meta_keys to query target database."
    )
    parser.add_argument("--version", action="version", version=ensembl.io.genomio.__version__)
    parser.add_log_arguments(add_log_file=False)
    return parser.parse_args(arg_list)