o
    wvXjƒ$  ã                   @   sø   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z ddlmZ ddlmZmZ dd	lmZmZmZ dd
lmZ ddlmZ dZdZeG dd„ deƒƒZG dd„ deƒZeeƒeG dd„ deƒƒƒZ
G dd„ de
ƒZdd„ Zdd„ Z dS )zÑDeprecated task base class.

The task implementation has been moved to :mod:`celery.app.task`.

This contains the backward compatible Task class used in the old API,
and shouldn't be used in new applications.
é    )Úabsolute_importÚunicode_literals)ÚExchange)Úcurrent_app)ÚContext)ÚTask©Ú	_reprtask)Úpython_2_unicode_compatibleÚwith_metaclass)ÚProxyÚclass_propertyÚreclassmethod)Úmaybe_schedule)Úget_task_logger)r   r   ÚTaskTypeÚPeriodicTaskÚtask)ÚdelayÚapply_asyncÚretryÚapplyÚsubtask_from_requestÚsignature_from_requestÚ	signatureÚAsyncResultÚsubtaskÚ_get_requestÚ_get_exec_optionsc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_CompatSharedc                 C   s   || _ || _d S ©N)ÚnameÚcons)Úselfr!   r"   © r$   úM/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/task/base.pyÚ__init__#   s   
z_CompatShared.__init__c                 C   ó
   t | jƒS r    )Úhashr!   ©r#   r$   r$   r%   Ú__hash__'   ó   
z_CompatShared.__hash__c                 C   s   d| j f S )Nz<OldTask: %r>)r!   r)   r$   r$   r%   Ú__repr__*   s   z_CompatShared.__repr__c                 C   s
   |   |¡S r    )r"   )r#   Úappr$   r$   r%   Ú__call__-   r+   z_CompatShared.__call__N)Ú__name__Ú
__module__Ú__qualname__r&   r*   r,   r.   r$   r$   r$   r%   r       s
    r   c                       s,   e Zd ZdZi Z‡ fdd„Zdd„ Z‡  ZS )r   a  Meta class for tasks.

    Automatically registers the task in the task registry (except
    if the :attr:`Task.abstract`` attribute is set).

    If no :attr:`Task.name` attribute is provided, then the name is generated
    from the module and class name.
    c                    sN  t tˆƒj}ˆ  d¡pd}ˆ  dd ¡}|sˆ  dd¡s"|ˆˆˆˆ ƒS ˆ  dd ¡p-ˆ  dd ¡}t|tƒsK|d u rKˆD ]}t|dd ƒrF|j} nq9t	 
¡ }|ˆ d< ˆ  d¡}	|	s`| ˆ|¡ ˆ d< }	ˆ  d	¡sŠd
dlm}
 d |ˆg¡}|ˆjvrŠdˆj|< |
t|‡ ‡‡‡fdd„ƒƒ |j}|	|vr›| |ˆˆˆˆ ƒ¡ ||	 }| |¡ |jS )Nr0   Ú__main__ÚabstractÚautoregisterTÚ_appr-   r!   Ú
_decoratedr   )Úconnect_on_app_finalizeÚ.é   c              	      s   t  ˆˆˆtˆ | d�¡S )N)r5   )r   Ú__new__Údict)r-   ©ÚattrsÚbasesÚclsr!   r$   r%   Ú<lambda>j   s   
 
ÿz"TaskType.__new__.<locals>.<lambda>)Úsuperr   r:   ÚgetÚpopÚ
isinstancer   Úgetattrr5   r   Ú_get_current_objectÚgen_task_nameÚcelery._stater7   ÚjoinÚ_creation_countr   Ú_tasksÚregisterÚbindÚ	__class__)r?   r!   r>   r=   ÚnewÚtask_moduler3   r-   ÚbaseÚ	task_namer7   Úunique_nameÚtasksÚinstance©rN   r<   r%   r:   =   s@   þ



þ
zTaskType.__new__c                 C   s   t | ƒS r    r   r)   r$   r$   r%   r,   z   s   zTaskType.__repr__)r/   r0   r1   Ú__doc__rJ   r:   r,   Ú__classcell__r$   r$   rV   r%   r   1   s
    	=r   c                   @   sÂ   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZejd ZeD ]Zeeeeƒƒeƒ e< q%edd„ ƒZed	d
„ ƒZejdd
„ ƒZedd„ ƒZedd„ ƒZ		ddd„Zeddd„ƒZdS )r   zbDeprecated Task base class.

    Modern applications should use :class:`celery.Task` instead.
    TFNÚregular))Úexchange_typeÚtask_default_exchange_type)Údelivery_modeÚtask_default_delivery_modec                 C   s   |   ¡ S r    )r   r)   r$   r$   r%   Úrequest£   s   zTask.requestc                 C   s   | j d u r	| jjS | j S r    )Ú_backendr-   Úbackendr)   r$   r$   r%   r`   §   s   
zTask.backendc                 C   s
   || _ d S r    )r_   )r?   Úvaluer$   r$   r%   r`   ­   ó   
c                 K   r'   r    )r   r!   )r?   Úkwargsr$   r$   r%   Ú
get_logger±   rb   zTask.get_loggerc                 C   s   |   ¡  ¡ S )a×  Deprecated method used to get a broker connection.

        Should be replaced with :meth:`@Celery.connection`
        instead, or by acquiring connections from the connection pool:

        Examples:
            >>> # using the connection pool
            >>> with celery.pool.acquire(block=True) as conn:
            ...     pass

            >>> # establish fresh connection
            >>> with celery.connection_for_write() as conn:
            ...     pass
        )Ú_get_appÚconnection_for_write)r?   r$   r$   r%   Úestablish_connectionµ   s   zTask.establish_connectionc                 K   sX   |du r| j n|}|du r| j}|p|  ¡ }|  ¡ jj|f|o#t||ƒ| jddœ|¤ŽS )a$  Deprecated method to get the task publisher (now called producer).

        Should be replaced with :class:`kombu.Producer`:

        .. code-block:: python

            with app.connection_for_write() as conn:
                with app.amqp.Producer(conn) as prod:
                    my_task.apply_async(producer=prod)

            or even better is to use the :class:`@amqp.producer_pool`:

            .. code-block:: python

                with app.producer_or_acquire() as prod:
                    my_task.apply_async(producer=prod)
        NF)ÚexchangeÚrouting_keyÚauto_declare)rh   rZ   rg   re   ÚamqpÚProducerr   ri   )r#   Ú
connectionrh   rZ   Úoptionsr$   r$   r%   Úget_publisherÇ   s   
ÿýýzTask.get_publisherc                 K   sJ   |   ¡ j}|p
|  ¡ }|du r| jr|j| j n|j}|j||fi |¤ŽS )zŠGet consumer for the queue this task is sent to.

        Deprecated!

        Should be replaced by :class:`@amqp.TaskConsumer`.
        N)re   rk   rg   ÚqueueÚqueuesÚdefault_queueÚTaskConsumer)r?   rm   rq   rc   ÚQr$   r$   r%   Úget_consumerã   s
   
zTask.get_consumer)NNN)NN) r/   r0   r1   rW   r3   Ú	__bound__Ú__v2_compat__rp   ri   rh   rZ   r\   Ú	mandatoryÚ	immediateÚpriorityÚtypeÚBaseTaskÚfrom_configÚ_COMPAT_CLASSMETHODSr!   r   rE   Úlocalsr   r^   r`   ÚsetterÚclassmethodrd   rg   ro   ru   r$   r$   r$   r%   r   ~   s@    







ÿr   c                       s@   e Zd ZdZdZdZdZdZdZ‡ fdd„Z	e
dd„ ƒZ‡  ZS )	r   z@A task that adds itself to the :setting:`beat_schedule` setting.TFNc                    s4   t | dƒs	tdƒ‚t| j| jƒ| _tt| ƒ ¡  d S )NÚ	run_everyz.Periodic tasks must have a run_every attribute)ÚhasattrÚNotImplementedErrorr   r‚   ÚrelativerA   r   r&   r)   rV   r$   r%   r&   û   s   
ÿzPeriodicTask.__init__c                 C   s,   | j | jdi | jp
i | jdœ|jj| j < d S )Nr$   )r   ÚscheduleÚargsrc   rn   r…   )r!   r‚   rn   r…   ÚconfÚbeat_schedule)r?   r-   r$   r$   r%   Úon_bound  s   úzPeriodicTask.on_bound)r/   r0   r1   rW   r3   Úignore_resultr…   rn   Úcompatr&   r�   rŠ   rX   r$   r$   rV   r%   r   ò   s    r   c                  O   s    t j| i tdtifi |¤Ž¤ŽS )z5Deprecated decorator, please use :func:`celery.task`.rQ   )r   r   r;   r   )r‡   rc   r$   r$   r%   r     s    r   c                  O   s   t di tdtifi |¤Ž¤ŽS )z:Deprecated decorator, please use :setting:`beat_schedule`.rQ   Nr$   )r   r;   r   )r‡   rn   r$   r$   r%   Úperiodic_task  s   r�   N)!rW   Ú
__future__r   r   Úkombur   Úceleryr   Úcelery.app.taskr   r   r|   r	   Úcelery.fiver
   r   Úcelery.localr   r   r   Úcelery.schedulesr   Úcelery.utils.logr   Ú__all__r~   Úobjectr   r{   r   r   r   r�   r$   r$   r$   r%   Ú<module>   s,   Mr