Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use model metadata package #25

Merged
merged 13 commits into from
Dec 8, 2017
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ install:
- export PATH="$CONDA_PREFIX/bin:$PATH"
- hash -r
- conda config --set always_yes yes --set changeps1 no
- conda config --add channels csdms
- conda config --add channels csdms-stack
- conda config --add channels conda-forge
- conda install python=$TRAVIS_PYTHON_VERSION
Expand Down
1 change: 1 addition & 0 deletions conda-recipe/meta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ requirements:
- cfunits-python
- jinja2
- scripting
- model_metadata

test:
requires:
Expand Down
4 changes: 2 additions & 2 deletions pymt/cmd/cmt_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import json
import yaml

from ..framework.bmi_metadata import load_bmi_metadata, bmi_data_files
from model_metadata.metadata import find_model_data_files


class redirect(object):
Expand Down Expand Up @@ -64,7 +64,7 @@ def read_component_configuration(names, vars=None):
with open(os.path.join(component.datadir, 'parameters.yaml')) as fp:
config['parameters'] = yaml.load(fp)
if 'files' in vars:
config['files'] = bmi_data_files(component.datadir)
config['files'] = find_model_data_files(component.datadir)
if 'api' in vars:
with open(os.path.join(component.datadir, 'api.yaml')) as fp:
api = yaml.load(fp)
Expand Down
4 changes: 3 additions & 1 deletion pymt/framework/bmi_bridge.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
"""Bridge between BMI and a PyMT component."""
import os
from pprint import pformat

Expand Down Expand Up @@ -726,7 +727,8 @@ class BmiCap(GridMapperMixIn, _BmiCap, BmiTimeInterpolator, SetupMixIn):

def bmi_factory(cls):
class BmiWrapper(BmiCap):
__doc__ = bmi_docstring(cls.__name__.split('.')[-1])
# __doc__ = bmi_docstring(cls.__name__.split('.')[-1])
__doc__ = bmi_docstring(cls)
_cls = cls

BmiWrapper.__name__ = cls.__name__
Expand Down
48 changes: 29 additions & 19 deletions pymt/framework/bmi_docstring.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import jinja2
import six

from .bmi_metadata import load_bmi_metadata, ModelInfo
from model_metadata import MetadataNotFoundError

from .bmi_metadata import PluginMetadata
from ..babel import BabelConfigError


Expand Down Expand Up @@ -35,8 +37,8 @@
Parameters
----------
{% for param in parameters|sort(attribute='name') -%}
{{param.name}} : {{param.type}}, optional
{{ "%s [default=%s %s]"|format(param.desc, param.value, param.units)|trim|wordwrap(70)|indent(4) }}
{{param.name}} : {{param.value.type}}, optional
{{ "%s [default=%s %s]"|format(param.description, param.value.default, param.value.units)|trim|wordwrap(70)|indent(4) }}
{% endfor %}
{% endif -%}

Expand All @@ -52,7 +54,7 @@
""".strip()


def bmi_docstring(name, author=None, version=None, license=None, doi=None,
def bmi_docstring(plugin, author=None, version=None, license=None, doi=None,
url=None, parameters=None, summary=None, cite_as=None,
email=None):
"""Build the docstring for a BMI model.
Expand Down Expand Up @@ -95,24 +97,32 @@ def bmi_docstring(name, author=None, version=None, license=None, doi=None,
cite_as = cite_as or []

try:
meta = load_bmi_metadata(name)
except (IOError, BabelConfigError):
info = ModelInfo(name=name, author=author, version=version,
license=license, doi=doi, url=url, summary=summary,
cite_as=cite_as, email=None)
defaults = []
meta = PluginMetadata(plugin)
except MetadataNotFoundError:
if isinstance(plugin, six.string_types):
info = dict(authors=author, version=version, license=license,
doi=doi, url=url, summary=summary, cite_as=cite_as)
defaults = {}
name = plugin
else:
raise
else:
info = meta['info']
defaults = meta['defaults'].values()
info = meta.info
defaults = meta.parameters
name = meta.name

for param_name, param in defaults.items():
param['name'] = param_name
defaults = defaults.values()

author = author or info.author
author = author or info['authors']
email = email or '-'
version = version or info.version
license = license or info.license
doi = doi or info.doi
url = url or info.url
summary = summary or info.summary
cite_as = cite_as or info.cite_as
version = version or info['version']
license = license or info['license']
doi = doi or info['doi']
url = url or info['url']
summary = summary or info['summary']
cite_as = cite_as or info['cite_as']
parameters = parameters or defaults

if isinstance(author, types.StringTypes):
Expand Down
Loading