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)