[docs]classManifestExtension(Extension):""" Extension implementation that reads the extension URI, ASDF Standard requirement, and tag list from a manifest document. Parameters ---------- manifest : dict Parsed manifest. converters : iterable of asdf.extension.Converter, optional Converter instances for the tags and Python types supported by this extension. compressors : iterable of asdf.extension.Compressor, optional Compressor instances to support additional binary block compression options. validators : iterable of asdf.extension.Validator, optional Validator instances to support validation of custom schema properties. legacy_class_names : iterable of str, optional Fully-qualified class names used by older versions of this extension. """
[docs]@classmethoddeffrom_uri(cls,manifest_uri,**kwargs):""" Construct the extension using the manifest with the specified URI. The manifest document must be registered with ASDF's resource manager. Parameters ---------- manifest_uri : str Manifest URI. See the class docstring for details on keyword parameters. """fromasdf.configimportget_configmanifest=yaml.safe_load(get_config().resource_manager[manifest_uri])returncls(manifest,**kwargs)
def__init__(self,manifest,*,legacy_class_names=None,converters=None,compressors=None,validators=None):self._manifest=manifestiflegacy_class_namesisNone:self._legacy_class_names=[]else:self._legacy_class_names=legacy_class_namesifconvertersisNone:self._converters=[]else:self._converters=convertersifcompressorsisNone:self._compressors=[]else:self._compressors=compressorsifvalidatorsisNone:self._validators=[]else:self._validators=validators@propertydefextension_uri(self):returnself._manifest["extension_uri"]@propertydeflegacy_class_names(self):returnself._legacy_class_names@propertydefasdf_standard_requirement(self):version=self._manifest.get("asdf_standard_requirement",None)ifversionisNone:returnNoneifisinstance(version,str):returnf"=={version}"specifiers=[]forprop,operatorin[("gt",">"),("gte",">="),("lt","<"),("lte","<=")]:value=version.get(prop)ifvalue:specifiers.append(f"{operator}{value}")return",".join(specifiers)@propertydefconverters(self):returnself._converters@propertydefcompressors(self):returnself._compressors@propertydefvalidators(self):returnself._validators@propertydeftags(self):result=[]fortaginself._manifest.get("tags",[]):ifisinstance(tag,str):# ExtensionProxy knows how to handle str tags.result.append(tag)elifisinstance(tag,dict):result.append(TagDefinition(tag["tag_uri"],schema_uris=tag.get("schema_uri"),title=tag.get("title"),description=tag.get("description"),),)else:msg="Malformed manifest document"raiseTypeError(msg)returnresult