diff --git a/.github/ISSUE_TEMPLATE/update_truth.md b/.github/ISSUE_TEMPLATE/update_truth.md index 0b18a6cd88..5f0be681c1 100644 --- a/.github/ISSUE_TEMPLATE/update_truth.md +++ b/.github/ISSUE_TEMPLATE/update_truth.md @@ -11,12 +11,13 @@ assignees: '' *Write a short summary of the differences that will likely be found in the GitHub Actions testing workflow that was triggered by the pull request that warranted this issue* +- [ ] Link to relevant issue(s): +- [ ] Link to relevant pull request(s): + ## Define the Metadata ## ### Title ### -- [ ] Add a link to the pull request that warranted this issue to the issue title using format dtcenter/{REPO}#{PR_NUMBER}. - -**Example:** Update Truth: For dtcenter/MET#2655 +- [ ] Define the **Title** of this issue as **Update Truth: For dtcenter/{REPO}#{PR_NUMBER}** to indicate the repository and pull request that warranted this issue. ### Assignee ### @@ -55,6 +56,6 @@ assignees: '' be updated. - [ ] Update the truth data. This should be handled by a METplus wrappers engineer. - See the (instructions to update the truth data)[https://metplus.readthedocs.io/en/develop/Contributors_Guide/continuous_integration.html#update-truth-data-update-truth-data-yml] + See the [instructions to update the truth data](https://metplus.readthedocs.io/en/develop/Contributors_Guide/continuous_integration.html#update-truth-data-update-truth-data-yml) for more info. - [ ] Close this issue. diff --git a/.gitignore b/.gitignore index f62ca72792..4c1083c0d4 100644 --- a/.gitignore +++ b/.gitignore @@ -88,7 +88,7 @@ ENV/ # pytest cache files *.pytest_cache* -.idea +.idea/workspace.xml # tilda files generated by emacs *~ diff --git a/.idea/METplus.iml b/.idea/METplus.iml new file mode 100644 index 0000000000..aad402c4e5 --- /dev/null +++ b/.idea/METplus.iml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000..1bbf15ddf7 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000000..105ce2da2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000..044798ac50 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000..35eb1ddfbb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index 661d93e0bc..f067b51cc4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -25,8 +25,6 @@ project = 'METplus' -met_version = '12.0.0' - author = 'UCAR/NCAR, NOAA, CSU/CIRA, and CU/CIRES' # list of contributing authors currently involved with the project @@ -87,6 +85,10 @@ verinfo = version +# compute MET version as X+6.Y.0 of METplus version +x, y, _ = __version__.split('.') +met_version = f'{int(x)+6}.{y}.0' + release_date = __release_date__ release_year = release_date[0:4] diff --git a/metplus/util/config_validate.py b/metplus/util/config_validate.py index d47bda2337..2941733cfc 100644 --- a/metplus/util/config_validate.py +++ b/metplus/util/config_validate.py @@ -6,7 +6,7 @@ from .string_manip import is_python_script, get_wrapper_name from .string_template_substitution import do_string_sub from .config_util import get_process_list, get_custom_string_list -from .wrapper_init import get_wrapper_instance +from .wrapper_init import get_wrapper_class def validate_config_variables(config): @@ -216,7 +216,7 @@ def _get_deprecated_met_list(config, met_tool): if not wrapper_name: return None - wrapper = get_wrapper_instance(config, wrapper_name) + wrapper = get_wrapper_class(config, wrapper_name) if not hasattr(wrapper, 'DEPRECATED_WRAPPER_ENV_VAR_KEYS'): return None diff --git a/metplus/util/wrapper_init.py b/metplus/util/wrapper_init.py index 529c52396a..df87279e84 100644 --- a/metplus/util/wrapper_init.py +++ b/metplus/util/wrapper_init.py @@ -3,21 +3,19 @@ from . import camel_to_underscore -def get_wrapper_instance(config, process, instance=None): - """!Initialize METplus wrapper instance. +def get_wrapper_class(config, process): + """!Get the METplus wrapper class object that is not initialized. + This can be used to read class variables from a wrapper without creating + an instance of the wrapper class. @param config METplusConfig object to pass to wrapper constructor @param process name of wrapper in camel case, e.g. GridStat - @param instance (optional) instance identifier for creating multiple - instances of a wrapper. Set to None (default) if no instance is specified - @returns CommandBuilder sub-class object or None if something went wrong + @returns CommandBuilder subclass or None if something went wrong """ - package_name = (f'metplus.wrappers.{camel_to_underscore(process)}_wrapper') + package_name = f'metplus.wrappers.{camel_to_underscore(process)}_wrapper' try: module = import_module(package_name) - metplus_wrapper = ( - getattr(module, f"{process}Wrapper")(config, instance=instance) - ) + wrapper_class = getattr(module, f"{process}Wrapper") except AttributeError as err: config.logger.error(f"There was a problem loading {process} wrapper: {err}") return None @@ -26,4 +24,20 @@ def get_wrapper_instance(config, process, instance=None): "Wrapper may have been disabled.") return None - return metplus_wrapper + return wrapper_class + + +def get_wrapper_instance(config, process, instance=None): + """!Initialize METplus wrapper instance. + + @param config METplusConfig object to pass to wrapper constructor + @param process name of wrapper in camel case, e.g. GridStat + @param instance (optional) instance identifier for creating multiple + instances of a wrapper. Set to None (default) if no instance is specified + @returns initialized CommandBuilder subclass object or + None if something went wrong + """ + wrapper_class = get_wrapper_class(config, process) + if wrapper_class is None: + return None + return wrapper_class(config, instance=instance) diff --git a/metplus/wrappers/ascii2nc_wrapper.py b/metplus/wrappers/ascii2nc_wrapper.py index c4c9d3e803..80b8272b13 100755 --- a/metplus/wrappers/ascii2nc_wrapper.py +++ b/metplus/wrappers/ascii2nc_wrapper.py @@ -92,22 +92,9 @@ def create_c_dict(self): # MET config variables self.handle_time_summary_dict() - # handle file window variables - for edge in ['BEGIN', 'END']: - file_window = ( - self.config.getseconds('config', - f'ASCII2NC_FILE_WINDOW_{edge}', - '') - ) - if file_window == '': - file_window = ( - self.config.getseconds('config', - f'OBS_FILE_WINDOW_{edge}', - 0) - ) - - c_dict[f'OBS_FILE_WINDOW_{edge}'] = file_window + self.handle_file_window_variables(c_dict, data_types=['OBS']) + # skip RuntimeFreq input file logic - remove once integrated c_dict['FIND_FILES'] = False return c_dict diff --git a/parm/use_cases/met_tool_wrapper/ASCII2NC/ASCII2NC.conf b/parm/use_cases/met_tool_wrapper/ASCII2NC/ASCII2NC.conf index eb91432923..bf7481144b 100644 --- a/parm/use_cases/met_tool_wrapper/ASCII2NC/ASCII2NC.conf +++ b/parm/use_cases/met_tool_wrapper/ASCII2NC/ASCII2NC.conf @@ -47,8 +47,8 @@ ASCII2NC_OUTPUT_TEMPLATE = {OUTPUT_BASE}/ascii2nc/precip24_{valid?fmt=%Y%m%d%H}. ASCII2NC_SKIP_IF_OUTPUT_EXISTS = False -ASCII2NC_FILE_WINDOW_BEGIN = 0 -ASCII2NC_FILE_WINDOW_END = 0 +#ASCII2NC_FILE_WINDOW_BEGIN = 0 +#ASCII2NC_FILE_WINDOW_END = 0 ### # ASCII2NC Settings