o [dt@sNddlmZddlmZGdddZGdddZGdd d Zd d Zd S) )suppress)abcc@s(eZdZdZddfddZddZdS) SpecLoaderAdapterz> Adapt a package spec to adapt the underlying loader. cCs|jSN)loaderspecr */usr/lib/python3.10/importlib/_adapters.py szSpecLoaderAdapter.cCs||_|||_dSr)r r)selfr adapterr r r __init__ szSpecLoaderAdapter.__init__cC t|j|Sr)getattrr r namer r r __getattr__ zSpecLoaderAdapter.__getattr__N)__name__ __module__ __qualname____doc__rrr r r r rs rc@s eZdZdZddZddZdS)TraversableResourcesLoaderz9 Adapt a loader to provide TraversableResources. cC ||_dSrrr r r r r r z#TraversableResourcesLoader.__init__cCst|jSr)DegenerateFilesr _nativerr r r get_resource_readersz.TraversableResourcesLoader.get_resource_readerN)rrrrrr r r r r rs rc@sNeZdZdZGdddejZddZeddZ dd Z d d Z d d Z dS)rzg Adapter for an existing or non-existant resource reader to provide a degenerate .files(). c@sBeZdZddZddZeZZddZeddZ d d d Z d S)zDegenerateFiles.PathcCstdS)Nr )iterr r r r iterdir&zDegenerateFiles.Path.iterdircCdS)NFr r"r r r is_dir)szDegenerateFiles.Path.is_dircCtSrrPath)r otherr r r joinpath.r$zDegenerateFiles.Path.joinpathcCr%)Nr r"r r r r1szDegenerateFiles.Path.namerbcOstr) ValueError)r modeargskwargsr r r open5szDegenerateFiles.Path.openN)r-) rrrr#r&is_fileexistsr+propertyrr2r r r r r)%s r)cCrrrrr r r r8rzDegenerateFiles.__init__cCs>tt|jj|jjWdS1swYdSr)rAttributeErrorr rr rr"r r r _reader;s $zDegenerateFiles._readercCs|j}t|dr |S|S)zB Return the native reader if it supports files(). files)r7hasattr)r readerr r r r@szDegenerateFiles._nativecCrr)rr7)r attrr r r rGrzDegenerateFiles.__getattr__cCr'rr(r"r r r r8Jr$zDegenerateFiles.filesN) rrrrr Traversabler)rr5r7rrr8r r r r rs  rcCs t|jtS)z` Construct a package spec with traversable compatibility on the spec/loader/reader. )r__spec__r)packager r r wrap_specNs r?N) contextlibrr,rrrrr?r r r r s   /