[docs]classDirectoryResourceMapping(Mapping):""" Resource mapping that reads resource content from a directory or directory tree. Parameters ---------- root : str or importlib.abc.Traversable Root directory (or directory-like Traversable) of the resource files. ``str`` will be interpreted as a filesystem path. uri_prefix : str Prefix used to construct URIs from file paths. The prefix will be prepended to paths relative to the root directory. recursive : bool, optional If ``True``, recurse into subdirectories. Defaults to ``False``. filename_pattern : str, optional Glob pattern that identifies relevant filenames. Defaults to ``"*.yaml"``. stem_filename : bool, optional If ``True``, remove the filename's extension when constructing its URI. """def__init__(self,root,uri_prefix,recursive=False,filename_pattern="*.yaml",stem_filename=True):self._uri_to_file={}self._recursive=recursiveself._filename_pattern=filename_patternself._stem_filename=stem_filenameifisinstance(root,str):self._root=Path(root)else:self._root=rootifuri_prefix.endswith("/"):self._uri_prefix=uri_prefix[:-1]else:self._uri_prefix=uri_prefixforfile,path_componentsinself._iterate_files(self._root,[]):self._uri_to_file[self._make_uri(file,path_components)]=filedef_iterate_files(self,directory,path_components):forobjindirectory.iterdir():ifobj.is_file()andfnmatch.fnmatch(obj.name,self._filename_pattern):yieldobj,path_componentselifobj.is_dir()andself._recursive:yield fromself._iterate_files(obj,path_components+[obj.name])def_make_uri(self,file,path_components):ifself._stem_filename:filename=os.path.splitext(file.name)[0]else:filename=file.namereturn"/".join([self._uri_prefix]+path_components+[filename])def__getitem__(self,uri):returnself._uri_to_file[uri].read_bytes()def__len__(self):returnlen(self._uri_to_file)def__iter__(self):yield fromself._uri_to_filedef__repr__(self):return"{}({!r}, {!r}, recursive={!r}, filename_pattern={!r}, stem_filename={!r})".format(self.__class__.__name__,self._root,self._uri_prefix,self._recursive,self._filename_pattern,self._stem_filename,)