U
    i7g
                     @  sn   d Z ddlmZ ddlZddlmZ ejr@ddlmZ ej	e Z
i Zdddd	d
dZdddddddZdS )a!  A registry of :class:`Schema <marshmallow.Schema>` classes. This allows for string
lookup of schemas, which may be used with
class:`fields.Nested <marshmallow.fields.Nested>`.

.. warning::

    This module is treated as private API.
    Users should not need to use this module directly.
    )annotationsN)RegistryError)Schemastr
SchemaTypeNone)	classnameclsreturnc                   s   |j  d | g}| tkrFt fddt|  D sFt|  | n| tkrX|gt| < |tkrtt|g | n
|gt|< dS )a  Add a class to the registry of serializer classes. When a class is
    registered, an entry for both its classname and its full, module-qualified
    path are added to the registry.

    Example: ::

        class MyClass:
            pass


        register("MyClass", MyClass)
        # Registry:
        # {
        #   'MyClass': [path.to.MyClass],
        #   'path.to.MyClass': [path.to.MyClass],
        # }

    .c                 3  s   | ]}|j  kV  qd S )N)
__module__).0Zeachmodule >/tmp/pip-unpacked-wheel-o_a6af_p/marshmallow/class_registry.py	<genexpr>8   s    zregister.<locals>.<genexpr>N)r   join	_registryanyappend
setdefault)r   r	   fullpathr   r   r   register   s    

r   Fboolzlist[SchemaType] | SchemaType)r   allr
   c              
   C  s|   zt |  }W n4 tk
r@ } ztd| d|W 5 d}~X Y nX t|dkrl|rZt |  S td| dnt |  d S dS )zRetrieve a class from the registry.

    :raises: marshmallow.exceptions.RegistryError if the class cannot be found
        or if there are multiple entries for the given class name.
    zClass with name z1 was not found. You may need to import the class.N   zMultiple classes with name z8 were found. Please use the full, module-qualified path.r   )r   KeyErrorr   len)r   r   classeserrorr   r   r   	get_classH   s    

r!   )F)__doc__
__future__r   typingZmarshmallow.exceptionsr   TYPE_CHECKINGZmarshmallowr   Typer   r   r   r!   r   r   r   r   <module>   s   

+