Extension manifests¶
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...
3id: asdf://example.com/example-project/manifests/example-1.0.0
The 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 asdf
library.
4extension_uri: asdf://example.com/example-project/extensions/example-1.0.0
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.
title
and description
are optional documentation properties.
7asdf_standard_requirement:
8 gte: 1.3.0
9 lt: 1.5.0
The optional asdf_standard_requirement
property describes the
ASDF Standard versions that are compatible with this extension. The
gte
and 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.
gt
and 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
The 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) schema_uri
property contains the URI of a schema that can be used to validate objects
with that tag. Tag objects may also include title
and description
documentation properties.
Validating a manifest¶
This library includes a schema, asdf://asdf-format.org/core/schemas/extension_manifest-1.0.0
,
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)