pygeometa
pygeometa is a Python package to generate metadata for geospatial datasets.
Installation
pygeometa is best installed and used within a Python virtualenv.
Requirements
- Python 3 and above
- Python virtualenv package
Dependencies
Dependencies are listed in requirements.txt. Dependencies are automatically installed during pygeometa's installation.
Installing the Package
python3 -m venv my-env
cd my-env
. bin/activate
git clone https://github.com/geopython/pygeometa.git
cd pygeometa
python3 setup.py build
python3 setup.py install
Running
From the command line
# show all subcommands
pygeometa
# show all supported schemas
pygeometa metadata schemas
# provide a basic sanity check/report on an MCF
pygeometa metadata info path/to/file.yml
# generate an ISO 19139 document to stdout
pygeometa metadata generate path/to/file.yml --schema=iso19139
# generate an ISO 19139 document to disk
pygeometa metadata generate path/to/file.yml --schema=iso19139 --output=some_file.xml
# generate an ISO 19139 document to disk with debugging (ERROR, WARNING, INFO, DEBUG)
pygeometa metadata generate path/to/file.yml --schema=iso19139 --output=some_file.xml --verbosity=DEBUG # add verbose (ERROR, WARNING, INFO, DEBUG)
# use your own defined schema
pygeometa metadata generate path/to/file.yml --schema_local=/path/to/my-schema --output=some_file.xml # to file
# validate your MCF
pygeometa metadata validate path/to/file.yml
# import a metadata document to MCF
pygeometa metadata import path/to/file.xml --schema=iso19139
# transform from one metadata representation to another
pygeometa metadata transform path/to/file.xml --input-schema=iso19139 --output-schema=oarec-record
Supported schemas
Schemas supported by pygeometa:
- dcat, reference
- iso19139, reference
- iso19139-hnap, reference
- OGC API - Records - Part 1: Core, record model, reference
- SpatioTemporal Asset Catalog (STAC)
- iso19139-2, reference
- wmo-cmp, reference
- wmo-wcmp2, reference
- wmo-wigos, reference
- Local schema, specified with
--schema_local=/path/to/my-schema
Using the API from Python
from pygeometa.core import read_mcf, render_j2_template
# read from disk
mcf_dict = read_mcf('/path/to/file.yml')
# read from string
mcf_dict = read_mcf(mcf_string)
# choose ISO 19139 output schema
from pygeometa.schemas.iso19139 import ISO19139OutputSchema
iso_os = ISO19139OutputSchema()
# default schema
xml_string = iso_os.write(mcf_dict)
# user-defined schema
xml_string = render_j2_template(mcf_dict, template_dir='/path/to/new-schema')
# write to disk
with open('output.xml', 'wb') as ff:
ff.write(xml_string)
Development
Setting up a Development Environment
Same as installing a package. Use a virtualenv. Also install developer requirements:
pip3 install -r requirements-dev.txt
Adding a Metadata Schema to the Core
Adding an output metadata schemas to pygeometa involves extending
pygeometa.schemas.base.BaseOutputSchema
and supporting the write
function to return a string of exported metadata content. If you are using
Jinja2 templates, see the next section. If you are using another means of
generating metadata (lxml, xml.etree, json, etc.), override the ABS write
class to emit a string using your tooling/workflow accordingly. See the
below sections for examples.
Once you have added your metadata schema, you need to register it with pygeometa's schema registry:
vi pygeometa/schemas/__init__.py
# edit the SCHEMAS dict with the metadata schema name and dotted path of class
Jinja2 templates
To add support for a new metadata schema using Jinja2 templates:
cp -r pygeometa/schemas/iso19139 pygeometa/schemas/new-schema
Then modify *.j2
files in the new pygeometa/schemas/new-schema
directory
to comply to new metadata schema.
Custom tooling
To add support for a new metadata schemas using other tooling/workflow:
mkdir pygeometa/schemas/foo
cp pygeometa/schemas/iso19139/__init__.py pygeometa/schemas/foo
vi pygeometa/schemas/foo/__init__.py
# update class name and super().__init__() function accordingly
Running Tests
# via setuptools
python3 setup.py test
# manually
cd tests
python3 run_tests.py
Releasing
# update version
vi pygeometa/__init__.py
vi debian/changelog # add changelog entry and summary of updates
git commit -m 'update release version' pygeometa/__init__.py debian/changelog
# push changes
git push origin master
git tag -a x.y.z -m 'tagging release x.y.z'
# push tag
git push --tags
rm -fr build dist *.egg-info
python3 setup.py sdist bdist_wheel --universal
twine upload dist/*
Code Conventions
Bugs and Issues
All bugs, enhancements and issues are managed on GitHub.