An extension “manifest” is a YAML document that defines an extension
in a language-independent way. Use of a manifest is recommended for
ASDF extensions that are intended to be implemented by ASDF libraries
in multiple languages, so that other implementers do not need to go
spelunking through Python code to discover the tags and schemas that
are included in the extension. This library provides support for
automatically populating a
Extension object from
a manifest; see Populating an extension from a manifest for more information.
Anatomy of a manifest¶
Here is an example of a simple manifest that describes an extension with one tag and schema:
1%YAML 1.1 2--- 3id: asdf://example.com/example-project/manifests/example-1.0.0 4extension_uri: asdf://example.com/example-project/extensions/example-1.0.0 5title: Example extension 1.0.0 6description: Tags for example objects. 7asdf_standard_requirement: 8 gte: 1.3.0 9 lt: 1.5.0 10tags: 11 - tag_uri: asdf://example.com/example-project/tags/foo-1.0.0 12 schema_uri: asdf://example.com/example-project/schemas/foo-1.0.0 13...
id property contains the URI that uniquely identifies our manifest. This
URI is how we’ll refer to the manifest document’s content when using the
extension_uri property contains the URI of the extension that the manifest
describes. This is the URI written to ASDF file metadata to document that an
extension was used when writing the file.
5title: Example extension 1.0.0 6description: Tags for example objects.
description are optional documentation properties.
7asdf_standard_requirement: 8 gte: 1.3.0 9 lt: 1.5.0
asdf_standard_requirement property describes the
ASDF Standard versions that are compatible with this extension. The
lt properties are used here to restrict ASDF Standard
versions to greater-than-or-equal 1.3.0 and less-than 1.5.0, respectively.
lte properties are also available.
10tags: 11 - tag_uri: asdf://example.com/example-project/tags/foo-1.0.0 12 schema_uri: asdf://example.com/example-project/schemas/foo-1.0.0
tags property contains a list of objects, each representing a new
tag that the extension brings to ASDF. The
tag_uri property contains
the tag itself, while the (optional, but recommended)
property contains the URI of a schema that can be used to validate objects
with that tag. Tag objects may also include
Validating a manifest¶
This library includes a schema,
that can be used to validate a manifest document:
import asdf import yaml schema = asdf.schema.load_schema("asdf://asdf-format.org/core/schemas/extension_manifest-1.0.0") manifest = yaml.safe_load(open("path/to/manifests/example-1.0.0.yaml").read()) asdf.schema.validate(manifest, schema=schema)