o ?Og @sddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z ddl m Z m Z ddlmZeejefZddZdd Zd d Zd d ZddZddZejdejdddZejddZeejejddZ dS)N)UnionAnyOptional)ResourceReader Traversable) wrap_speccCs tt|S)z3 Get a Traversable resource from a package ) from_package get_package)packager 8/opt/alt/python310/lib64/python3.10/importlib/_common.pyfiless rcCs.t|}tj|\}}|rt|d|S)zNormalize a path by ensuring it is a string. If the resulting string contains path separators, an exception is raised. z must be only a file name)strospathsplit ValueError)rZstr_pathparent file_namer r r normalize_paths rcCs*|j}t|jdd}|durdS||jS)z? Return the package's loader if it's a ResourceReader. get_resource_readerN)__spec__getattrloadernamer specreaderr r r r&s   rcCst|tjr|St|S)N) isinstancetypes ModuleType importlib import_module)Zcandr r r resolve7sr$cCs(t|}t|jdurt|d|S)zTake a package name or module object and return the module. Raise an exception if the resolved module is not a package. Nz is not a package)r$rsubmodule_search_locations TypeError)r Zresolvedr r r r <sr cCst|}|j|j}|S)z= Return a Traversable object for the given package. )rrrrrrr r r r Hsr ) _os_removeccstj|d\}}z&t||t|~t|VWz||WdSty/YdSwz||Wwty?Yww)Nsuffix)tempfileZmkstemprwriteclosepathlibPathFileNotFoundError)rr*r(fdZraw_pathr r r _tempfileRs"    r2cCst|j|jdS)zu Given a Traversable object, return that object as a path on the local file system in a context manager. r))r2Z read_bytesrrr r r as_filegsr4ccs |VdS)z7 Degenerate behavior for pathlib.Path objects. Nr r3r r r _ps r5)r')!rr.r+ functools contextlibr r"typingrrrabcrrZ _adaptersrr!rZPackagerrrr$r r contextmanagerremover2singledispatchr4registerr/r5r r r r s4