a
    xd                     @   s.   d Z ddlZddlZddlmZ dddZdS )zImport related utilities.    N)reraise.c              
   K   s  |si n|}|du rt j}t| ts(| S || p4| } d| v rBdn|}| |\}}}	|sld|rd|n|	 }	}zvz||fd|i|}
W nH ty } z0tttd| d| t	 d  W Y d}~n
d}~0 0 |	rt
|
|	n|
W S  ttfy   |du r Y n0 |S )a  Get symbol by qualified name.

    The name should be the full dot-separated path to the class::

        modulename.ClassName

    Example::

        celery.concurrency.processes.TaskPool
                                    ^- class name

    or using ':' to separate module and symbol::

        celery.concurrency.processes:TaskPool

    If `aliases` is provided, a dict containing short name/long name
    mappings, the name is looked up in the aliases first.

    Examples:
        >>> symbol_by_name('celery.concurrency.processes.TaskPool')
        <class 'celery.concurrency.processes.TaskPool'>

        >>> symbol_by_name('default', {
        ...     'default': 'celery.concurrency.processes.TaskPool'})
        <class 'celery.concurrency.processes.TaskPool'>

        # Does not try to look up non-string names.
        >>> from celery.concurrency.processes import TaskPool
        >>> symbol_by_name(TaskPool) is TaskPool
        True
    N:packagezCouldn't import z:    )	importlibimport_module
isinstancestrget
rpartition
ValueErrorr   sysexc_infogetattrImportErrorAttributeError)namealiasesimpr   sepdefaultkwargsmodule_name_cls_namemoduleexc r   K/var/www/html/Ranjet/env/lib/python3.9/site-packages/kombu/utils/imports.pysymbol_by_name	   s.    !


r    )NNNr   N)__doc__r   r   Zkombu.exceptionsr   r    r   r   r   r   <module>   s     