Mini Shell
U
��eg@% � @ s� d dl Z d dlZddlmZ d dlmZmZ d dlm Z d dl
mZ d dlm
Z
mZ d dlmZ d d lmZ d d
lmZmZmZmZmZ d dlmZ d dlmZmZ d d
lmZ dddddddddg Zee ef Z!ee e j"f Z#ed�dd�Z$e d�dd�Z%eeej& d�dd�Z'dd � Z(e!e#ed!�d"d�Z)d-e!e#e e ed%�d&d�Z*e!e#e+d!�d'd�Z,d.e!e#e e e d%�d(d�Z-ee!e#ee d!�d)d��Z.e!e e/d*�d+d�Z0e!ee d�d,d�Z1dS )/� N� )�abc)�contextmanager�suppress)�
import_module)�ResourceLoader)�BytesIO�
TextIOWrapper)�Path)�
ModuleType)�Iterable�Iterator�Optional�Set�Union)�cast)�BinaryIO�TextIO)�ZipImportError�Package�Resource�contents�is_resource�open_binary� open_text�path�read_binary� read_text)�returnc C s\ t | d�r0| jjdkr*td�| jj���qX| S n(t| �}|jjdkrTtd�| ���n|S dS )z�Take a package name or module object and return the module.
If a name, the module is imported. If the passed or imported module
object is not a package, raise an exception.
�__spec__Nz{!r} is not a package)�hasattrr �submodule_search_locations� TypeError�format�namer )�package�module� r'