Skip to content

write_invalid_reasons

genie.write_invalid_reasons

Write invalid reasons

Attributes

logger = logging.getLogger(__name__) module-attribute

Functions

write(syn, center_mapping_synid, error_tracker_synid)

Write center errors to a file

PARAMETER DESCRIPTION
syn

Synapse connection

TYPE: Synapse

center_mapping_synid

Center mapping Synapse id

TYPE: str

error_tracker_synid

Error tracking Synapse id

TYPE: str

Source code in genie/write_invalid_reasons.py
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def write(
    syn: synapseclient.Synapse, center_mapping_synid: str, error_tracker_synid: str
):
    """Write center errors to a file

    Args:
        syn (synapseclient.Synapse): Synapse connection
        center_mapping_synid (str): Center mapping Synapse id
        error_tracker_synid (str): Error tracking Synapse id

    """
    center_mapping_df = extract.get_syntabledf(
        syn=syn,
        query_string=f"SELECT * FROM {center_mapping_synid} where release is true",
    )
    center_errors = get_center_invalid_errors(syn, error_tracker_synid)
    for center in center_mapping_df["center"]:
        logger.info(center)
        staging_synid = center_mapping_df["stagingSynId"][
            center_mapping_df["center"] == center
        ][0]
        with open(center + "_errors.txt", "w") as errorfile:
            if center not in center_errors:
                errorfile.write("No errors!")
            else:
                errorfile.write(center_errors[center])

        ent = synapseclient.File(center + "_errors.txt", parentId=staging_synid)
        syn.store(ent)
        os.remove(center + "_errors.txt")

_combine_center_file_errors(syn, center_errorsdf)

Combine all center errors into one printable string

PARAMETER DESCRIPTION
syn

Synapse connection

TYPE: Synapse

center_errorsdf

Center errors dataframe

TYPE: DataFrame

RETURNS DESCRIPTION
str

Center errors in a pretty formatted string

TYPE: str

Source code in genie/write_invalid_reasons.py
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
def _combine_center_file_errors(
    syn: synapseclient.Synapse, center_errorsdf: pd.DataFrame
) -> str:
    """Combine all center errors into one printable string

    Args:
        syn (synapseclient.Synapse): Synapse connection
        center_errorsdf (pd.DataFrame): Center errors dataframe

    Returns:
        str: Center errors in a pretty formatted string

    """
    center_errors = ""
    for _, row in center_errorsdf.iterrows():
        ent = syn.get(row["id"], downloadFile=False)
        file_errors = row["errors"].replace("|", "\n")
        error_text = f"\t{ent.name} ({ent.id}):\n\n{file_errors}\n\n"
        center_errors += error_text
    return center_errors

get_center_invalid_errors(syn, error_tracker_synid)

Get all invalid errors per center

PARAMETER DESCRIPTION
syn

Synapse connection

TYPE: Synapse

error_tracker_synid

Synapse id of invalid error database table

TYPE: str

RETURNS DESCRIPTION
dict

{center: file error string}

TYPE: dict

Source code in genie/write_invalid_reasons.py
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
def get_center_invalid_errors(
    syn: synapseclient.Synapse, error_tracker_synid: str
) -> dict:
    """Get all invalid errors per center

    Args:
        syn (synapseclient.Synapse): Synapse connection
        error_tracker_synid (str): Synapse id of invalid error database table

    Returns:
        dict: {center: file error string}

    """
    error_tracker = syn.tableQuery(f"SELECT * FROM {error_tracker_synid}")
    error_trackerdf = error_tracker.asDataFrame()
    center_errorsdf = error_trackerdf.groupby("center")
    center_error_map = {}
    for center, df in center_errorsdf:
        center_error_map[center] = _combine_center_file_errors(syn, df)
    return center_error_map