pygeometa is a Python package to manage 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 pip3 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 # import a metadata document to MCF, autodetecting the metadata file format pygeometa metadata import path/to/file.xml --schema=autodetect # --schema=autodetect is default # transform from one metadata representation to another pygeometa metadata transform path/to/file.xml --input-schema=iso19139 --output-schema=oarec-record # transform from one metadata representation to another, autodetecting the metadata file format pygeometa metadata transform path/to/file.xml --input-schema=autodetect --output-schema=oarec-record # --input-schema=autodetect is default
Supported schemas
Schemas supported by pygeometa:
- CSV on the web, reference
- dcat, reference
- iso19139, reference
- iso19139-hnap, reference
- OGC API - Records - Part 1: Core, record model, reference
- OpenAire metadata schema, reference
- Schema.org, 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:
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 ABC 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 classJinja2 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
cd tests
python3 run_tests.pyReleasing
# update version vi pyproject.toml # update [project]/version vi debian/changelog # add changelog entry and summary of updates git commit -m 'update release version' pyproject.toml 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 -m build twine upload dist/*
Code Conventions
Bugs and Issues
All bugs, enhancements and issues are managed on GitHub.