# # # Distribution Statement A. Approved for public release. Distribution unlimited.# # ## # # Author:# # # Naval Research Laboratory, Marine Meteorology Division# # ## # # This program is free software: you can redistribute it and/or modify it under# # # the terms of the NRLMMD License included with this program. This program is# # # distributed WITHOUT ANY WARRANTY; without even the implied warranty of# # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the included license# # # for more details. If you did not receive the license, for more information see:
Version 1.10.0a0 (2023-04-04)#
First attempt at YAML-based plugin interfaces. These updates will be superseded by later alpha releases of v1.10.0. Tagging this version for reference.
Improve output from estimate area extent script
Add YAML-based plugin validator
Update plugin validator to follow references and add a base schema
Update plugin validator to use interface.family or interface
Add new plugin schema
“boundaries” plugin schema
“gridlines” plugin schema
“product_templates” plugin schema (for each of 11 families)
“sectors_dynamic” plugin schema
Update boundaries and gridlines schema to better handle defaults
Convert old YAML to new formats
boundaries YAML to new format
gridlines YAML to new format
product_params YAML to new product_templates format
sectors_dynamic YAML to new format
Add unit tests to validate yaml-based plugins and schema
Major New Functionality#
Add a validator for YAML-based plugins.#
From issue NRLMMD-GEOIPS/geoips#132: 2023-04-04, Add validator for YAML plugins.
created: /geoips/schema/__init__.py
created: /geoips/schema/plugin_validator.py
Add a schema for validating Gridlines plugins.#
From issue NRLMMD-GEOIPS/geoips#109: 2023-04-04, Add schema for Gridlines plugins.
modified: /geoips/schema/gridlines.yaml
Add a schema for validating Boundaries plugins.#
From issue NRLMMD-GEOIPS/geoips#108: 2023-04-04, Add schema for `Boundaries` plugins.
modified: /geoips/schema/boundaries.yaml
Add schema for validating sectors_dynamic plugins#
From issue NRLMMD-GEOIPS/geoips#114: 2023-04-07, Add `sectors_dynamic` plugins
new file: geoips/schema/sectors_dynamic.yaml
Add schema for validating product_templates plugins#
From issue NRLMMD-GEOIPS/geoips#122: 2023-04-04, Add `product_templates` plugins
product_templates plugins require family-specific schema - each family within the interface has a unique schema for validation.
These schema are added to the “product_templates” subdirectory under geoips/schema
new: geoips/interface_modules/product_templates/alg_cmap.yaml
new: geoips/interface_modules/product_templates/alg_interp_cmap.yaml
new: geoips/interface_modules/product_templates/alg.yaml
new: geoips/interface_modules/product_templates/interp_alg_cmap.yaml
new: geoips/interface_modules/product_templates/interp_alg.yaml
new: geoips/interface_modules/product_templates/interp.yaml
Note the following families have “additionalProprerties: true” set on the spec, which means the actual contents of the products are not validated at all.
We will likely want to update these in the future to be named “unvalidated_*” to make it clear that they are intended to be used as temporary product families during development, and once the format of the family is fully identified, we can define a new family to comply.
new: geoips/interface_modules/product_templates/sectored_xarray_dict_to_output_format.yaml
new: geoips/interface_modules/product_templates/unmodified.yaml
new: geoips/interface_modules/product_templates/unsectored_xarray_dict_area_to_output_format.yaml
new: geoips/interface_modules/product_templates/unsectored_xarray_dict_to_output_format.yaml
new: geoips/interface_modules/product_templates/xarray_dict_to_output_format.yaml
Bug Fixes#
Don’t rely on environment variables in unit tests#
From issue NRLMMD-GEOIPS/geoips#156: 2023-04-06, Don’t rely on environment variables in unit tests
Switched from using GEOIPS_PACKAGES_DIR to importlib.resources.files
modified: tests/test_pytest/test_yaml_plugins.py
Enhancements#
Update output from estimate area extent script.#
From issue NRLMMD-GEOIPS/geoips#123: 2023-04-06, update estimate_area_extent
estimate_area_extent script now provides copy/pastable formatted yaml
Change sector_type to sector_family
modified: geoips/sector_utils/estimate_area_extent.py
Update validator to use both interface and family names#
From issue NRLMMD-GEOIPS/geoips#122: 2023-04-04, Add `product_templates` plugins
This parses the path to the schema file in order to determine the interface and family name.
geoips/schema/<interface>.yaml for interface specific schema. geoips/schema/<interface>/<family>.yaml for family-specific schema.
modified: /geoips/schema/plugin_validator.py
Update plugin validator to follow references and add a base schema for all schema#
From issue NRLMMD-GEOIPS/geoips#155: 2023-04-06, Follow references in plugin validator
modified: /geoips/schema/plugin_validator.py
modified: /geoips/schema/base.yaml
modified: /geoips/schema/gridlines.yaml
modified: /geoips/schema/boundaries.yaml
Update boundaries and gridlines schema to simplify and handle default values better#
From issue NRLMMD-GEOIPS/geoips#144: 2023-04-05, Update boundaries/gridlines schema
modified: /geoips/interface_modules/boundaries/default.yaml
modified: /geoips/interface_modules/gridlines/default.yaml
modified: /geoips/schema/boundaries.yaml
modified: /geoips/schema/gridlines.yaml
Refactoring Updates#
Convert old “boundaries” YAML files to new “boundaries” interface json/yaml schema.#
From issue GEOIPS#117: 2023-04-02, Convert yaml files for boundaries interface
Details about change related to improvements or enhancements to the code
created: /geoips/interface_modules/boundaries/
created: /geoips/interface_modules/boundaries/default.yaml
created: /geoips/interface_modules/boundaries/tc_pmw.yaml
created: /geoips/interface_modules/boundaries/tc_visir.yaml
created: /geoips/interface_modules/boundaries/tc_windspeed.yaml
Convert old “gridlines” YAML files to new “gridlines” json/yaml schema.#
From issue NRLMMD-GEOIPS/geoips#118: 2023-04-04, convert yaml files for gridlines interface
created: /geoips/interface_modules/gridlines/default.yaml
created: /geoips/interface_modules/gridlines/tc_0p25degree.yaml
created: /geoips/interface_modules/gridlines/tc_pmw.yaml
created: /geoips/interface_modules/gridlines/tc_visir_3200km.yaml
created: /geoips/interface_modules/gridlines/tc_visir.yaml
created: /geoips/interface_modules/gridlines/tc_windspeed.yaml
Convert old “sectors_dynamic” YAML files to new “sectors_dynamic” json/yaml schema.#
From issue NRLMMD-GEOIPS/geoips#114: 2023-04-07, Add `sectors_dynamic` plugins
new file: geoips/interface_modules/sectors_dynamic/tc_1024x1024/tc_1km_1024x1024.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_1024x1024/tc_2km_1024x1024.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_1400x1400/tc_1km_1400x1400.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_1400x1400/tc_2km_1400x1400.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_1600x1600/tc_2km_1600x1600.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_1600x1600/tc_4km_1600x1600.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_256x256/tc_4km_256x256.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_512x512/tc_2km_512x512.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_512x512/tc_4km_512x512.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_800x800/tc_2km_800x800.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_800x800/tc_4km_800x800.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_huge/tc_0p1km_3200x3200.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_huge/tc_1km_2500x2500.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_huge/tc_1km_3200x3200.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_web_2km_template.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_web_ascat_high_barbs_template.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_web_ascatuhr_barbs_template.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_web_halfkm_template.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_web_qkm_template.yaml
new file: geoips/interface_modules/sectors_dynamic/tc_web_template.yaml
Convert old “product_params” YAML files to new “product_templates” json/yaml schema.#
From issue NRLMMD-GEOIPS/geoips#122: 2023-04-04, Add `product_templates` plugins
Convert all YAML files under geoips/yaml_configs/product_params to valid YAML-based plugins.
Note the interface is “product_templates” for these plugins, and the family can vary. The family determines the contents/layout of the “spec”, and the plugin format must conform with the schema defined in: geoips/schema/product_templates/<family>.yaml
new: geoips/interface_modules/product_templates/alg.yaml
new: geoips/interface_modules/product_templates/Uncorrected-Channel.yaml
new: geoips/interface_modules/product_templates/interp.yaml
new: geoips/interface_modules/product_templates/sectored.yaml
new: geoips/interface_modules/product_templates/unmodified.yaml
new: geoips/interface_modules/product_templates/unsectored.yaml
new: geoips/interface_modules/product_templates/pmw_150/150H.yaml
new: geoips/interface_modules/product_templates/pmw_150/150VNearest.yaml
new: geoips/interface_modules/product_templates/pmw_150/150V.yaml
new: geoips/interface_modules/product_templates/pmw_150/157VNearest.yaml
new: geoips/interface_modules/product_templates/pmw_150/157V.yaml
new: geoips/interface_modules/product_templates/pmw_150/165HNearest.yaml
new: geoips/interface_modules/product_templates/pmw_150/165H.yaml
new: geoips/interface_modules/product_templates/pmw_150/166HNearest.yaml
new: geoips/interface_modules/product_templates/pmw_150/166H.yaml
new: geoips/interface_modules/product_templates/pmw_150/166VNearest.yaml
new: geoips/interface_modules/product_templates/pmw_150/166V.yaml
new: geoips/interface_modules/product_templates/pmw_150/183-1HNearest.yaml
new: geoips/interface_modules/product_templates/pmw_150/183-1H.yaml
new: geoips/interface_modules/product_templates/pmw_150/183-3HNearest.yaml
new: geoips/interface_modules/product_templates/pmw_150/183-3H.yaml
new: geoips/interface_modules/product_templates/pmw_150/183-7H.yaml
new: geoips/interface_modules/product_templates/pmw_150/183HNearest.yaml
new: geoips/interface_modules/product_templates/pmw_150/183H.yaml
new: geoips/interface_modules/product_templates/pmw_150/190VNearest.yaml
new: geoips/interface_modules/product_templates/pmw_150/190V.yaml
new: geoips/interface_modules/product_templates/pmw_37/19HNearest.yaml
new: geoips/interface_modules/product_templates/pmw_37/19H.yaml
new: geoips/interface_modules/product_templates/pmw_37/19VNearest.yaml
new: geoips/interface_modules/product_templates/pmw_37/19V.yaml
new: geoips/interface_modules/product_templates/pmw_37/37H-LegacyNearest.yaml
new: geoips/interface_modules/product_templates/pmw_37/37H-Legacy.yaml
new: geoips/interface_modules/product_templates/pmw_37/37HNearest.yaml
new: geoips/interface_modules/product_templates/pmw_37/37H-PhysicalNearest.yaml
new: geoips/interface_modules/product_templates/pmw_37/37H-Physical.yaml
new: geoips/interface_modules/product_templates/pmw_37/37H.yaml
new: geoips/interface_modules/product_templates/pmw_37/37pctNearest.yaml
new: geoips/interface_modules/product_templates/pmw_37/37pct.yaml
new: geoips/interface_modules/product_templates/pmw_37/37VNearest.yaml
new: geoips/interface_modules/product_templates/pmw_37/37V.yaml
new: geoips/interface_modules/product_templates/pmw_37/color37Nearest.yaml
new: geoips/interface_modules/product_templates/pmw_37/color37.yaml
new: geoips/interface_modules/product_templates/pmw_89/89H-LegacyNearest.yaml
new: geoips/interface_modules/product_templates/pmw_89/89H-Legacy.yaml
new: geoips/interface_modules/product_templates/pmw_89/89HNearest.yaml
new: geoips/interface_modules/product_templates/pmw_89/89H-PhysicalNearest.yaml
new: geoips/interface_modules/product_templates/pmw_89/89H-Physical.yaml
new: geoips/interface_modules/product_templates/pmw_89/89HWNearest.yaml
new: geoips/interface_modules/product_templates/pmw_89/89HW.yaml
new: geoips/interface_modules/product_templates/pmw_89/89H.yaml
new: geoips/interface_modules/product_templates/pmw_89/89pctNearest.yaml
new: geoips/interface_modules/product_templates/pmw_89/89pct.yaml
new: geoips/interface_modules/product_templates/pmw_89/89VNearest.yaml
new: geoips/interface_modules/product_templates/pmw_89/89V.yaml
new: geoips/interface_modules/product_templates/pmw_89/color89Nearest.yaml
new: geoips/interface_modules/product_templates/pmw_89/color89.yaml
new: geoips/interface_modules/product_templates/rain_rate/RainNearest.yaml
new: geoips/interface_modules/product_templates/rain_rate/Rain.yaml
new: geoips/interface_modules/product_templates/sfc_winds/incident-angle.yaml
new: geoips/interface_modules/product_templates/sfc_winds/nrcs.yaml
new: geoips/interface_modules/product_templates/sfc_winds/wind-ambiguities.yaml
new: geoips/interface_modules/product_templates/sfc_winds/windbarbs.yaml
new: geoips/interface_modules/product_templates/sfc_winds/windspeed.yaml
new: geoips/interface_modules/product_templates/tpw/TPW-CIMSS.yaml
new: geoips/interface_modules/product_templates/tpw/TPW-Purple.yaml
new: geoips/interface_modules/product_templates/tpw/TPW-PWAT.yaml
new: geoips/interface_modules/product_templates/visir/Infrared-Gray.yaml
new: geoips/interface_modules/product_templates/visir/Infrared.yaml
new: geoips/interface_modules/product_templates/visir/IR-BD.yaml
new: geoips/interface_modules/product_templates/visir/Night-Vis-GeoIPS1.yaml
new: geoips/interface_modules/product_templates/visir/Night-Vis-IR-GeoIPS1.yaml
new: geoips/interface_modules/product_templates/visir/Night-Vis-IR.yaml
new: geoips/interface_modules/product_templates/visir/Night-Vis.yaml
new: geoips/interface_modules/product_templates/visir/Visible.yaml
new: geoips/interface_modules/product_templates/visir/WV-Lower.yaml
new: geoips/interface_modules/product_templates/visir/WV-Upper.yaml
new: geoips/interface_modules/product_templates/visir/WV.yaml
Testing Updates#
Add unit tests to validate yaml-based plugins and schema#
From issue NRLMMD-GEOIPS/geoips#151: 2023-04-06, Add unit tests to validate plugins
Added pytest requirements to pyproject.toml
Moved bad plugin examples to tests/pytests
Added test script to validate all good YAML plugins, as well as confirm bad yaml plugins fail.
Add pytest tests/pytests to test_full_install.sh
modified: tests/test_full_install.sh
created: tests/test_pytest/test_yaml_plugins.py
modified: pyproject.toml
moved: bad_schema -> tests/pytests/bad_plugins