U
    Z+d?                     @   s8  d Z ddlZddlZddlmZ ddlmZ ddlmZ dZ	e
Zdd Zd5d	d
ZG dd dZG dd deZdd ZdZddddhZdd Zdd Zdddiddddd d!d"d!d#d$d$id%iZeed  d&hB ZG d'd( d(Zd)d* ZG d+d, d,eZddedfd-d.Zdddefd/d0Zd1d2 Zd3d4 ZdS )6zProxy/PromiseProxy implementation.

This module contains critical utilities that needs to be loaded as
soon as possible, and that shall not load any third party modules.

Parts of this module is Copyright by Werkzeug Team.
    N)reduce)import_module)
ModuleType)ProxyPromiseProxy
try_importmaybe_evaluatec                    s,    fdd}ddd}t | f||dS )Nc                    s    |  }||_|S N)__new____getter)clsgetterinstance	cls_valuetype_ 0/tmp/pip-unpacked-wheel-ucduq0nd/celery/local.pyr
      s    z"_default_cls_attr.<locals>.__new__c                 S   s   |d k	r|  |S | S r	   )r   )selfobjr   r   r   r   __get__    s    z"_default_cls_attr.<locals>.__get__)r
   r   )N)type)namer   r   r
   r   r   r   r   _default_cls_attr   s    
 r   c                 C   s(   z
t | W S  tk
r"   | Y S X dS )zUTry to import and return module.

    Returns None if the module does not exist.
    N)r   ImportError)moduledefaultr   r   r   r   (   s    
r   c                   @   s:  e Zd ZdZdZdddZedee dd Z ed	ee d
d Zedeedd Zedeedd Zdd Ze	dd Z
dd Ze	dd Zdd Zdd ZeZdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Z d@dA Z!dBdC Z"dDdE Z#dFdG Z$dHdI Z%dJdK Z&dLdM Z'dNdO Z(dPdQ Z)dRdS Z*dTdU Z+dVdW Z,dXdY Z-dZd[ Z.d\d] Z/d^d_ Z0d`da Z1dbdc Z2ddde Z3dfdg Z4dhdi Z5djdk Z6dldm Z7dndo Z8dpdq Z9drds Z:dtdu Z;dvdw Z<dxdy Z=dzd{ Z>d|d} Z?d~d Z@dd ZAdS )r   zProxy to another object.)Z__localZ__argsZ__kwargs__dict__Nc                 C   sb   t | d| t | d|pd t | d|p.i  |d k	rHt | d| |d k	r^t | d| d S )N_Proxy__local_Proxy__argsr   _Proxy__kwargs__custom_name____doc__)object__setattr__)r   localargskwargsr   r"   r   r   r   __init__9   s    zProxy.__init__r   c                 C   s,   z| j W S  tk
r&   |  j Y S X d S r	   )r!   AttributeError_get_current_object__name__r   r   r   r   r+   C   s    zProxy.__name__qualnamec                 C   s,   z| j W S  tk
r&   |  j Y S X d S r	   )r!   r)   r*   __qualname__r,   r   r   r   r.   J   s    zProxy.__qualname__r   c                 C   s
   |   jS r	   )r*   
__module__r,   r   r   r   r/   Q   s    zProxy.__module__docc                 C   s
   |   jS r	   )r*   r"   r,   r   r   r   r"   U   s    zProxy.__doc__c                 C   s
   |   jS r	   )r*   	__class__r,   r   r   r   
_get_classY   s    zProxy._get_classc                 C   s   |   S r	   )r2   r,   r   r   r   r1   \   s    zProxy.__class__c                 C   s\   t | d}t|ds$|| j| jS zt|| jW S  tk
rV   td| j Y nX dS )zGet current object.

        This is useful if you want the real
        object behind the proxy at a time for performance reasons or because
        you want to pass the object into a different context.
        r   Z__release_local__zno object bound to N)	r#   __getattribute__hasattrr   r    getattrr+   r)   RuntimeError)r   locr   r   r   r*   `   s    
zProxy._get_current_objectc                 C   s.   z|   jW S  tk
r(   tdY nX d S )Nr   )r*   r   r6   r)   r,   r   r   r   r   p   s    zProxy.__dict__c                 C   s:   z|   }W n$ tk
r0   d| jj d Y S X t|S )N<z	 unbound>)r*   r6   r1   r+   repr)r   r   r   r   r   __repr__w   s
    zProxy.__repr__c                 C   s*   zt |  W S  tk
r$   Y dS X d S )NF)boolr*   r6   r,   r   r   r   __bool__~   s    zProxy.__bool__c                 C   s,   zt |  W S  tk
r&   g  Y S X d S r	   )dirr*   r6   r,   r   r   r   __dir__   s    zProxy.__dir__c                 C   s"   |dkrt |  S t|  |S )N__members__)r=   r*   r5   r   r   r   r   r   __getattr__   s    zProxy.__getattr__c                 C   s   ||   |< d S r	   r*   )r   keyvaluer   r   r   __setitem__   s    zProxy.__setitem__c                 C   s   |   |= d S r	   rB   )r   rC   r   r   r   __delitem__   s    zProxy.__delitem__c                 C   s   ||   ||< d S r	   rB   )r   ijseqr   r   r   __setslice__   s    zProxy.__setslice__c                 C   s   |   ||= d S r	   rB   r   rG   rH   r   r   r   __delslice__   s    zProxy.__delslice__c                 C   s   t |  || d S r	   )setattrr*   )r   r   rD   r   r   r   r$      s    zProxy.__setattr__c                 C   s   t |  | d S r	   )delattrr*   r@   r   r   r   __delattr__   s    zProxy.__delattr__c                 C   s   t |  S r	   )strr*   r,   r   r   r   __str__   s    zProxy.__str__c                 C   s   |   |k S r	   rB   r   otherr   r   r   __lt__   s    zProxy.__lt__c                 C   s   |   |kS r	   rB   rR   r   r   r   __le__   s    zProxy.__le__c                 C   s   |   |kS r	   rB   rR   r   r   r   __eq__   s    zProxy.__eq__c                 C   s   |   |kS r	   rB   rR   r   r   r   __ne__   s    zProxy.__ne__c                 C   s   |   |kS r	   rB   rR   r   r   r   __gt__   s    zProxy.__gt__c                 C   s   |   |kS r	   rB   rR   r   r   r   __ge__   s    zProxy.__ge__c                 C   s   t |  S r	   )hashr*   r,   r   r   r   __hash__   s    zProxy.__hash__c                 O   s   |   ||S r	   rB   r   akwr   r   r   __call__   s    zProxy.__call__c                 C   s   t |  S r	   )lenr*   r,   r   r   r   __len__   s    zProxy.__len__c                 C   s   |   | S r	   rB   r   rG   r   r   r   __getitem__   s    zProxy.__getitem__c                 C   s   t |  S r	   )iterr*   r,   r   r   r   __iter__   s    zProxy.__iter__c                 C   s   ||   kS r	   rB   rb   r   r   r   __contains__   s    zProxy.__contains__c                 C   s   |   || S r	   rB   rK   r   r   r   __getslice__   s    zProxy.__getslice__c                 C   s   |   | S r	   rB   rR   r   r   r   __add__   s    zProxy.__add__c                 C   s   |   | S r	   rB   rR   r   r   r   __sub__   s    zProxy.__sub__c                 C   s   |   | S r	   rB   rR   r   r   r   __mul__   s    zProxy.__mul__c                 C   s   |   | S r	   rB   rR   r   r   r   __floordiv__   s    zProxy.__floordiv__c                 C   s   |   | S r	   rB   rR   r   r   r   __mod__   s    zProxy.__mod__c                 C   s   |   |S r	   )r*   
__divmod__rR   r   r   r   rm      s    zProxy.__divmod__c                 C   s   |   | S r	   rB   rR   r   r   r   __pow__   s    zProxy.__pow__c                 C   s   |   |> S r	   rB   rR   r   r   r   
__lshift__   s    zProxy.__lshift__c                 C   s   |   |? S r	   rB   rR   r   r   r   
__rshift__   s    zProxy.__rshift__c                 C   s   |   |@ S r	   rB   rR   r   r   r   __and__   s    zProxy.__and__c                 C   s   |   |A S r	   rB   rR   r   r   r   __xor__   s    zProxy.__xor__c                 C   s   |   |B S r	   rB   rR   r   r   r   __or__   s    zProxy.__or__c                 C   s   |   |S r	   )r*   __div__rR   r   r   r   rt      s    zProxy.__div__c                 C   s   |   |S r	   )r*   __truediv__rR   r   r   r   ru      s    zProxy.__truediv__c                 C   s
   |    S r	   rB   r,   r   r   r   __neg__   s    zProxy.__neg__c                 C   s
   |   
 S r	   rB   r,   r   r   r   __pos__   s    zProxy.__pos__c                 C   s   t |  S r	   )absr*   r,   r   r   r   __abs__   s    zProxy.__abs__c                 C   s
   |    S r	   rB   r,   r   r   r   
__invert__   s    zProxy.__invert__c                 C   s   t |  S r	   )complexr*   r,   r   r   r   __complex__  s    zProxy.__complex__c                 C   s   t |  S r	   )intr*   r,   r   r   r   __int__  s    zProxy.__int__c                 C   s   t |  S r	   )floatr*   r,   r   r   r   	__float__	  s    zProxy.__float__c                 C   s   t |  S r	   )octr*   r,   r   r   r   __oct__  s    zProxy.__oct__c                 C   s   t |  S r	   )hexr*   r,   r   r   r   __hex__  s    zProxy.__hex__c                 C   s   |    S r	   )r*   	__index__r,   r   r   r   r     s    zProxy.__index__c                 C   s   |   |S r	   )r*   
__coerce__rR   r   r   r   r     s    zProxy.__coerce__c                 C   s   |    S r	   )r*   	__enter__r,   r   r   r   r     s    zProxy.__enter__c                 O   s   |   j||S r	   )r*   __exit__r\   r   r   r   r     s    zProxy.__exit__c                 C   s   |    S r	   )r*   
__reduce__r,   r   r   r   r     s    zProxy.__reduce__)NNNN)Br+   r/   r.   r"   	__slots__r(   r   rP   r2   propertyr1   r*   r   r:   r<   __nonzero__r>   rA   rE   rF   rJ   rL   r$   rO   rQ   rT   rU   rV   rW   rX   rY   r[   r_   ra   rc   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   ry   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   3   s          











r   c                   @   s>   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdddZ	dS )r   zProxy that evaluates object once.

    :class:`Proxy` will evaluate the object each time, while the
    promise will only evaluate it once.
    )__pending____weakref__c                 C   s0   zt | dW S  tk
r*   |   Y S X d S )N__thing)r#   r3   r)   __evaluate__r,   r   r   r   r*   +  s    z PromiseProxy._get_current_objectc                 O   sx   |   r|||S ddlm} zt| d}W n tk
rF   d }Y nX |d krd| }t| d| ||||f d S )Nr   )dequer   )__evaluated__collectionsr   r#   r3   r)   r$   append)r   funr&   r'   r   pendingr   r   r   __then__1  s    

zPromiseProxy.__then__c                 C   s,   zt | d W n tk
r&   Y dS X dS )Nr   FT)r#   r3   r)   r,   r   r   r   r   >  s
    zPromiseProxy.__evaluated__c                 C   s   |   S r	   rB   r,   r   r   r   __maybe_evaluate__E  s    zPromiseProxy.__maybe_evaluate__r   r   r    c                 C   s   zt | }W n tk
r$    Y nX t| d| |D ]*}zt| | W q8 tk
r`   Y q8X q8zt| d}W n tk
r   Y nNX z"|r| \}}}||| qW 5 zt| d W n tk
r   Y nX X |S d S )Nr   r   )	r   r*   	Exceptionr#   r$   rO   r)   r3   popleft)r   Z_cleanthingattrr   r   r&   r'   r   r   r   r   H  s.    zPromiseProxy.__evaluate__N)r   )
r+   r/   r.   r"   r   r*   r   r   r   r   r   r   r   r   r   "  s    r   c                 C   s(   z
|   W S  tk
r"   |  Y S X dS )z:Attempt to evaluate promise, even if obj is not a promise.N)r   r)   )r   r   r   r   r   i  s    
r   zF
The module %s is deprecated and will be removed in a future version.
__file____path__r"   __all__c                 C   s   | S r	   r   methodr   r   r   fun_of_method  s    r   c                 C   s   ddl m} || S )ziGet attribute from current_app recursively.

    Example: ``getappattr('amqp.get_task_consumer')``.

    r   )current_app)celeryr   Z	_rgetattr)pathr   r   r   r   
getappattr  s    r   r   Z	send_taskzlog.get_default_loggerzlog.setup_loggerzlog.setup_logging_subsystemzlog.redirect_stdouts_to_logger)Zget_default_loggerZsetup_loggerZsetup_logging_subsystemZredirect_stdouts_to_loggerzamqp.TaskConsumer
connection)ZTaskConsumerZestablish_connectionZget_consumer_setZtasks)executelogZ	messagingregistryZsubtaskc                   @   s0   e Zd Zd
ddZdddZdd Zdd	 ZdS )class_propertyNc                 C   sf   |d k	rt |tst|}|d k	r4t |ts4t|}|| _|| _|t}|j| _|j| _|j| _d S r	   )	
isinstanceclassmethod_class_property__get_class_property__setr   r#   r"   r+   r/   )r   r   setterinfor   r   r   r(     s    
zclass_property.__init__c                 C   s"   |r|d kr|j }| j|| S r	   )r1   r   r   )r   r   r   r   r   r   r     s    zclass_property.__get__c                 C   s   |d kr| S | j ||S r	   )r   r   )r   r   rD   r   r   r   __set__  s    zclass_property.__set__c                 C   s   |  | j|S r	   )r1   r   )r   r   r   r   r   r     s    zclass_property.setter)NN)N)r+   r/   r.   r(   r   r   r   r   r   r   r   r     s   

r   c                 C   s   t t| S r	   )r   r   r   r   r   r   reclassmethod  s    r   c                   @   s4   e Zd ZdZi Zi Zi Zdd Zdd Zdd Z	dS )	
LazyModuler   c                 C   s   || j krNt| j | d d |g}| j|j D ]}t| |t|| q,t||S || jkr~t| j| d d |g}t| || |S t| |S r	   )	_object_origins
__import___all_by_moduler+   rM   r5   _directr   r3   )r   r   r   itemr   r   r   rA     s    


zLazyModule.__getattr__c                 C   s   dd t | jtB D S )Nc                 S   s   g | ]}|t kr|qS r   )DEPRECATED_ATTRS.0r   r   r   r   
<listcomp>  s   z&LazyModule.__dir__.<locals>.<listcomp>)setr   DEFAULT_ATTRSr,   r   r   r   r>     s    zLazyModule.__dir__c                 C   s   t | jffS r	   )r   r+   r,   r   r   r   r     s    zLazyModule.__reduce__N)
r+   r/   r.   _compat_modulesr   r   r   rA   r>   r   r   r   r   r   r     s   r   c           
         s   |rd |j| gn| }|d kr$i n|}| d\}}}||d<  fdd| D }t||f||  }	tj|< |	j| |	S )N.r/   c                    s"   i | ]\}}| r |n|qS r   r   )r   	attr_namer   prepare_attrr   r   
<dictcomp>  s    z!create_module.<locals>.<dictcomp>)	joinr+   
rpartitionitemsr   sysmodulesr   update)
r   attrs	cls_attrspkgbaser   fqdn_modnamer   r   r   r   create_module  s     
  r   c           
   	      s   |pd}|pi }|pi }t j|  }t|}t| d}ttttj	dd ||||fD }|||||d}	t
| ||	|d  j fdd|D  | fS )Nr   c                 S   s   g | ]}t |qS r   )tuple)r   vr   r   r   r     s     z#recreate_module.<locals>.<listcomp>)r   r   r   r   r   )r   r   c                    s   i | ]}|t  |qS r   )get_compat_module)r   modZ
new_moduler   r   r     s     z#recreate_module.<locals>.<dictcomp>)r   r   get_originsCOMPAT_MODULESgetr   r   r   operatoraddr   r   r   )
r   Zcompat_modulesZ	by_moduledirectr   r   Z
old_moduleoriginsZ_allZcattrsr   r   r   recreate_module  s*    
 r   c                 C   sf   dd }t | j | }t|trFd| j|g}t| }tj|< |S t||d< t	|t
|| |dS )Nc                 S   s   t | trtt| fS | S r	   )r   rP   r   r   )r   r   r   r   prepare  s    
z"get_compat_module.<locals>.preparer   r   )r   r   )r   r+   r   rP   r   r   r   r   listr   dict)r   r   r   r   r   r   r   r   r   r     s    
r   c                    s2   i }|   D ] \ }| fdd|D  q|S )Nc                    s   i | ]
}| qS r   r   r   r   r   r   r   '  s      zget_origins.<locals>.<dictcomp>)r   r   )Zdefsr   r   r   r   r   r   $  s    r   )N) r"   r   r   	functoolsr   	importlibr   typesr   r   r+   r/   r   r   r   r   r   ZMODULE_DEPRECATEDr   r   r   r   r   keysr   r   r   r   r   r   r   r   r   r   r   r   <module>   s`   
 pG   

