aboutsummaryrefslogtreecommitdiff
path: root/r_qtl/r_qtl2.py
blob: 9c9d67bd2b7b4f554583703bff143d819fa1bddf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"""The R/qtl2 parsing and processing code."""
import json
import yaml
from pathlib import Path
from typing import List, Union
from zipfile import ZipFile, ZipInfo, is_zipfile

from quality_control.debug import __pk__
from r_qtl.errors import InvalidFormat

def control_data(zfile: ZipFile) -> dict:
    """Retrieve the control file from the zip file info."""
    files = tuple(filename
                  for filename in zfile.namelist()
                  if (filename.endswith(".yaml") or filename.endswith(".json")))
    num_files = len(files)
    if num_files == 0:
        raise InvalidFormat("Expected a json or yaml control file.")

    if num_files > 1:
        raise InvalidFormat("Found more than one possible control file.")

    return (json.loads(zfile.read(files[0]))
            if files[0].endswith(".json")
            else yaml.safe_load(zfile.read(files[0])))


def read_r_qtl2_files(filepath: Path):
    """Read R/qtl2 format zip files."""
    with ZipFile(filepath, "r") as zfile:
        cf = control_data(zfile)
        raise NotImplementedError("Implementation is incomplete.")