Source code for wavespectra.core.attributes
"""Standarise SpecArray attributes.
attrs (dict): standarised names for spectral variables, standard_names and units
"""
# from collections import OrderedDict
import os
import yaml
HERE = os.path.dirname(os.path.abspath(__file__))
class AttrDict(dict):
MARKER = object()
def __init__(self, value=None):
if value is None:
pass
elif isinstance(value, dict):
for key in value:
self.__setitem__(key, value[key])
else:
raise TypeError('expected dict')
def __setitem__(self, key, value):
if isinstance(value, dict) and not isinstance(value, AttrDict):
value = AttrDict(value)
super(AttrDict, self).__setitem__(key, value)
def __getitem__(self, key):
found = self.get(key, AttrDict.MARKER)
if found is AttrDict.MARKER:
found = AttrDict()
super(AttrDict, self).__setitem__(key, found)
return found
__setattr__, __getattr__ = __setitem__, __getitem__
with open(os.path.join(HERE, "attributes.yml")) as stream:
attrs = AttrDict(yaml.load(stream, yaml.SafeLoader))
[docs]
def set_spec_attributes(dset):
"""
Standarise CF attributes in specarray variables
"""
for varname, varattrs in attrs.ATTRS.items():
try:
dset[varname].attrs = varattrs
except Exception:
pass