o [d @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 (/usr/lib/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)rstr_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)candr 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 resolvedr 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)tempfilemkstemprwriteclosepathlibPathFileNotFoundError)rr-r+fdraw_pathr r r _tempfileRs"    r7cCst|j|jdS)zu Given a Traversable object, return that object as a path on the local file system in a context manager. r,)r7 read_bytesrrr r r as_filegsr:ccs |VdS)z7 Degenerate behavior for pathlib.Path objects. Nr r9r r r _ps r;)r*)!rr2r. functools contextlibr!r#typingrrrabcrr _adaptersrr"rPackagerrrr&r r contextmanagerremover7singledispatchr:registerr3r;r r r r s4