Module xelo2.io.xelo.report
Expand source code
from datetime import datetime
from pathlib import Path
from xelo2.io.xelo.xml import read_xml_subject, read_xml_task_only
XML_SUBJECTS = Path('/Fridge/metadata/XML_files/Subject_XML_files/')
UPDATES_DIR = Path('/home/giovanni/tools/xelo2bids/xelo2bids/data/metadata/updates/')
def report_xelo_updates():
    most_recent_update = list(sorted(UPDATES_DIR.glob('*.txt')))[-1]
    cutoff = datetime.strptime(most_recent_update.stem[-15:], '%Y%m%d_%H%M%S')
    out_file = UPDATES_DIR / f'xelo_{datetime.now():%Y%m%d_%H%M%S}.txt'
    write_xelo_changes(cutoff, out_file)
def write_xelo_changes(CUTOFF, out_file):
    subj_iter = XML_SUBJECTS.iterdir()
    with open(out_file, 'w') as f:
        for p_xml_subj in sorted(subj_iter):
            if p_xml_subj.stem.lower().startswith('unp'):
                continue
            xml_subj, tasks = read_xml_subject(p_xml_subj, CUTOFF)
            if len(xml_subj) > 1:
                f.write('\n\n')
                print_subject(xml_subj, f)
            for task in tasks:
                if len(task) > 1:
                    f.write('\n')
                    print_task(task, f)
def print_subject(xml_info, f):
    for k, v in xml_info.items():
        if v.strip():
            f.write(f'\t{k:<25}: {v.strip()}\n')
def print_task(task, f):
    full_task = read_xml_task_only(task)
    KEYS = ['SubjectCode', 'TaskName', 'ExperimentDate', 'ExperimentStartTime', 'ExperimentStopTime']
    for k in KEYS:
        v = full_task[k]
        f.write(f'\t{k:<25}: {v.strip()}\n')
    for k, v in task.items():
        if k not in KEYS and v.strip():
            f.write(f'\t{k:<25}: {v.strip()}\n')Functions
- def print_subject(xml_info, f)
- 
Expand source codedef print_subject(xml_info, f): for k, v in xml_info.items(): if v.strip(): f.write(f'\t{k:<25}: {v.strip()}\n')
- def print_task(task, f)
- 
Expand source codedef print_task(task, f): full_task = read_xml_task_only(task) KEYS = ['SubjectCode', 'TaskName', 'ExperimentDate', 'ExperimentStartTime', 'ExperimentStopTime'] for k in KEYS: v = full_task[k] f.write(f'\t{k:<25}: {v.strip()}\n') for k, v in task.items(): if k not in KEYS and v.strip(): f.write(f'\t{k:<25}: {v.strip()}\n')
- def report_xelo_updates()
- 
Expand source codedef report_xelo_updates(): most_recent_update = list(sorted(UPDATES_DIR.glob('*.txt')))[-1] cutoff = datetime.strptime(most_recent_update.stem[-15:], '%Y%m%d_%H%M%S') out_file = UPDATES_DIR / f'xelo_{datetime.now():%Y%m%d_%H%M%S}.txt' write_xelo_changes(cutoff, out_file)
- def write_xelo_changes(CUTOFF, out_file)
- 
Expand source codedef write_xelo_changes(CUTOFF, out_file): subj_iter = XML_SUBJECTS.iterdir() with open(out_file, 'w') as f: for p_xml_subj in sorted(subj_iter): if p_xml_subj.stem.lower().startswith('unp'): continue xml_subj, tasks = read_xml_subject(p_xml_subj, CUTOFF) if len(xml_subj) > 1: f.write('\n\n') print_subject(xml_subj, f) for task in tasks: if len(task) > 1: f.write('\n') print_task(task, f)