Module cvtool.ESGF.copycv2ini

Expand source code
# import json
# import re
# import os
# import sys
# import glob
# from collections import Counter
# from typing import Any, Dict

# try:
#     from ..core.stdout import log
#     from ..core.io import exists
# except:
#     current_dir = os.path.dirname(os.path.abspath(__file__))
#     parent_dir = os.path.dirname(current_dir)
#     sys.path.append(parent_dir)
#     from core.stdout import log
#     from core.io import exists

# from pprint import pprint

# print = log(__file__.split('cvtool')[1])

# path2ini = lambda s: s.replace('<', '%(').replace('>', ')s').replace('activity_id', 'activity_drs')

# def loopformat(dictionary: Dict[str, Any], key: str, prefix: str) -> str:
#     try:
#         for dkey, value in dictionary.items():
#             prefix += f"{dkey.ljust(30)} | {value.get(key)}\n"
#     except AttributeError:
#         for dkey, value in dictionary.items():
#             prefix += f"{dkey.ljust(30)} | {value}\n"
#     return prefix

# def make(output_loc, CVDIR=None, CVFILE=None, INI_CATEGORIES=''):
#     exists(output_loc)

#     if CVDIR[-1] != '/':
#         CVDIR += '/'

#     if bool(CVDIR) & bool(CVFILE):
#         print.warning('Both a CV file and a CV Directory defined. Using CVDIR only!')

#     if exists(CVDIR):
#         PROJECT = Counter([i.split('/')[-1].split('_')[0] for i in glob.glob(f'{CVDIR}*.json')]).most_common()[0][0]

#         def read_section(section: str) -> Dict[str, Any]:
#             return json.load(open(exists(f'{CVDIR}{PROJECT}_{section}.json'), 'r'))
#     else:
#         exists(CVFILE)
#         CVOBJ = json.load(open(f'{CVFILE}.json', 'r'))
#         PROJECT = re.search('/(\w+)_CV.json', CVLOC)[1]

#         def read_section(section: str) -> Dict[str, Any]:
#             return CVOBJ[section]

#     if not INI_CATEGORIES:
#         INI_CATEGORIES = __file__.replace('cv2ini.py', '') + '../sampleconf/ini_categories.json'
#         print.warn('Reading INI categories from preset file. Please ensure these are correct.')

#     DRS = read_section('DRS').get('DRS')

#     cat = json.load(open(INI_CATEGORIES, 'r'))
#     counter = 0
#     categories = ''
#     for requirement in ('required', 'optional'):
#         req = requirement == 'required'
#         for row in cat[requirement]:
#             if row.get('name') != 'description':
#                 index = counter
#                 counter += 1
#             else:
#                 index = 99
#             categories += f"{row.get('name'):20} | {row.get('data_type'):6} | {bool(req):5} | {bool(row.get('supported')):5} | {index}\n"

#     category_defaults = '    project | ' + PROJECT
#     filename_format = path2ini(DRS.get("filename_template"))
#     dataset_id = path2ini(DRS.get("directory_path_template"))
#     directory_format = f'%(root)s/{dataset_id}/%(version)s'
#     dataset_name_format = f"mip_era=%(mip_era)s, source_id=%(source_id)s, experiment=%(experiment_title)s, member_id=%(member_id)s, variable=%(variable_id)s, version=%(version)s"

#     mip_era_options = read_section('mip_era')
#     activity_drs_options = ', '.join(list(read_section('activity_id').keys()))
#     institution_id_options = ', '.join(list(read_section('institution_id').keys()))
#     source_id_options = ', '.join(list(read_section('source_id').keys()))
#     experiment_id_options = ', '.join(list(read_section('experiment_id').keys()))

#     maps = 'experiment_title_map, model_cohort_map, las_time_delta_map'
#     experiment_title_map = loopformat(read_section('experiment_id'), 'experiment', 'map(experiment_id : experiment_title)\n')
#     member_id_pattern = f'[%(sub_experiment_id)s-]%(variant_label)s'
#     table_id_options = ', '.join(list(read_section('table_id')))
#     variable_id_pattern = f'%(string)s'
#     grid_label_options = ', '.join(list(read_section('grid_label').keys()))
#     model_cohort_map = loopformat(read_section('source_id'), 'cohort', 'map(source_id : model_cohort)\n')
#     project_options = PROJECT
#     sub_experiment_id_options = ', '.join(list(read_section('sub_experiment_id').keys()))
#     variant_label_pattern = f'r%(digit)si%(digit)sp%(digit)s'
#     frequency_options = ', '.join(list(read_section('frequency').keys()))
#     version_pattern = f'v%(digit)s'
#     las_time_delta_map = loopformat(read_section('frequency'), False, 'map(frequency : las_time_delta)\n')

#     print.warning('Handler CMOR CF Version definitions required. Do we want an ESGFparse file?')
#     handler = 'esgcet.config.cmip6_handler:CMIP6Handler'
#     min_cmor_version = '3.2.4'
#     min_cf_version = '1.6'
#     min_data_specs_version = '01.00.13'
#     create_cim = 'true'
#     source_type_delimiter = 'space'
#     activity_id_delimiter = 'space'
#     realm_delimiter = 'space'
#     model_cohort_delimiter = 'space'
#     las_configure = 'false'
#     extract_global_attrs = 'WE HAVE NOT YET EXTRACTED THESE'
#     thredds_exclude_variables = 'CHECK WHERE TO FIND THESE'
#     variable_locate = 'ASK ABOUT THIS'
#     variable_per_file = 'true'
#     version_by_date = 'true'

#     write = ('categories', 'category_defaults', 'filename_format', 'dataset_id', 'directory_format', 'dataset_name_format', 'mip_era_options', 'activity_drs_options', 'institution_id_options', 'source_id_options', 'experiment_id_options', 'maps', 'experiment_title_map', 'member_id_pattern', 'table_id_options', 'variable_id_pattern', 'grid_label_options', 'model_cohort_map', 'project_options', 'sub_experiment_id_options', 'variant_label_pattern', 'frequency_options', 'version_pattern', 'las_time_delta_map', 'handler', 'min_cmor_version', 'min_cf_version', 'min_data_specs_version', 'create_cim', 'source_type_delimiter', 'activity_id_delimiter', 'realm_delimiter', 'model_cohort_delimiter', 'las_configure', 'extract_global_attrs', 'thredds_exclude_variables', 'variable_locate', 'variable_per_file', 'version_by_date')

#     with open(f"{output_loc}{PROJECT}.ini", 'w') as f:
#         for var in write:
#             f.write(f"{var} = {locals().get(var)}\n\n")

# if __name__ == '__main__':
#     CVDIR = "/Users/daniel.ellis/W