Expand source code
def main():
args = parse_args()
dreq_version = args.dreq_version
if args.all:
args.opportunity = True
args.experiment_group = True
args.variable_group = True
dreq_content = dc.load(dreq_version)
base = dq._get_base_dreq_tables(dreq_content, dreq_version, purpose='request')
if args.opportunity:
# opp_names = set(rec.title for rec in base['Opportunity'].records.values())
outdir = outdir_setup('Opportunity')
for rec in base['Opportunity'].records.values():
# Get names of Variable Groups linked from this Opportunity
vg_names = [base['Variable Group'].records[link.record_id].name
for link in rec.variable_groups]
# Get names of Experiment Groups linked from this Opportunity
eg_names = [base['Experiment Group'].records[link.record_id].name
for link in rec.experiment_groups]
info = {
'Title': rec.title,
# "text": "Hello\nWorld\nThis is a multiline string.",
'Description': format_text(rec.description),
'Expected Impacts': format_text(rec.expected_impacts),
'Justification of Resources': format_text(rec.justification_of_resources),
'Experiment Groups': eg_names,
'Variable Groups': vg_names,
}
# Add additional info present in the Harmonised DR
themes = [base['Data Request Themes'].records[link.record_id].name
for link in rec.themes]
info.update({
'Opportunity ID': int(rec.opportunity_id),
'Themes': themes,
})
if hasattr(rec, 'mips___high_priority'):
mip_names = [base['MIPs'].records[link.record_id].mip_short_name
for link in rec.mips___high_priority]
info.update({
'MIPs - high priority': mip_names,
})
if hasattr(rec, 'mips___lower_priority'):
mip_names = [base['MIPs'].records[link.record_id].mip_short_name
for link in rec.mips___lower_priority]
info.update({
'MIPs - lower priority': mip_names,
})
info['Harmonised DR version'] = dreq_version
info_yaml = yaml.safe_dump(info, default_flow_style=False, sort_keys=False, allow_unicode=True)
filename = f'{format_attribute_name(rec.title)}.yaml'
outfile = outdir / filename
with open(outfile, 'w') as f:
f.write(info_yaml)
print(f'Wrote {outfile}')
if args.experiment_group:
outdir = outdir_setup('Experiment_Group')
for rec in base['Experiment Group'].records.values():
# Get names of experiments belonging to this experiment group
expt_names = [base['Experiments'].records[link.record_id].experiment
for link in rec.experiments]
assert len(expt_names) == len(set(expt_names))
title = rec.title if hasattr(rec, 'title') else ''
info = {
'Name': rec.name,
'Title': title,
'Experiments': expt_names,
'Number of experiments in group': len(expt_names),
}
info['Harmonised DR version'] = dreq_version
info_yaml = yaml.safe_dump(info, default_flow_style=False, sort_keys=False, allow_unicode=True)
filename = f'{format_attribute_name(rec.name)}.yaml'
outfile = outdir / filename
with open(outfile, 'w') as f:
f.write(info_yaml)
print(f'Wrote {outfile}')
# write_logfile(outdir, dreq_version)
if args.variable_group:
outdir = outdir_setup('Variable_Group')
for rec in base['Variable Group'].records.values():
# Get names of variables belong to this variable group
var_names = [base['Variables'].records[link.record_id].cmip7_compound_name
for link in rec.variables]
assert len(var_names) == len(set(var_names))
# Get priority level of this variable group
priority_level = [base['Priority Level'].records[link.record_id].name
for link in rec.priority_level]
assert len(priority_level) == 1, f'Unexpected priority level: {priority_level}'
priority_level = priority_level[0]
title = rec.title if hasattr(rec, 'title') else ''
justification = rec.justification if hasattr(rec, 'justification') else ''
notes = rec.notes if hasattr(rec, 'notes') else ''
info = {
'Name': rec.name,
'Title': title,
'Priority Level': priority_level,
'Justification': format_text(justification),
'Notes': notes,
'Variables': var_names,
'Number of variables in group': len(var_names),
}
# Add additional info present in the Harmonised DR
if hasattr(rec, 'theme'):
themes = [base['Data Request Themes'].records[link.record_id].name
for link in rec.theme]
info.update({
'Themes': themes,
})
if hasattr(rec, 'mip_ownership'):
mip_names = [base['MIPs'].records[link.record_id].mip_short_name
for link in rec.mip_ownership]
info.update({
'MIP ownership': mip_names,
})
if hasattr(rec, 'of_interest_to_mips'):
mip_names = [base['MIPs'].records[link.record_id].mip_short_name
for link in rec.of_interest_to_mips]
info.update({
'Of interest to MIPs': mip_names,
})
info['Harmonised DR version'] = dreq_version
info_yaml = yaml.safe_dump(info, default_flow_style=False, sort_keys=False, allow_unicode=True)
filename = f'{format_attribute_name(rec.name)}.yaml'
outfile = outdir / filename
with open(outfile, 'w') as f:
f.write(info_yaml)
print(f'Wrote {outfile}')