Ë
    –V.j˜Å  ã                   ó¾  — d Z ddlZddlZddlZddlZddlZddlmZ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 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  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z? ddl@mAZAmBZBmCZC ddlDmEZE ddlFmGZGmHZH ddlImJZJmZmKZK ddlLmMZMmNZN ddlOmPZQ dd lRmSZS dd!lTmUZUmVZV dd"lWmXZX dd#lYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZb d$Zc eEed«      Zed%hZfejÎ                  jÑ                  d&«      Zid'Zjd(„ Zkd)„ Zld*„ Zm G d+„ d,ee9«      Zn G d-„ d.«      ZoeoZpy)/z#Actual App instance implementation.é    N)ÚUserDictÚdefaultdictÚdeque)Údatetime)Útimezone©Ú
attrgetter)ÚExit)Úisoparse)Úpools)ÚLamportClock©Úoid_from)Úregister_after_fork)Úcached_property)Úuuid)Ústarpromise)Ú	platformsÚsignals)	Ú_announce_app_finalizedÚ_deregister_appÚ_register_appÚ_set_current_appÚ_task_stackÚconnect_on_app_finalizeÚget_current_appÚget_current_worker_taskÚset_default_app)ÚAlwaysEagerIgnoredÚImproperlyConfigured)Úget_loader_cls)ÚPromiseProxyÚmaybe_evaluate)Úabstract)ÚAttributeDictMixin)ÚSignal)ÚfirstÚhead_from_funÚ
maybe_list)Úgen_task_nameÚinstantiateÚsymbol_by_name)Ú
get_logger)ÚFallbackContextÚ
mro_lookup)Úmaybe_make_awarer   Úto_utcé   )ÚbackendsÚbuiltins)Úprepare)Úadd_autoretry_behaviour)ÚDEFAULT_SECURITY_DIGESTÚfind_deprecated_settings)ÚTaskRegistry)	Ú
AppPicklerÚSettingsÚ_new_key_to_oldÚ_old_key_to_newÚ_unpickle_appÚ_unpickle_app_v2ÚappstrÚ	bugreportÚdetect_settings)ÚCeleryzcelery.fixups.django:fixupÚFORKED_BY_MULTIPROCESSINGzØ
The environment variable {0!r} is not set,
and as such the configuration could not be loaded.

Please set this variable and make sure it points to
a valid configuration module.

Example:
    {0}="proj.celeryconfig"
c                 óR   — t        | j                  |t        t        ht        g¬«      S )zÿReturn true if app has customized method `attr`.

    Note:
        This is used for optimizations in cases where we know
        how the default behavior works, but need to account
        for someone using inheritance to override a method/property.
    )ÚstopÚmonkey_patched)r/   Ú	__class__rC   ÚobjectÚ__name__)ÚappÚattrs     úQC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/app/base.pyÚapp_has_customrN   C   s%   € ô �c—m‘m T´¼Ð0@Ü&. Zô1ð 1ó    c                 ó:   —  t        «       j                  | «      |Ž S )zUnpickle app.)r   Ú	_rgetattr)Úreverse_nameÚargss     rM   Ú_unpickle_appattrrT   O   s   € ð 5Œ?Ó×&Ñ& |Ó4°dÐ;Ð;rO   c                 ó‚   — 	 | j                  «        y # t        $ r"}t        j                  d|d¬«       Y d }~y d }~ww xY w)Nz!after forker raised exception: %rr2   )Úexc_info)Ú_after_forkÚ	ExceptionÚloggerÚinfo)rK   Úexcs     rM   Ú_after_fork_cleanup_appr\   V   s:   € ðJØ�‰ÕøÜò JÜ�‰Ð7¸Àqˆ×IÑIûðJús   ‚ “	>œ9¹>c                   óT   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zed
„ «       Zy)ÚPendingConfigurationNc                 ó`   — t         j                  | d|«       t         j                  | d|«       y )NÚ_dataÚcallback)rI   Ú__setattr__)ÚselfÚconfra   s      rM   Ú__init__zPendingConfiguration.__init__j   s&   € Ü×Ñ˜4 ¨$Ô/Ü×Ñ˜4 ¨XÕ6rO   c                 ó"   — || j                   |<   y ©N©r`   ©rc   ÚkeyÚvalues      rM   Ú__setitem__z PendingConfiguration.__setitem__n   s   € Øˆ�
‰
�3ŠrO   c                 ó8   — | j                   j                  «        y rg   )r`   Úclear©rc   s    rM   rn   zPendingConfiguration.clearq   s   € Ø�
‰
×ÑÕrO   c                 ó<   —  | j                   j                  |i |¤Ž y rg   )r`   Úupdate©rc   rS   Úkwargss      rM   rq   zPendingConfiguration.updatet   s   € Øˆ�
‰
×Ñ˜4Ð* 6Ó*rO   c                 ó:   —  | j                   j                  |i |¤ŽS rg   )r`   Ú
setdefaultrr   s      rM   ru   zPendingConfiguration.setdefaultw   s   € Ø$ˆt�z‰z×$Ñ$ dÐ5¨fÑ5Ð5rO   c                 ó   — || j                   v S rg   rh   )rc   rj   s     rM   Ú__contains__z!PendingConfiguration.__contains__z   s   € ð �d—j‘jÐ Ð rO   c                 ó,   — t        | j                  «      S rg   )ÚlenÚdataro   s    rM   Ú__len__zPendingConfiguration.__len__€   s   € Ü�4—9‘9‹~ÐrO   c                 ó,   — t        | j                  «      S rg   )Úreprrz   ro   s    rM   Ú__repr__zPendingConfiguration.__repr__ƒ   s   € Ü�D—I‘I‹ÐrO   c                 ó"   — | j                  «       S rg   )ra   ro   s    rM   rz   zPendingConfiguration.data†   s   € à�}‰}‹ÐrO   )rJ   Ú
__module__Ú__qualname__ra   r`   re   rl   rn   rq   ru   rw   r{   r~   r   rz   © rO   rM   r^   r^   _   sJ   „ ð €HØ€Eò7ò òò+ò6ò!òòð ñó ñrO   r^   c                   óh  — e Zd ZdZeZej                  Zej                  ej                  cZZ	dZ
dZdZ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dZdZdZ	 	 	 	 	 d_d
„Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd`d„Z(d`d„Z)d„ Z*dad„Z+dbd„Z,d„ Z-d„ Z.dad„Z/d„ Z0	 dcd„Z1ddd„Z2ded„Z3ddddde4dfd„Z5	 	 dfd „Z6d!„ Z7d"„ Z8d#„ Z9	 	 	 	 	 	 	 	 	 dgd$„Z:d`d%„Z;d`d&„Z<	 	 	 	 	 dhd'„Z=	 	 	 	 	 did(„Z>e=Z?djd)„Z@dkd*„ZAeAZBd`d+„ZCeCZDd,„ ZEd-„ ZFd`d.„ZGd/„ ZHd0„ ZId1„ ZJd2„ ZKd3„ ZLd4„ ZMd5„ ZN	 dld6„ZO	 dmd7„ZPd`d8„ZQd9„ ZR	 	 dnd:„ZSd;„ ZTd<„ ZUd=„ ZVd>„ ZWd?„ ZXd@„ ZYdA„ ZZdB„ Z[e\dC„ «       Z]e\dD„ «       Z^e\dE„ «       Z_e\dF„ «       Z`e\dG„ «       Zae\dH„ «       Zbe\dI„ «       Zce\dJ„ «       ZdeedK„ «       ZfeedL„ «       ZgeedM„ «       Zhe\dN„ «       ZieedO„ «       Zje\dP„ «       ZkeedQ„ «       ZleljÚ                  dR„ «       ZleedS„ «       ZneedT„ «       ZoeojÚ                  dU„ «       Zoe\dV„ «       Zpe\dW„ «       Zqe\dX„ «       Zre\dY„ «       Zse\dZ„ «       Zte\d[„ «       Zueed\„ «       Zvd]„ Zwe\d^„ «       Zxy)orC   a¨  Celery application.

    Arguments:
        main (str): Name of the main module if running as `__main__`.
            This is used as the prefix for auto-generated task names.

    Keyword Arguments:
        broker (str): URL of the default broker used.
        backend (Union[str, Type[celery.backends.base.Backend]]):
            The result store backend class, or the name of the backend
            class to use.

            Default is the value of the :setting:`result_backend` setting.
        autofinalize (bool): If set to False a :exc:`RuntimeError`
            will be raised if the task registry or tasks are used before
            the app is finalized.
        set_as_current (bool):  Make this the global current app.
        include (List[str]): List of modules every worker should import.

        amqp (Union[str, Type[AMQP]]): AMQP object or class name.
        events (Union[str, Type[celery.app.events.Events]]): Events object or
            class name.
        log (Union[str, Type[Logging]]): Log object or class name.
        control (Union[str, Type[celery.app.control.Control]]): Control object
            or class name.
        tasks (Union[str, Type[TaskRegistry]]): A task registry, or the name of
            a registry class.
        fixups (List[str]): List of fix-up plug-ins (e.g., see
            :mod:`celery.fixups.django`).
        config_source (Union[str, class]): Take configuration from a class,
            or object.  Attributes may include any settings described in
            the documentation.
        task_cls (Union[str, Type[celery.app.task.Task]]): base task class to
            use. See :ref:`this section <custom-task-cls-app-wide>` for usage.
    Nzcelery.app.amqp:AMQPzcelery.app.events:Eventszcelery.app.log:Loggingzcelery.app.control:Controlzcelery.app.task:Taskz celery.app.registry:TaskRegistryFc                 óò  — t        j                  «       | _        d | _        t	        «       | _        || _        |xs | j                  | _        |xs | j                  | _        |xs | j                  «       | _
        |xs | j                  | _        |xs | j                  | _        t        |«      | _        |xs | j                  | _        || _        t#        | j$                  «      | _        t'        t(        «      | _        t'        t(        «      | _        || _        || _        || _        d| _        || _        t9        «       | _        t9        «       | _        d| _        t        j@                  «       | _!        t9        «       | _"        |	| _#        tI        | jF                  tJ        «      s$| j%                  | jF                  xs i «      | _#        tM        | d«      | _'        |xs i | _(        t)        «       | _)        | jU                  d|
«       | jU                  d|«       | jU                  d|«       |jW                  «       D ]  \  }}| jU                  ||«       Œ tY        t[        | jP                  | j\                  «      | j0                  t^        t`        f¬«      | _1        |€t)        | jd                  «      n|| _3        | jf                  D �cg c]  } t#        |«      | «      ‘Œ c}| _4        | j                   r| jk                  «        | jl                  €to        d¬«      | _6        to        d	d
h¬«      | _8        to        d¬«      | _9        to        d¬«      | _:        d| _;        | jy                  «        t{        | «       y c c}w )NFÚ__reduce_args__Ú
broker_urlÚresult_backendÚinclude)ÚprefixÚkeyszapp.on_configure©Únamezapp.on_after_configureÚsource)rŒ   Úproviding_argszapp.on_after_finalizezapp.on_after_fork)>Ú	threadingÚlocalÚ_localÚ_backend_cacher   ÚclockÚmainÚamqp_clsÚ
events_clsÚ_get_default_loaderÚ
loader_clsÚlog_clsÚcontrol_clsÚboolÚ_custom_task_cls_usedÚtask_clsÚset_as_currentr,   Úregistry_clsr   ÚsetÚuser_optionsÚstepsÚautofinalizeÚ	namespaceÚstrict_typingÚ
configuredÚ_config_sourcer   Ú_pending_defaultsÚ_pending_periodic_tasksÚ	finalizedÚRLockÚ_finalize_mutexÚ_pendingÚ_tasksÚ
isinstancer9   rN   Ú_using_v1_reduceÚ_preconfÚ_preconf_set_by_autoÚ_Celery__autosetÚitemsr;   r^   Ú_finalize_pending_confr=   r<   Ú_confÚbuiltin_fixupsÚfixupsÚ_fixupsÚset_currentÚon_configurer&   Úon_after_configureÚon_after_finalizeÚon_after_forkÚuse_fast_trace_taskÚon_initr   )rc   r”   ÚloaderÚbackendÚamqpÚeventsÚlogÚcontrolrž   ÚtasksÚbrokerrˆ   ÚchangesÚconfig_sourcer¸   r�   r£   r¤   r¥   rs   rj   rk   Úfixups                          rM   re   zCelery.__init__â   sË  € ô  —o‘oÓ'ˆŒØ"ˆÔä!“^ˆŒ
ØˆŒ	ØÒ- §¡ˆŒØ Ò3 D§O¡OˆŒØ Ò> D×$<Ñ$<Ó$>ˆŒØÒ*˜dŸl™lˆŒØ"Ò6 d×&6Ñ&6ˆÔÜ%)¨(£^ˆÔ"Ø Ò1 D§M¡MˆŒØ,ˆÔÜ*¨4×+<Ñ+<Ó=ˆÔÜ'¬Ó,ˆÔÜ ¤Ó%ˆŒ
Ø(ˆÔØ"ˆŒØ*ˆÔàˆŒØ+ˆÔÜ!&£ˆÔÜ',£wˆÔ$àˆŒÜ(Ÿ™Ó0ˆÔÜ›ˆŒØˆŒÜ˜$Ÿ+™+¤|Ô4Ø×+Ñ+¨D¯K©KÒ,=¸2Ó>ˆDŒKô
 !/¨tÐ5FÓ GˆÔð  š 2ˆŒÜ$'£EˆÔ!Ø�‰�| VÔ,Ø�‰Ð'¨Ô1Ø�‰�y 'Ô*à Ÿ,™,ž.‰JˆC�Ø�N‰N˜3 Õ&ð )ô Ü Ø—‘˜t×:Ñ:ó<à—>‘>Ü!¤?Ð3ô	
ˆŒ
ð 39°.”c˜$×-Ñ-Ô.ÀfˆŒàAEÇÂÓMÁ¸Ð-œ uÓ-¨dÕ3ÀÑMˆŒà×ÒØ×ÑÔð ×ÑÐ$ä &Ð,>Ô ?ˆDÔÜ"(Ø)Ø$˜:ô#
ˆÔô "(Ð-DÔ!EˆÔÜ#Ð)<Ô=ˆÔð $)ˆÔ à�‰ŒÜ�dÕùò+ Ns   ËM4c                 ód   — t         j                  j                  d«      xs | j                  xs dS )NÚCELERY_LOADERzcelery.loaders.app:AppLoader)ÚosÚenvironÚgetr˜   ro   s    rM   r—   zCelery._get_default_loader:  s-   € ô �J‰J�N‰N˜?Ó+ò +Ø�O‰Oò+à*ð	
rO   c                  ó   — y)z!Optional callback called at init.Nr‚   ro   s    rM   rÀ   zCelery.on_initB  s   � rO   c                 ó^   — |�+|| j                   |<   | j                  j                  |«       y y rg   )r±   r²   Úaddri   s      rM   Ú	__autosetzCelery.__autosetE  s/   € ØÐØ!&ˆD�M‰M˜#ÑØ×%Ñ%×)Ñ)¨#Õ.ð rO   c                 ó   — t        | «       y)z*Make this the current app for this thread.N)r   ro   s    rM   rº   zCelery.set_currentJ  s
   € ä˜ÕrO   c                 ó   — t        | «       y)z*Make this the default app for all threads.N)r   ro   s    rM   Úset_defaultzCelery.set_defaultN  s
   € ä˜ÕrO   c                 óZ   — | j                   sd| _         t        �t        | t        «       y y y ©NT)Ú_after_fork_registeredr   r\   ro   s    rM   Ú_ensure_after_forkzCelery._ensure_after_forkR  s.   € Ø×*Ò*Ø*.ˆDÔ'Ü"Ð.Ü# DÔ*AÕBð /ð +rO   c                 ó(   — d| _         t        | «       y)aO  Clean up after the application.

        Only necessary for dynamically created apps, and you should
        probably use the :keyword:`with` statement instead.

        Example:
            >>> with Celery(set_as_current=False) as app:
            ...     with app.connection_for_write() as conn:
            ...         pass
        N)Ú_poolr   ro   s    rM   ÚclosezCelery.closeX  s   € ð ˆŒ
Ü˜ÕrO   c                 óL  — ddl m} | |j                  d   _        |€t        j
                  }	 |j                  |d¬«       	 d|j                  d   _        y# t        $ r*}|j                  cY d}~d|j                  d   _        S d}~ww xY w# d|j                  d   _        w xY w)zgRun :program:`celery` using `argv`.

        Uses :data:`sys.argv` if `argv` is not specified.
        r   ©ÚceleryNF)rS   Ústandalone_mode)	Úcelery.bin.celeryrá   ÚparamsÚdefaultÚsysÚargvr”   r
   Ú	exit_code)rc   rç   rá   Úes       rM   ÚstartzCelery.startf  s�   € õ
 	-à#'ˆ�‰�aÑÔ àˆ<Ü—8‘8ˆDð	,Ø�K‰K˜T°5ˆKÕ9ð (,ˆF�M‰M˜!ÑÕ$øô ò 	Ø—;‘;Ôà'+ˆF�M‰M˜!ÑÕ$ûð	ûð (,ˆF�M‰M˜!ÑÕ$ús/   ®A Á	B
Á BÁ+B
Á,B ÂB
Â
B ÂB#c                 ój   — |€t         j                  }d|vrt        d«      ‚| j                  |¬«       y)znRun :program:`celery worker` using `argv`.

        Uses :data:`sys.argv` if `argv` is not specified.
        NÚworkerzkThe worker sub-command must be specified in argv.
Use app.start() to programmatically start other commands.)rç   )ræ   rç   Ú
ValueErrorrê   )rc   rç   s     rM   Úworker_mainzCelery.worker_mainy  s=   € ð
 ˆ<Ü—8‘8ˆDà˜4ÑÜðLóð ð
 	�
‰
˜ˆ
ÕrO   c           
      óF  ‡ — t         r"|j                  dd«      rddlm}  ||ddi|¤ŽS d
ˆ fd„	}t	        |«      dk(  r$t        |d   «      r  |di |¤Ž|Ž S t        d«      ‚|r7t        d	j                  t        t	        |«      t	        |«      g«      «      «      ‚ |di |¤ŽS )a÷  Decorator to create a task class out of any callable.

        See :ref:`Task options<task-options>` for a list of the
        arguments that can be passed to this decorator.

        Examples:
            .. code-block:: python

                @app.task
                def refresh_feed(url):
                    store_feed(feedparser.parse(url))

            with setting extra options:

            .. code-block:: python

                @app.task(exchange='feeds')
                def refresh_feed(url):
                    return store_feed(feedparser.parse(url))

        Note:
            App Binding: For custom apps the task decorator will return
            a proxy object, so that the act of creating the task is not
            performed until the task is used or the task registry is accessed.

            If you're depending on binding to be deferred, then you must
            not access any attributes on the returned object until the
            application is fully set up (finalized).
        ÚlazyTr2   )Úshared_taskFc                 ó&   •‡ ‡‡‡— |Šˆˆˆˆˆ fd„}|S )Nc                 ó(  •‡ — ‰r"ˆ ˆfd„}‰ j                   |_         t        |«       ‰r‰j                  r ‰j                  ‰ fi ‰¤Ž}n?t	        ‰j                  ‰ f‰‰ j
                  ¬«      }‰j                  j                  |«       ‰r ‰|«      S |S )Nc                 ó*   •—  | j                   ‰fi ‰¤ŽS rg   )Ú_task_from_fun)rK   ÚfunÚoptss    €€rM   ÚconszRCelery.task.<locals>.inner_create_task_cls.<locals>._create_task_cls.<locals>.consµ  s   ø€ Ø1˜s×1Ñ1°#Ñ>¸Ñ>Ð>rO   )Ú__doc__)rJ   r   rª   rõ   r"   rù   r­   Úappend)rö   rø   ÚretÚ_filtrð   r÷   rc   Úshareds   `  €€€€€rM   Ú_create_task_clszDCelery.task.<locals>.inner_create_task_cls.<locals>._create_task_cls³  sƒ   ù€ Ùõ?à$'§L¡L�D”MÜ+¨DÔ1Ù˜tŸ~š~Ø-˜$×-Ñ-¨cÑ:°TÑ:‘Cô ' t×':Ñ':¸S¸FÀDØ/2¯{©{ô<�Cà—M‘M×(Ñ(¨Ô-ÙÙ  ›:Ð%Ø�
rO   r‚   )rý   Úfilterrð   r÷   rþ   rü   rc   s   ` `` @€rM   Úinner_create_task_clsz*Celery.task.<locals>.inner_create_task_cls°  s   ü€ ØˆE÷ð ð" $Ð#rO   r   z(argument 1 to @task() must be a callablez+@task() takes exactly 1 argument ({} given))TNTr‚   )	ÚUSING_EXECVrÐ   Ú rñ   ry   ÚcallableÚ	TypeErrorÚformatÚsum)rc   rS   r÷   rñ   r   s   `    rM   ÚtaskzCelery.task‰  s²   ø€ õ< ˜4Ÿ8™8 F¨DÔ1õ &Ù Ð9¨5Ð9°DÑ9Ð9õ	$ô, ˆt‹9˜Š>Ü˜˜Q™Ô Ø4Ñ,Ñ4¨tÑ4°dÐ;Ð;ÜÐFÓGÐGÙÜØ=×DÑDÜœ˜T›¤C¨£IÐ.Ó/ó1ó2ð 2ñ %Ñ, tÑ,Ð,rO   c                 ó.   — t        t        ||¬«      «      S )N©Úbound)Ústaticmethodr(   )rc   rö   r
  s      rM   Útype_checkerzCelery.type_checkerÐ  s   € ÜœM¨#°UÔ;Ó<Ð<rO   c                 óŠ  — | j                   s| j                  st        d«      ‚|xs& | j                  |j                  |j
                  «      }|xs | j                  }|| j                  vr¹|r|n
t        |«      } t        |j                  |ft        | ||d|j                  |j
                  |j                  | j                  ||¬«      |dœ	fi |¤Ž«      «       }	 |j                  |_        || j                  |j                   <   |j#                  | «       t%        |fi |¤Ž |S | j                  |   }|S # t        $ r Y ŒTw xY w)Nú"Contract breach: app not finalizedTr	  )	rK   rŒ   ÚrunÚ
_decoratedrù   r€   Ú__annotations__Ú
__header__Ú__wrapped__)rª   r£   ÚRuntimeErrorr*   rJ   r€   ÚTaskr®   r  ÚtypeÚdictrù   r  r  r�   ÚAttributeErrorrŒ   Úbindr6   )rc   rö   rŒ   Úbaser  Úoptionsr  r  s           rM   rõ   zCelery._task_from_funÓ  s?  € Ø�~Š~ d×&7Ò&7ÜÐCÓDÐDØÒG�t×)Ñ)¨#¯,©,¸¿¹ÓGˆØÒ �t—y‘yˆà�t—{‘{Ñ"Ù‘#¤<°Ó#4ˆCð	1”4˜Ÿ™ t g¬tØØØØ"ØŸ;™;Ø!Ÿn™nØ#&×#6Ñ#6Ø"×/Ñ/°¸4Ð/Ó@Ø"ñ	5$ñ 	00ð (/ñ	00ó 	1ó 	3ˆDðØ$'×$4Ñ$4�Ô!ð &*ˆD�K‰K˜Ÿ	™	Ñ"Ø�I‰I�dŒOÜ# DÑ4¨GÒ4ð ˆð —;‘;˜tÑ$ˆDØˆøô "ò Ùðús   ÃD6 Ä6	EÅEc                 óH  — t        j                  |«      xr  |«       xs |}|j                  s6t        |«      }| j	                  |j
                  |j                  «      |_        t        |fi |¤Ž || j                  |j                  <   | |_	        |j                  | «       |S )zàUtility for registering a task-based class.

        Note:
            This is here for compatibility with old Celery 1.0
            style task classes, you should not need to use this for
            new projects.
        )ÚinspectÚisclassrŒ   r  r*   rJ   r€   r6   rÇ   Ú_appr  )rc   r  r  r�   s       rM   Úregister_taskzCelery.register_taskò  s‡   € ô �‰˜tÓ$Ò/©«Ò7°4ˆØ�yŠyÜ˜D“zˆHØ×*Ñ*Ø×!Ñ! 8×#6Ñ#6ó8ˆDŒIä Ñ0¨Ò0Ø $ˆ�
‰
�4—9‘9ÑØˆŒ	Ø�	‰	�$ŒØˆrO   c                 ó   — t        | ||«      S rg   )r*   )rc   rŒ   Úmodules      rM   r*   zCelery.gen_task_name  s   € Ü˜T 4¨Ó0Ð0rO   c                 ó   — | j                   5  | j                  s¡|r| j                  st        d«      ‚d| _        t	        | «       | j
                  }|rt        |j                  «       «       |rŒ| j                  j                  «       D ]  }|j                  | «       Œ | j                  j                  | ¬«       ddd«       y# 1 sw Y   yxY w)zƒFinalize the app.

        This loads built-in tasks, evaluates pending task decorators,
        reads configuration, etc.
        r  T©ÚsenderN)r¬   rª   r£   r  r   r­   r#   Úpopleftr®   Úvaluesr  r½   Úsend)rc   ÚautoÚpendingr  s       rM   ÚfinalizezCelery.finalize  s£   € ð ×!Ó!Ø—>’>Ù × 1Ò 1Ü&Ð'KÓLÐLØ!%�”Ü'¨Ô-àŸ-™-�ÙÜ" 7§?¡?Ó#4Ô5ò ð !ŸK™K×.Ñ.Ö0�DØ—I‘I˜d•Oð 1ð ×&Ñ&×+Ñ+°4Ð+Ô8÷ "×!Ñ!ús   �A!CÁ/ACÃCc                 óº   ‡— t        |«      s|ˆfd„cŠ}| j                  r | j                  j                   |«       «      S | j                  j                  |«       y)ad  Add default configuration from dict ``d``.

        If the argument is a callable function then it will be regarded
        as a promise, and it won't be loaded until the configuration is
        actually needed.

        This method can be compared to:

        .. code-block:: pycon

            >>> celery.conf.update(d)

        with a difference that 1) no copy will be made and 2) the dict will
        not be transferred when the worker spawns child processes, so
        it's important that the same configuration happens at import time
        when pickle restores the object on the other side.
        c                  ó   •— ‰ S rg   r‚   )Úds   €rM   Ú<lambda>z%Celery.add_defaults.<locals>.<lambda>1  s   ø€ ¡!rO   N)r  r¦   r¶   Úadd_defaultsr¨   rú   )rc   rö   r.  s     @rM   r0  zCelery.add_defaults  sI   ø€ ô$ ˜Œ}Ø›)ˆFˆAˆsØ�?Š?Ø—:‘:×*Ñ*©3«5Ó1Ð1Ø×Ñ×%Ñ% cÕ*rO   c                 óº   — || _         |xs | j                  | _        |s| j                  r1d| _        | j                  j                  ||¬«      r| j                  S yy)a  Read configuration from object.

        Object is either an actual object or the name of a module to import.

        Example:
            >>> celery.config_from_object('myapp.celeryconfig')

            >>> from myapp import celeryconfig
            >>> celery.config_from_object(celeryconfig)

        Arguments:
            silent (bool): If true then import errors will be ignored.
            force (bool): Force reading configuration immediately.
                By default the configuration will be read only when required.
        N)Úsilent)r§   r¤   r¦   r¶   rÁ   Úconfig_from_objectrd   )rc   Úobjr2  Úforcer¤   s        rM   r3  zCelery.config_from_object6  sX   € ð" "ˆÔØ"Ò4 d§n¡nˆŒÙ�D—O’OØˆDŒJØ�{‰{×-Ñ-¨c¸&Ð-ÔAØ—y‘yÐ ð Bð $rO   c                 óÊ   — t         j                  j                  |«      }|s/|ryt        t        j                  «       j                  |«      «      ‚| j                  |||¬«      S )a3  Read configuration from environment variable.

        The value of the environment variable must be the name
        of a module to import.

        Example:
            >>> os.environ['CELERY_CONFIG_MODULE'] = 'myapp.celeryconfig'
            >>> celery.config_from_envvar('CELERY_CONFIG_MODULE')
        F)r2  r5  )rÎ   rÏ   rÐ   r    ÚERR_ENVVAR_NOT_SETÚstripr  r3  )rc   Úvariable_namer2  r5  Úmodule_names        rM   Úconfig_from_envvarzCelery.config_from_envvarN  s]   € ô —j‘j—n‘n ]Ó3ˆÙÙØÜ&Ü"×(Ñ(Ó*×1Ñ1°-Ó@óBð Bà×&Ñ& {¸6ÈÐ&ÓOÐOrO   c                 ón   — | j                   j                  | j                  j                  ||«      «       y rg   )r¶   rq   rÁ   Úcmdline_config_parser)rc   rç   r¤   s      rM   Úconfig_from_cmdlinezCelery.config_from_cmdline`  s(   € Ø�
‰
×ÑØ�K‰K×-Ñ-¨d°IÓ>õ	
rO   Újsonc           
      ó.   — ddl m}  ||||||||| ¬«      S )a;  Setup the message-signing serializer.

        This will affect all application instances (a global operation).

        Disables untrusted serializers and if configured to use the ``auth``
        serializer will register the ``auth`` serializer with the provided
        settings into the Kombu serializer registry.

        Arguments:
            allowed_serializers (Set[str]): List of serializer names, or
                content_types that should be exempt from being disabled.
            key (str): Name of private key file to use.
                Defaults to the :setting:`security_key` setting.
            key_password (bytes): Password to decrypt the private key.
                Defaults to the :setting:`security_key_password` setting.
            cert (str): Name of certificate file to use.
                Defaults to the :setting:`security_certificate` setting.
            store (str): Directory containing certificates.
                Defaults to the :setting:`security_cert_store` setting.
            digest (str): Digest algorithm used when signing messages.
                Default is ``sha256``.
            serializer (str): Serializer used to encode messages after
                they've been signed.  See :setting:`task_serializer` for
                the serializers supported.  Default is ``json``.
        r   )Úsetup_security©rK   )Úcelery.securityrA  )	rc   Úallowed_serializersrj   Úkey_passwordÚcertÚstoreÚdigestÚ
serializerrA  s	            rM   rA  zCelery.setup_securitye  s(   € õ8 	3ÙÐ1°3¸ÀdØ# V¨Z¸TôCð 	CrO   c                 óš   — |r| j                  ||«      S t        j                  j                  t	        | j                   ||«      d| ¬«       y)a¦  Auto-discover task modules.

        Searches a list of packages for a "tasks.py" module (or use
        related_name argument).

        If the name is empty, this will be delegated to fix-ups (e.g., Django).

        For example if you have a directory layout like this:

        .. code-block:: text

            foo/__init__.py
               tasks.py
               models.py

            bar/__init__.py
                tasks.py
                models.py

            baz/__init__.py
                models.py

        Then calling ``app.autodiscover_tasks(['foo', 'bar', 'baz'])`` will
        result in the modules ``foo.tasks`` and ``bar.tasks`` being imported.

        Arguments:
            packages (List[str]): List of packages to search.
                This argument may also be a callable, in which case the
                value returned is used (for lazy evaluation).
            related_name (Optional[str]): The name of the module to find.  Defaults
                to "tasks": meaning "look for 'module.tasks' for every
                module in ``packages``.".  If ``None`` will only try to import
                the package, i.e. "look for 'module'".
            force (bool): By default this call is lazy so that the actual
                auto-discovery won't happen until an application imports
                the default modules.  Forcing will cause the auto-discovery
                to happen immediately.
        F)Úweakr%  N)Ú_autodiscover_tasksr   Úimport_modulesÚconnectr   )rc   ÚpackagesÚrelated_namer5  s       rM   Úautodiscover_taskszCelery.autodiscover_tasks…  sM   € ñP Ø×+Ñ+¨H°lÓCÐCÜ×Ñ×&Ñ&¤{Ø×$Ñ$ h°ó(
à˜dð 	'õ 	$rO   c                 óL   — |r| j                  ||«      S | j                  |«      S rg   )Ú_autodiscover_tasks_from_namesÚ_autodiscover_tasks_from_fixups)rc   rO  rP  rs   s       rM   rL  zCelery._autodiscover_tasks³  s)   € ÙØ×6Ñ6°xÀÓNÐNØ×3Ñ3°LÓAÐArO   c                 óh   — | j                   j                  t        |«      r |«       |«      S ||«      S rg   )rÁ   rQ  r  )rc   rO  rP  s      rM   rS  z%Celery._autodiscover_tasks_from_names¸  s6   € à�{‰{×-Ñ-Ü" 8Ô,‰H‹J¸Ló
ð 	
Ø2:¸Ló
ð 	
rO   c           
      óª   — | j                  | j                  D ��cg c]%  }t        |d«      r|j                  «       D ]  }|‘Œ Œ' c}}|¬«      S c c}}w )NrQ  )rP  )rS  r¹   ÚhasattrrQ  )rc   rP  rË   Úpkgs       rM   rT  z&Celery._autodiscover_tasks_from_fixups¾  sc   € Ø×2Ñ2Ø!Ÿ\š\ô4
Ù)�EÜ�uÐ2Ô3Ø×/Ñ/Ö1�ò à1ð ˜\ò4
ð %ð	 3ó &ð 	&ùó 4
s   ›*A
c                 óŽ  — dx}} | j                   }!|xs
 t        «       }|xs |}|	xs |!j                  }	| j                  }"|"j                  r t        j                  t        d«      d¬«       |j                  dd«      }#|	j                  ||xs ||||«      }|�©t        |t        «      r+t        |«      | j                  «       z
  j                  «       }$nFt        |t        «      r4t        t!        |«      «      | j                  «       z
  j                  «       }$n|}$|$dk  rt"        j%                  |› d|$ › d	�«       d}$|$|d
<   |r|s—| j&                  }|r‰|s.|j(                  j*                  xs |j(                  j,                  }|s|j(                  j,                  }|"j.                  r5|j1                  d|j(                  j2                  j5                  d«      «        |!j6                  |||||||||||t9        |«      t9        |«      |xs | j:                  ||| j                  j<                  ||||f|#|dœ|¤Ž}%|j                  dg «      }&|&D ]  }'|j                  |'«       Œ |r|!j?                  |d¬«      }| jA                  |«      5 }(|(jB                  jE                  «       5  |#s| jF                  jI                  |(|«        |!jJ                  |(||%fi |¤Ž ddd«       ddd«        |
xs | jL                  |«      })|#|)_'        |r#| s| j&                  d} }|r|jQ                  |)«       |)S # 1 sw Y   ŒUxY w# 1 sw Y   ŒYxY w)zúSend task by name.

        Supports the same arguments as :meth:`@-Task.apply_async`.

        Arguments:
            name (str): Name of task to call (e.g., `"tasks.add"`).
            result_cls (AsyncResult): Specify custom result class.
        Nz,task_always_eager has no effect on send_taské   )Ú
stacklevelÚignore_resultFr   z% has an expiration date in the past (aJ  s ago).
We assume this is intended and so we have set the expiration date to 0 instead.
According to RabbitMQ's documentation:
"Setting the TTL to 0 causes messages to be expired upon reaching a queue unless they can be delivered to a consumer immediately."
If this was unintended, please check the code which published this task.Ú
expirationÚpriority)r\  Úreplaced_task_nestingÚstamped_headers)Úauto_declareT))rÃ   r   Úrouterrd   Útask_always_eagerÚwarningsÚwarnr   ÚpopÚrouter¯   r   r0   ÚnowÚtotal_secondsÚstrr   rY   ÚwarningÚcurrent_worker_taskÚrequestÚroot_idÚidÚtask_inherit_parent_priorityru   Údelivery_inforÐ   Úcreate_task_messager)   Ú
thread_oidÚtask_send_sent_eventÚProducerÚproducer_or_acquireÚ
connectionÚ_reraise_as_library_errorsrÂ   Úon_task_callÚsend_task_messageÚAsyncResultÚignoredÚ	add_trail)*rc   rŒ   rS   rs   Ú	countdownÚetaÚtask_idÚproducerrw  rb  Ú
result_clsÚexpiresÚ	publisherÚlinkÚ
link_errorÚadd_to_parentÚgroup_idÚgroup_indexÚretriesÚchordÚreply_toÚ
time_limitÚsoft_time_limitrn  Ú	parent_idÚ
route_nameÚshadowÚchainÚ	task_typer_  r  ÚparentÚhave_parentrÃ   rd   r\  Ú	expires_sÚmessager`  ÚstampÚPÚresults*                                             rM   Ú	send_taskzCelery.send_taskÅ  s/  € ð"  $Ð#ˆ�Ø�y‰yˆØÒ#œT›VˆØÒ(˜yˆØÒ&˜4Ÿ;™;ˆØ�y‰yˆØ×!Ò!Ü�M‰MÔ,Ø>óàõð  Ÿ™ O°UÓ;ˆØ—,‘,Ø�ZÒ' 4¨¨v°yóBˆàÐÜ˜'¤8Ô,Ü-ØóØ#Ÿx™x›zñ*ß+8©=«?ñ ä˜G¤SÔ)Ü-Ü˜WÓ%ó'Ø)-¯©«ñ4ß5B±]³_ñ ð $�	à˜1Š}Ü—‘Ø�iÐDÀiÀZÀLð Q+ð +ô
ð �	à$-ˆG�LÑ!á™iØ×-Ñ-ˆFÙÙØ$Ÿn™n×4Ñ4ÒI¸¿¹×8IÑ8I�GÙ Ø &§¡× 1Ñ 1�Ià×4Ò4Ø×&Ñ& zØ'-§~¡~×'CÑ'C×'GÑ'GÈ
Ó'SôUð +�$×*Ñ*Ø�T˜4 ¨°C¸À;Ø�W˜eÜ�tÓœj¨Ó4ØÒ'˜Ÿ™¨°_Ø�I‰I×*Ñ*Ø�Y ¨ð	
ð (Ø"7ñ	
ð <Cñ	
ˆð "Ÿ+™+Ð&7¸Ó<ˆÛ$ˆEØ�K‰K˜Õð %ñ Ø—}‘} Z¸e�}ÓDˆHà×%Ñ% hÔ/°1Ø—‘×8Ñ8Õ:Ù$Ø—L‘L×-Ñ-¨a°Ô9Ø&�×&Ñ& q¨$°ÑC¸7ÒC÷ ;÷ 0ð
 1�*Ò0 × 0Ñ 0°'Ó:ˆð 'ˆŒáÙØ&*×&>Ñ&>À˜�ÙØ× Ñ  Ô(Øˆ÷ ;Ð:ú÷ 0Ð/ús$   ÊL;Ê'4L/ËL;Ì/L8	Ì4L;Ì;Mc                 óX   —  | j                   |xs | j                  j                  fi |¤ŽS )z|Establish connection used for consuming.

        See Also:
            :meth:`connection` for supported arguments.
        )Ú_connectionrd   Úbroker_read_url©rc   Úurlrs   s      rM   Úconnection_for_readzCelery.connection_for_read/  s+   € ð  ˆt×Ñ Ò @ t§y¡y×'@Ñ'@ÑKÀFÑKÐKrO   c                 óX   —  | j                   |xs | j                  j                  fi |¤ŽS )z|Establish connection used for producing.

        See Also:
            :meth:`connection` for supported arguments.
        )r�  rd   Úbroker_write_urlrŸ  s      rM   Úconnection_for_writezCelery.connection_for_write7  s+   € ð  ˆt×Ñ Ò A t§y¡y×'AÑ'AÑLÀVÑLÐLrO   c                 óp   —  | j                   |xs | j                  j                  f||||||||	|
||dœ|¤ŽS )aC  Establish a connection to the message broker.

        Please use :meth:`connection_for_read` and
        :meth:`connection_for_write` instead, to convey the intent
        of use for this connection.

        Arguments:
            url: Either the URL or the hostname of the broker to use.
            hostname (str): URL, Hostname/IP-address of the broker.
                If a URL is used, then the other argument below will
                be taken from the URL instead.
            userid (str): Username to authenticate as.
            password (str): Password to authenticate with
            virtual_host (str): Virtual host to use (domain).
            port (int): Port to connect to.
            ssl (bool, Dict): Defaults to the :setting:`broker_use_ssl`
                setting.
            transport (str): defaults to the :setting:`broker_transport`
                setting.
            transport_options (Dict): Dictionary of transport specific options.
            heartbeat (int): AMQP Heartbeat in seconds (``pyamqp`` only).
            login_method (str): Custom login method to use (AMQP only).
            failover_strategy (str, Callable): Custom failover strategy.
            **kwargs: Additional arguments to :class:`kombu.Connection`.

        Returns:
            kombu.Connection: the lazy connection instance.
        )ÚuseridÚpasswordÚvirtual_hostÚportÚsslÚconnect_timeoutÚ	transportÚtransport_optionsÚ	heartbeatÚlogin_methodÚfailover_strategy)r¤  rd   r£  )rc   Úhostnamer¦  r§  r¨  r©  rª  r«  r¬  r­  r®  r¯  r°  rs   s                 rM   rw  zCelery.connection?  sW   € ðB )ˆt×(Ñ(ØÒ2˜Ÿ	™	×2Ñ2ð
à HØ%¨D°cØ+°yØ/¸9Ø%Ð9Jñ
ð ñ
ð 	
rO   c                 óœ  — | j                   }| j                  j                  ||xs |j                  |xs |j                  |xs |j
                  |xs |j                  |xs |j                  | j                  d|«      |
|xs |j                  |xs |j                  t        |j                  fi |	xs i ¤Ž| j                  d|«      ¬«      S )NÚbroker_use_sslÚbroker_connection_timeout)r¬  rª  r®  r¯  r°  r­  r«  )rd   rÃ   Ú
ConnectionÚbroker_userÚbroker_passwordÚbroker_vhostÚbroker_portÚbroker_transportÚeitherÚbroker_login_methodÚbroker_failover_strategyr  Úbroker_transport_options)rc   r   r¦  r§  r¨  r©  rª  r«  r¬  r­  r®  r¯  r°  rs   rd   s                  rM   r�  zCelery._connectionj  sÑ   € ð
 �y‰yˆØ�y‰y×#Ñ#ØØÒ&�d×&Ñ&ØÒ,˜×,Ñ,ØÒ-˜D×-Ñ-ØÒ$�D×$Ñ$ØÒ8 4×#8Ñ#8Ø—‘Ð,¨cÓ2ØØ%ÒA¨×)AÑ)Aà!ÒB T×%BÑ%Bä"Ø×-Ñ-ñØ1BÒ1HÀbñð !ŸK™KØ+¨_óð! $ó 
ð 	
rO   c                 ó^   — |r| j                   j                  d¬«      S | j                  «       S )z)Helper for :meth:`connection_or_acquire`.T©Úblock)ÚpoolÚacquirer¤  )rc   rÂ  s     rM   Ú_acquire_connectionzCelery._acquire_connection†  s,   € áØ—9‘9×$Ñ$¨4Ð$Ó0Ð0Ø×(Ñ(Ó*Ð*rO   c                 ó2   — t        || j                  |¬«      S )aR  Context used to acquire a connection from the pool.

        For use within a :keyword:`with` statement to get a connection
        from the pool if one is not already provided.

        Arguments:
            connection (kombu.Connection): If not provided, a connection
                will be acquired from the connection pool.
        )rÂ  )r.   rÄ  )rc   rw  rÂ  Ú_Ú__s        rM   Úconnection_or_acquirezCelery.connection_or_acquireŒ  s   € ô ˜z¨4×+CÑ+CÈ$ÔOÐOrO   c                 óF   — t        || j                  j                  d¬«      S )aE  Context used to acquire a producer from the pool.

        For use within a :keyword:`with` statement to get a producer
        from the pool if one is not already provided

        Arguments:
            producer (kombu.Producer): If not provided, a producer
                will be acquired from the producer pool.
        TrÀ  )r.   Úproducer_poolrÃ  )rc   r�  s     rM   rv  zCelery.producer_or_acquire™  s$   € ô Ø�d×(Ñ(×0Ñ0¸ô
ð 	
rO   c                 ó   — t        |«      S )z<Prepare configuration before it is merged with the defaults.)r8   )rc   Úcs     rM   Úprepare_configzCelery.prepare_config¨  s   € ä'¨Ó*Ð*rO   c                 ó�   — t        t        j                  t        j                  «      «      }|j                  | j                  «      S )z/Return the current time and date as a datetime.)r1   r   rh  Údatetime_timezoneÚutcÚ
astimezoner   )rc   Ú
now_in_utcs     rM   rh  z
Celery.now¬  s1   € äœHŸL™LÔ):×)>Ñ)>Ó?Ó@ˆ
Ø×$Ñ$ T§]¡]Ó3Ð3rO   c                 óL   — | j                   j                  j                  |«      S )zxSelect subset of queues.

        Arguments:
            queues (Sequence[str]): a list of queue names to keep.
        )rÃ   ÚqueuesÚselect)rc   rÔ  s     rM   Úselect_queueszCelery.select_queues±  s   € ð �y‰y×Ñ×&Ñ& vÓ.Ð.rO   c                 ón   — t        dt        d|«      t        | j                  j                  |«      g«      S )z›Get key from configuration or use default values.

        Fallback to the value of a configuration key if none of the
        `*values` are true.
        N)r'   r   rd   rÐ   )rc   Údefault_keyÚdefaultss      rM   r»  zCelery.either¹  s3   € ô �TÜ�$˜Ó!¤;¨t¯y©y¯}©}¸kÓ#Jð
ó ð 	rO   c                 ó   — t        | «      S )z)Return information useful in bug reports.)rA   ro   s    rM   rA   zCelery.bugreportÃ  s   € ä˜‹ÐrO   c                 ó    — t        j                  | j                  xs | j                  j                  | j
                  «      \  }} || |¬«      S )N)rK   r   )r3   Úby_urlÚbackend_clsrd   r‡   rÁ   )rc   rÂ   r   s      rM   Ú_get_backendzCelery._get_backendÇ  sB   € Ü—‘Ø×ÑÒ8 §	¡	× 8Ñ 8Ø�K‰Kó‰ˆ�ñ ˜4 SÔ)Ð)rO   c                 ó~   — 	 | j                  «       x}| _        |S # t        $ r}t        |j                  Ž |‚d}~ww xY w)zÐGet config value by key and finalize loading the configuration.

        Note:
            This is used by PendingConfiguration:
                as soon as you access a key the configuration is read.
        N)Ú_load_configr¶   r  ÚModuleNotFoundErrorrS   )rc   rd   Úerrs      rM   rµ   zCelery._finalize_pending_confÍ  sH   € ð	:Ø $× 1Ñ 1Ó 3Ð3ˆD�4”:ð ˆøô ò 	:ô & s§x¡xÐ0°cÐ9ûð		:ús   ‚ ›	<¤7·<c                 ó`  — t        | j                  t        «      r| j                  j                  | ¬«       n| j                  «        | j                  r%| j
                  j                  | j                  «       d| _        t        | j                  | j
                  j                  «      | j                  | j                  | j                  ¬«      }| j                  �| j                  j                  |«       n|| _        | j                   }|r:| j                  j#                  t%         |j'                  «       «       «      «       |rŒ:| j(                  }|r(|j'                  «       \  }} | j*                  |i |¤Ž |rŒ(| j,                  j                  | | j                  ¬«       | j                  S )Nr$  T)Úignore_keysr‰   )r%  r�   )r¯   r»   r&   r(  r§   rÁ   r3  r¦   rB   rÍ  rd   r±   r²   r¤   r¶   Ú	swap_withr¨   r0  r#   r&  r©   Ú_add_periodic_taskr¼   )rc   ÚsettingsÚpending_defÚpending_beatÚperiodic_task_argsÚperiodic_task_kwargss         rM   rà  zCelery._load_configÞ  sb  € Ü�d×'Ñ'¬Ô0Ø×Ñ×"Ñ"¨$Ð"Õ/ð ×ÑÔØ×ÒØ�K‰K×*Ñ*¨4×+>Ñ+>Ô?ØˆŒÜ"Ø×Ñ §¡× 0Ñ 0Ó1°4·=±=Ø×1Ñ1¸$¿.¹.ô
ˆð �:‰:Ð!ð �J‰J× Ñ  Õ*à!ˆDŒJð ×,Ñ,ˆÙØ�J‰J×#Ñ#¤NÐ3H°;×3FÑ3FÓ3HÓ3JÓ$KÔLò ð ×3Ñ3ˆÙØ7C×7KÑ7KÓ7MÑ4ÐÐ 4Ø#ˆD×#Ñ#Ð%7ÐPÐ;OÒPò ð 	×Ñ×$Ñ$¨D¸¿¹Ð$ÔDØ�z‰zÐrO   c                 óž   — d | _         	 d | j                  d   _        | j
                  j                  | ¬«       y # t        t        f$ r Y Œ.w xY w)NrÃ   r$  )rÝ   Ú__dict__Ú_producer_poolr  ÚKeyErrorr¾   r(  ro   s    rM   rW   zCelery._after_fork  sQ   € ØˆŒ
ð	Ø37ˆD�M‰M˜&Ñ!Ô0ð 	×Ñ×Ñ tÐÕ,øô ¤Ð)ò 	Ùð	ús   ‰: ºAÁAc                 óD   — | |d<    | j                   j                  |i |¤ŽS )z:Return a new :class:`~celery.Signature` bound to this app.rK   )Ú_canvasÚ	signaturerr   s      rM   rò  zCelery.signature	  s'   € àˆˆu‰Ø%ˆt�|‰|×%Ñ% tÐ6¨vÑ6Ð6rO   c                 óÀ   —  | j                   |||||fi |¤Ž\  }}| j                  r| j                  |||¬«       |S | j                  j	                  ||fd|ig«       |S )a  
        Add a periodic task to beat schedule.

        Celery beat store tasks based on `sig` or `name` if provided. Adding the
        same signature twice make the second task override the first one. To
        avoid the override, use distinct `name` for them.
        r‹   rŒ   )Ú_sig_to_periodic_task_entryr¦   ræ  r©   rú   )	rc   ÚscheduleÚsigrS   rs   rŒ   r÷   rj   Úentrys	            rM   Úadd_periodic_taskzCelery.add_periodic_task  sx   € ð 6�T×5Ñ5Ø�c˜4 ¨ñ7Ø15ñ7‰
ˆˆUà�?Š?Ø×#Ñ# C¨°TÐ#Ô:ð ˆ
ð ×(Ñ(×/Ñ/°#°u°ÀÈ¸~Ð0NÔOØˆ
rO   c           
      ó2  — |si n|}t        |t        j                  «      r|j                  ||«      n| j	                  |j
                  ||«      }|xs t        |«      ||j
                  |j                  |j                  t        |j                  fi |¤ŽdœfS )N)rõ  r  rS   rs   r  )r¯   r$   ÚCallableSignatureÚclonerò  rŒ   r}   rS   rs   r  r  )rc   rõ  rö  rS   rs   rŒ   r÷   s          rM   rô  z"Celery._sig_to_periodic_task_entry  sŠ   € á!‘ vˆä˜S¤(×"<Ñ"<Ô=ð �y‰y˜˜vÔ&à—N‘N 3§8¡8¨T°6Ó:ð 	ð Ò ”t˜C“yØ Ø—H‘HØ—H‘HØ—j‘jÜ˜CŸK™KÑ0¨4Ñ0ñ#
ð 
ð 	
rO   c                 óœ   — |€1|| j                   j                  v rt        j                  d|› d�«       || j                   j                  |<   y )NzPeriodic task key='zl' shadowed a previous unnamed periodic task. Pass a name kwarg to add_periodic_task to silence this warning.)r¶   Úbeat_schedulerY   rk  )rc   rj   r÷  rŒ   s       rM   ræ  zCelery._add_periodic_task-  sM   € Øˆ<˜C 4§:¡:×#;Ñ#;Ñ;Ü�N‰NØ% c Uð +Sð Sôð
 ).ˆ�
‰
× Ñ  Ò%rO   c                 óB   — | j                  | j                  dddd¬«      S )z+Create a base task class bound to this app.r  r  T)rŒ   Ú	attributeÚkeep_reducer$   )Úsubclass_with_selfr�   ro   s    rM   Úcreate_task_clszCelery.create_task_cls6  s*   € à×&Ñ&Ø�M‰M °&Ø tð 'ó 
ð 	
rO   c                 óÔ   ‡— t        |«      }‰r‰n|j                  Šˆfd„}t        || if|j                  |j                  dœ|¤Ž}|s||d<   t        |xs |j                  |f|«      S )aî  Subclass an app-compatible class.

        App-compatible means that the class has a class attribute that
        provides the default app it should use, for example:
        ``class Foo: app = None``.

        Arguments:
            Class (type): The app-compatible class to subclass.
            name (str): Custom name for the target class.
            attribute (str): Name of the attribute holding the app,
                Default is 'app'.
            reverse (str): Reverse path to this object used for pickling
                purposes. For example, to get ``app.AsyncResult``,
                use ``"AsyncResult"``.
            keep_reduce (bool): If enabled a custom ``__reduce__``
                implementation won't be provided.
        c                 ó4   •— t         ‰| j                  «       ffS rg   )rT   r…   )rc   Úreverses    €rM   Ú
__reduce__z-Celery.subclass_with_self.<locals>.__reduce__S  s   ø€ Ü$ w°×0DÑ0DÓ0FÐ&GÐGÐGrO   )r€   rù   r  )r,   rJ   r  r€   rù   r  )	rc   ÚClassrŒ   rÿ  r  r   Úkwr  Úattrss	       `    rM   r  zCelery.subclass_with_self=  s~   ø€ ô& ˜uÓ%ˆÙ$‘'¨%¯.©.ˆô	Hô Ø˜Ððà×'Ñ'Ø—M‘Mñð ñ	ˆñ
 Ø",ˆE�,Ñä�DÒ*˜EŸN™N¨U¨H°eÓ<Ð<rO   c                 ó$   —  t        |«      | «      S rg   r   )rc   Úpaths     rM   rQ   zCelery._rgetattr`  s   € ØŒz˜$Ó Ó%Ð%rO   c                 ó   — | S rg   r‚   ro   s    rM   Ú	__enter__zCelery.__enter__c  s   € ØˆrO   c                 ó$   — | j                  «        y rg   )rÞ   )rc   rV   s     rM   Ú__exit__zCelery.__exit__f  s   € Ø�
‰
�rO   c                 óL   — dt        | «      j                  › dt        | «      › d�S )NÚ<Ú Ú>)r  rJ   r@   ro   s    rM   r~   zCelery.__repr__i  s&   € Ø”4˜“:×&Ñ&Ð' q¬°«¨°aÐ8Ð8rO   c                 ó~   — | j                   r| j                  «       S t        | j                  | j	                  «       ffS rg   )r°   Ú__reduce_v1__r?   rH   Ú__reduce_keys__ro   s    rM   r  zCelery.__reduce__l  s7   € Ø× Ò Ø×%Ñ%Ó'Ð'Ü  4§>¡>°4×3GÑ3GÓ3IÐ"JÐKÐKrO   c                 ó`   — t         | j                  | j                  f| j                  «       z   fS rg   )r>   rH   ÚPicklerr…   ro   s    rM   r  zCelery.__reduce_v1__q  s/   € ô
 Ø�^‰^˜TŸ\™\Ð*¨T×-AÑ-AÓ-CÑCð
ð 	
rO   c                 óT  — | j                   | j                  r| j                  j                  n| j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  dœS )zAKeyword arguments used to reconstruct the object when unpickling.)r”   rÉ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   r¸   rÊ   r�   r¤   )r”   r¦   r¶   rÉ   r±   r˜   rÝ  r•   r–   r™   rš   r¸   r§   r�   r¤   ro   s    rM   r  zCelery.__reduce_keys__z  sz   € ð —I‘Ià&*§o¢o�—
‘
×"Ò"¸4¿=¹=Ø—o‘oØ×'Ñ'Ø—M‘MØ—o‘oØ—<‘<Ø×'Ñ'Ø—k‘kØ!×0Ñ0ØŸ™ØŸ™ñ
ð 	
rO   c           
      óþ   — | j                   | j                  r| j                  j                  ni | j                  | j
                  | j                  | j                  | j                  | j                  d| j                  f
S )z>Deprecated method, please use :meth:`__reduce_keys__` instead.F)r”   r¦   r¶   rÉ   r˜   rÝ  r•   r–   r™   rš   r§   ro   s    rM   r…   zCelery.__reduce_args__Œ  s\   € à—	‘	°·²˜4Ÿ:™:×-Ò-ÀbØ—‘ ×!1Ñ!1°4·=±=Ø—‘ §¡¨t×/?Ñ/?Ø�t×*Ñ*ð,ð 	,rO   c                 ó$   — | j                  d«      S )zNWorker application.

        See Also:
            :class:`~@Worker`.
        zcelery.apps.worker:Worker©r  ro   s    rM   ÚWorkerzCelery.Worker“  ó   € ð ×&Ñ&Ð'BÓCÐCrO   c                 ó$   — | j                  d«      S )zUEmbeddable worker.

        See Also:
            :class:`~@WorkController`.
        zcelery.worker:WorkControllerr  ©rc   rs   s     rM   ÚWorkControllerzCelery.WorkControllerœ  s   € ð ×&Ñ&Ð'EÓFÐFrO   c                 ó$   — | j                  d«      S )zf:program:`celery beat` scheduler application.

        See Also:
            :class:`~@Beat`.
        zcelery.apps.beat:Beatr  r   s     rM   ÚBeatzCelery.Beat¥  s   € ð ×&Ñ&Ð'>Ó?Ð?rO   c                 ó"   — | j                  «       S )zBase task class for this app.)r  ro   s    rM   r  zCelery.Task®  s   € ð ×#Ñ#Ó%Ð%rO   c                 ó@   — t        | j                  j                  «      S rg   )Úprepare_annotationsrd   Útask_annotationsro   s    rM   ÚannotationszCelery.annotations³  s   € ä" 4§9¡9×#=Ñ#=Ó>Ð>rO   c                 ó$   — | j                  d«      S )zgCreate new result instance.

        See Also:
            :class:`celery.result.AsyncResult`.
        zcelery.result:AsyncResultr  ro   s    rM   r{  zCelery.AsyncResult·  r  rO   c                 ó$   — | j                  d«      S )Nzcelery.result:ResultSetr  ro   s    rM   Ú	ResultSetzCelery.ResultSetÀ  s   € à×&Ñ&Ð'@ÓAÐArO   c                 ó$   — | j                  d«      S )zmCreate new group result instance.

        See Also:
            :class:`celery.result.GroupResult`.
        zcelery.result:GroupResultr  ro   s    rM   ÚGroupResultzCelery.GroupResultÄ  r  rO   c                 óô   — | j                   €a| j                  «        | j                  j                  }t	        j
                  |«       t        j                  | j                  «          | _         | j                   S )z‹Broker connection pool: :class:`~@pool`.

        Note:
            This attribute is not related to the workers concurrency pool.
        )rÝ   rÛ   rd   Úbroker_pool_limitr   Ú	set_limitÚconnectionsr¤  )rc   Úlimits     rM   rÂ  zCelery.poolÍ  sZ   € ð �:‰:ÐØ×#Ñ#Ô%Ø—I‘I×/Ñ/ˆEÜ�O‰O˜EÔ"Ü×*Ñ*¨4×+DÑ+DÓ+FÑGˆDŒJØ�z‰zÐrO   c                 ó"   — t         j                  S )z2Instance of task being executed, or :const:`None`.)r   Útopro   s    rM   Úcurrent_taskzCelery.current_taskÛ  s   € ô �‰ÐrO   c                 ó   — t        «       S )zÈThe task currently being executed by a worker or :const:`None`.

        Differs from :data:`current_task` in that it's not affected
        by tasks calling other tasks directly, or eagerly.
        )r   ro   s    rM   rl  zCelery.current_worker_taskà  s   € ô 'Ó(Ð(rO   c                 ó   — t        | d¬«      S )z+Universally unique identifier for this app.F©Úthreadsr   ro   s    rM   Úoidz
Celery.oidé  s   € ô ˜ eÔ,Ð,rO   c                 óŽ   — 	 | j                   j                  S # t        $ r# t        | d¬«      x| j                   _        }|cY S w xY w)z*Per-thread unique identifier for this app.Tr8  )r‘   r:  r  r   )rc   Únew_oids     rM   rs  zCelery.thread_oidò  s@   € ð	Ø—;‘;—?‘?Ð"øÜò 	Ü(0°¸tÔ(DÐDˆD�K‰KŒO˜gØŠNð	ús   ‚ ˜)AÁAc                 ó0   — t        | j                  | ¬«      S )z,AMQP related functionality: :class:`~@amqp`.rB  )r+   r•   ro   s    rM   rÃ   zCelery.amqpû  s   € ô ˜4Ÿ=™=¨dÔ3Ð3rO   c                 ó`   — | j                   �| j                   S t        | j                  dd«      S )z…A reference to the backend object

        Uses self._backend_cache if it is thread safe.
        Otherwise, use self._local
        NrÂ   )r’   Úgetattrr‘   ro   s    rM   Ú_backendzCelery._backend   s/   € ð ×ÑÐ*Ø×&Ñ&Ð&Ü�t—{‘{ I¨tÓ4Ð4rO   c                 óN   — |j                   r|| _        y|| j                  _        y)z!Set the backend object on the appN)Úthread_safer’   r‘   rÂ   )rc   rÂ   s     rM   r@  zCelery._backend  s!   € ð ×ÒØ")ˆDÕà")ˆD�K‰KÕrO   c                 ó\   — | j                   €| j                  «       | _         | j                   S )zCurrent backend instance.)r@  rÞ  ro   s    rM   rÂ   zCelery.backend  s(   € ð �=‰=Ð Ø ×-Ñ-Ó/ˆDŒMØ�}‰}ÐrO   c                 ó\   — | j                   €| j                  «       | _         | j                   S )zCurrent configuration.)r¶   rà  ro   s    rM   rd   zCelery.conf  s(   € ð �:‰:ÐØ×*Ñ*Ó,ˆDŒJØ�z‰zÐrO   c                 ó   — || _         y rg   )r¶   )rc   r.  s     rM   rd   zCelery.conf!  s	   € àˆ�
rO   c                 ó0   — t        | j                  | ¬«      S )z#Remote control: :class:`~@control`.rB  )r+   rš   ro   s    rM   rÆ   zCelery.control%  s   € ô ˜4×+Ñ+°Ô6Ð6rO   c                 ó0   — t        | j                  | ¬«      S )z0Consuming and sending events: :class:`~@events`.rB  )r+   r–   ro   s    rM   rÄ   zCelery.events*  s   € ô ˜4Ÿ?™?°Ô5Ð5rO   c                 ó:   —  t        | j                  «      | ¬«      S )zCurrent loader instance.rB  )r!   r˜   ro   s    rM   rÁ   zCelery.loader/  s   € ð /Œ~˜dŸo™oÓ.°4Ô8Ð8rO   c                 ó0   — t        | j                  | ¬«      S )zLogging: :class:`~@log`.rB  )r+   r™   ro   s    rM   rÅ   z
Celery.log4  s   € ô ˜4Ÿ<™<¨TÔ2Ð2rO   c                 ó   — ddl m} |S )Nr   )Úcanvas)rá   rK  )rc   rK  s     rM   rñ  zCelery._canvas9  s
   € å!ØˆrO   c                 ó>   — | j                  d¬«       | j                  S )zoTask registry.

        Warning:
            Accessing this attribute will also auto-finalize the app.
        T)r)  )r+  r®   ro   s    rM   rÇ   zCelery.tasks>  s   € ð 	�‰˜4ˆÔ Ø�{‰{ÐrO   c                 ó.   — | j                   j                  S rg   )rÃ   rÊ  ro   s    rM   rÊ  zCelery.producer_poolH  s   € à�y‰y×&Ñ&Ð&rO   c                 ó<   — | j                   t         j                  k(  S )z/Check if the application uses the UTC timezone.)r   rÐ  ro   s    rM   Úuses_utc_timezonezCelery.uses_utc_timezoneL  s   € à�}‰}¤§¡Ñ,Ð,rO   c                 óÈ   — | j                   }|j                  s,|j                  rt        j                  S t        j                  S t        j
                  |j                  «      S )z�Current timezone for this app.

        This is a cached property taking the time zone from the
        :setting:`timezone` setting.
        )rd   r   Ú
enable_utcrÐ  r�   Úget_timezone)rc   rd   s     rM   r   zCelery.timezoneP  sD   € ð �y‰yˆØ�}Š}Ø�ŠÜ—|‘|Ð#ä—~‘~Ð%Ü×$Ñ$ T§]¡]Ó3Ð3rO   )NNNNNNNTNNNNNNNTNTrg   )F)NNF)FFN)FFrà   )NrÇ   F)NNNNNNNNNNNNNTNNr   NNNNNNNNNNr   )NNNNNNNNNNNN)NNNNNNNNNNN)TrÙ   )r‚   r‚   N)r‚   NN)NrK   NF)yrJ   r€   r�   rù   r:   r  r   ÚSYSTEMÚIS_macOSÚ
IS_WINDOWSr”   r¡   r¢   ÚBUILTIN_FIXUPSr·   r•   rÝ  r–   r˜   r™   rš   r�   rŸ   r‘   r¹   rÝ   r¶   rÚ   r»   r¼   r½   r¾   re   r—   rÀ   r³   rº   r×   rÛ   rÞ   rê   rî   r  r  rõ   r   r*   r+  r0  r3  r;  r>  r7   rA  rQ  rL  rS  rT  r›  r¡  r¤  rw  r�  Úbroker_connectionrÄ  rÈ  Údefault_connectionrv  Údefault_producerrÍ  rh  rÖ  r»  rA   rÞ  rµ   rà  rW   rò  rø  rô  ræ  r  r  rQ   r  r  r~   r  r  r  r…   r   r  r!  r#  r  r(  r{  r+  r-  ÚpropertyrÂ  r5  rl  r:  rs  rÃ   r@  ÚsetterrÂ   rd   rÆ   rÄ   rÁ   rÅ   rñ  rÇ   rÊ  rO  r   r‚   rO   rM   rC   rC   ‹   s°  „ ñ"ðJ €Gà×Ñ€FØ$×-Ñ-¨y×/CÑ/CÐ€Hˆjð €Dð €Lð €Eà#€Nà%€HØ€KØ+€JØ€JØ&€GØ.€KØ%€HØ5€Lð €FØ€GØ€EØ€EØ"Ðð €Lð Ðð Ðð €Mà7;Ø;?ØGKØIMØBFó	Vòp
ò0ò/ò
òòCòó,ó&ò E-óN=óò>ò&1ó9ò,+ð2 AEó!ó0Pó$
ð
 26¸4ÈdÐY]Ø!Ð*AØ"(óCð@ +/Ø7<ó,$ò\Bò

ò&ð AEØDHØ8<Ø8<ØAEØ#'ØBFØ;?ØQRóhóTLóMð ?CØ59Ø37Ø59Ø8<ó	)
ðV 6:Ø6:Ø48Ø6:Ø9=ó	
ð4 #Ðó+ó
Pð /Ðó
ð +Ðò+ò4ó
/òòò*òò"!òF-ò7ð 48óð$ @Dó
ó.ò
ð >CØ5:ó!=òF&òòò9òLò

ò
ò$,ð ñDó ðDð ñGó ðGð ñ@ó ð@ð ñ&ó ð&ð ñ?ó ð?ð ñDó ðDð ñBó ðBð ñDó ðDð ñó ðð ñó ðð ñ)ó ð)ð ñ-ó ð-ð ñó ðð ñ4ó ð4ð ñ5ó ð5ð ‡_�_ñ*ó ð*ð ñó ðð ñó ðð 
‡[�[ñó ðð ñ7ó ð7ð ñ6ó ð6ð ñ9ó ð9ð ñ3ó ð3ð ñó ðð ñó ðð ñ'ó ð'ò-ð ñ4ó ñ4rO   rC   )qrù   r  rÎ   ræ   r�   rd  Úcollectionsr   r   r   r   r   rÏ  Úoperatorr	   Úclick.exceptionsr
   Údateutil.parserr   Úkombur   Úkombu.clocksr   Úkombu.commonr   Úkombu.utils.compatr   Úkombu.utils.objectsr   Úkombu.utils.uuidr   Úviner   rá   r   r   Úcelery._stater   r   r   r   r   r   r   r   r   Úcelery.exceptionsr   r    Úcelery.loadersr!   Úcelery.localr"   r#   Úcelery.utilsr$   Úcelery.utils.collectionsr%   Úcelery.utils.dispatchr&   Úcelery.utils.functionalr'   r(   r)   Úcelery.utils.importsr*   r+   r,   Úcelery.utils.logr-   Úcelery.utils.objectsr.   r/   Úcelery.utils.timer0   r1   r  r3   r4   r(  r5   r&  Ú	autoretryr6   rÙ  r7   r8   Úregistryr9   Úutilsr:   r;   r<   r=   r>   r?   r@   rA   rB   Ú__all__rJ   rY   rV  rÏ   rÐ   r  r7  rN   rT   r\   r^   rC   ÚAppr‚   rO   rM   Ú<module>rx     s  ðÙ )Û Û 	Û 
Û Û ß 4Ñ 4Ý Ý 2Ý å !Ý $Ý Ý %Ý !Ý 2Ý /Ý !Ý ç %÷o÷ oõ oç FÝ )ß 5Ý !Ý 7Ý (ß DÑ Dß KÑ KÝ 'ß <ß @Ñ @÷ !Ý 7Ý .ß GÝ "÷0÷ 0õ 0ð €á	�HÓ	€ð !ð€ð �j‰j�n‰nÐ8Ó9€ð	Ð ò	1ò<òJô)˜8Ð%7ô )÷XR4ñ R4ðj& �rO   