Ë
    —V.jÎ«  ã                   óZ  — d Z ddlZddlZddlZddlm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mZmZ dd	lmZ dd
lmZmZ ddlmZ ddlZddlmZmZmZmZ ddl m!Z! ddl"m#Z# ddlm$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@ dZA eBdh«      ZC e8eD«      ZEdZF edd«      ZGdZHdZId„ ZJ G d„ deK«      ZLd „ ZM G d!„ d"«      ZN G d#„ d$«      ZO G d%„ d&eNeO«      ZPePZQ G d'„ d(eN«      ZR G d)„ d*eReO«      ZS G d+„ d,eP«      ZTy)-z°Result backend base classes.

- :class:`BaseBackend` defines the interface.

- :class:`KeyValueStoreBackend` is a common base class
    using K/V semantics like _get and _put.
é    N)Ú
namedtuple)ÚdatetimeÚ	timedeltaÚtimezone)Úpartial)ÚWeakValueDictionary)ÚExceptionInfo)ÚdumpsÚloadsÚprepare_accept_content)Úregistry)Úbytes_to_strÚensure_bytes)Úmaybe_sanitize_url)Úcurrent_appÚgroupÚmaybe_signatureÚstates)Úget_current_task)ÚContext)ÚBackendGetMetaErrorÚBackendStoreErrorÚ
ChordErrorÚImproperlyConfiguredÚNotRegisteredÚSecurityErrorÚTaskRevokedErrorÚTimeoutError)ÚGroupResultÚ
ResultBaseÚ	ResultSetÚallow_join_resultÚresult_from_tuple)Ú	BufferMap)ÚLRUCacheÚarity_greater)Ú
get_logger)Úcreate_exception_clsÚensure_serializableÚget_pickleable_exceptionÚget_pickled_exceptionÚraise_with_context)Ú get_exponential_backoff_interval)ÚBaseBackendÚKeyValueStoreBackendÚDisabledBackendÚpicklei    Úpending_results_t)ÚconcreteÚweakzU
No result backend is configured.
Please see the documentation for more information.
zû
Starting chords requires a result backend to be configured.

Note that a group chained with a task is also upgraded to be a chord,
as this pattern requires synchronization.

Result backends that supports chords: Redis, Database, Memcached, and more.
c                 ó:   —  | |dt        j                  «       i|¤ŽS )zReturn an unpickled backend.Úapp)r   Ú_get_current_object)ÚclsÚargsÚkwargss      úVC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/backends/base.pyÚunpickle_backendr<   ?   s    € á�ÐFœ+×9Ñ9Ó;ÐF¸vÑFÐFó    c                   ó   — e Zd Zd„ ZexZxZZy)Ú	_nulldictc                  ó   — y ©N© )ÚselfÚaÚkws      r;   Úignorez_nulldict.ignoreE   ó   € Ør=   N)Ú__name__Ú
__module__Ú__qualname__rF   Ú__setitem__ÚupdateÚ
setdefaultrB   r=   r;   r?   r?   D   s   „ òð )/Ð.€KÐ.�&™:r=   r?   c                 ó    — | €y| j                   S ©NF)Úignore_result©Úrequests    r;   Ú_is_request_ignore_resultrS   K   s   € Ø€ØØ× Ñ Ð r=   c                   óL  — e Zd Zej                  Zej
                  Zej                  ZeZdZdZ	dZ
dZdddddœZ	 	 d<d„Zd=d	„Zd
„ Zddej                   fd„Zddddej$                  fd„Zd„ Zdddej*                  fd„Zdddej.                  fd„Zd>d„Zd>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%d„ Z&	 	 d?d„Z'd „ Z(	 d@d!„Z)d"„ Z*d#„ Z+d$„ Z,e,Z-d%„ Z.d&„ Z/d'„ Z0d(„ Z1d)„ Z2dAd*„Z3d+„ Z4d,„ Z5dAd-„Z6dAd.„Z7d/„ Z8d0„ Z9d1„ Z:d2„ Z;d3„ Z<d4„ Z=d5„ Z>d6„ Z?dBd7„Z@d8„ ZAd9„ ZBd>d:„ZCdCd;„ZDy)DÚBackendNFTé   r   é   )Úmax_retriesÚinterval_startÚinterval_stepÚinterval_maxc                 óf  — || _         | j                   j                  }	|xs |	j                  | _        t        j
                  | j                     \  | _        | _        | _        |xs |	j                  }
|
dk(  r
t        «       nt        |
¬«      | _        | j                  ||«      | _        |€|	j                  n|| _        | j                   €|	j"                  n| j                   | _        t%        | j                   «      | _        |	j'                  dd«      | _        |	j'                  dd«      | _        |	j'                  dd«      | _        |	j'                  d	t/        d
«      «      | _        |	j'                  dd«      | _        t5        i t7        «       «      | _        t;        t<        «      | _        || _         y )Néÿÿÿÿ)ÚlimitÚresult_backend_always_retryFÚ+result_backend_max_sleep_between_retries_msi'  Ú,result_backend_base_sleep_between_retries_msé
   Úresult_backend_max_retriesÚinfÚresult_backend_thread_safe)!r6   ÚconfÚresult_serializerÚ
serializerÚserializer_registryÚ	_encodersÚcontent_typeÚcontent_encodingÚencoderÚresult_cache_maxr?   r%   Ú_cacheÚprepare_expiresÚexpiresÚresult_accept_contentÚacceptÚaccept_contentr   ÚgetÚalways_retryÚmax_sleep_between_retries_msÚbase_sleep_between_retries_msÚfloatrX   Úthread_safer2   r   Ú_pending_resultsr$   ÚMESSAGE_BUFFER_MAXÚ_pending_messagesÚurl)rC   r6   rh   Úmax_cached_resultsrs   rq   Úexpires_typer~   r:   rf   Úcmaxs              r;   Ú__init__zBackend.__init__o   s`  € ð ˆŒØ�x‰x�}‰}ˆØ$Ò>¨×(>Ñ(>ˆŒô -×6Ñ6°t·±ÑGñ	ˆÔ	Ø	Ô	Ø	ŒØ!Ò: T×%:Ñ%:ˆØ%)¨R¢Z”i”k´XÀDÔ5IˆŒà×+Ñ+¨G°\ÓBˆŒð 5;°N�d×0Ò0ÈˆŒØ-1¯[©[Ð-@�d×)Ò)ÀdÇkÁkˆŒÜ,¨T¯[©[Ó9ˆŒà ŸH™HÐ%BÀEÓJˆÔØ,0¯H©HÐ5bÐdiÓ,jˆÔ)Ø-1¯X©XÐ6dÐfhÓ-iˆÔ*ØŸ8™8Ð$@Ä%ÈÃ,ÓOˆÔØŸ8™8Ð$@À%ÓHˆÔä 1°"Ô6IÓ6KÓ LˆÔÜ!*Ô+=Ó!>ˆÔØˆ�r=   c                 ó€   — |r| j                   S t        | j                   xs d«      }|j                  d«      r|dd S |S )z=Return the backend as an URI, sanitizing the password or not.Ú z:///Nr]   )r~   r   Úendswith)rC   Úinclude_passwordr~   s      r;   Úas_urizBackend.as_uriŒ   s>   € ñ Ø—8‘8ˆOÜ  §¡¢¨RÓ0ˆØŸ<™<¨Ô/ˆs�3�BˆxÐ8°SÐ8r=   c                 óD   — | j                  ||t        j                  «      S )zMark a task as started.)Ústore_resultr   ÚSTARTED©rC   Útask_idÚmetas      r;   Úmark_as_startedzBackend.mark_as_started•   s   € à× Ñ  ¨$´·±Ó?Ð?r=   c                 óŽ   — |r t        |«      s| j                  ||||¬«       |r!|j                  r| j                  |||«       yyy)z#Mark task as successfully executed.rQ   N)rS   r‰   ÚchordÚon_chord_part_return)rC   rŒ   ÚresultrR   r‰   Ústates         r;   Úmark_as_donezBackend.mark_as_done™   sH   € ñ Ô!:¸7Ô!CØ×Ñ˜g v¨u¸gÐÔFÙ�w—}’}Ø×%Ñ% g¨u°fÕ=ð %ˆ7r=   c                 óÊ  — |r| j                  |||||¬«       |�r(|j                  r| j                  |||«       	 t        |j                  «      }|D ]Ê  }	t        |	«      }
|
j                  |
j                  «       |
j                  j                  d«      |
_        |
j                  j                  d«      |
_        |r>|t        j                  v r,|
j                   � | j                  |
j                   ||||
¬«       d|
j                  v sŒ¸| j                  |
||«       ŒÌ |r!|j"                  r| j%                  |||«       yyyy# t
        t        f$ r t        «       }Y �Œw xY w)z#Mark task as executed with failure.©Ú	tracebackrR   rŒ   Úgroup_idNr�   )r‰   r�   r‘   ÚiterÚchainÚAttributeErrorÚ	TypeErrorÚtupler   rL   Úoptionsru   Úidr   r   ÚPROPAGATE_STATESrŒ   ÚerrbacksÚ_call_task_errbacks)rC   rŒ   Úexcr—   rR   r‰   Úcall_errbacksr“   Ú
chain_dataÚ
chain_elemÚchain_elem_ctxs              r;   Úmark_as_failurezBackend.mark_as_failure¡   sa  € ñ
 Ø×Ñ˜g s¨EØ(1¸7ð ô Dâà�}Š}Ø×)Ñ)¨'°5¸#Ô>ð%Ü! '§-¡-Ó0�
ó )�
ô ")¨Ó!4�Ø×%Ñ% n×&<Ñ&<Ô=Ø$2×$:Ñ$:×$>Ñ$>¸yÓ$I�Ô!Ø'5×'=Ñ'=×'AÑ'AÀ*Ó'M�Ô$ñ ! U¬f×.EÑ.EÑ%EØ"×*Ñ*Ð6à×%Ñ%Ø&×.Ñ.°°UØ"+°^ð &ô ð ˜n×4Ñ4Ò4Ø×-Ñ-¨n¸eÀSÕIð; )ñ>  ×!1Ò!1Ø×(Ñ(¨°#°yÕAð "2ˆ}ð[ øô #¤IÐ.ò %Ü"›W“
ð%ús   ¼E ÅE"Å!E"c                 ó  — g }|j                   D ]±  }| j                  j                  |«      }|j                  s| j                  |_        	 t	        |j
                  d«      rOt        |j
                  j                  t        «      s+t        |j
                  j                  d«      r ||||«       n|j                  |«       Œ³ |r›|j                  }|j                  xs |}t        || j                  ¬«      }| j                  j                  j                   s|j"                  j%                  dd«      r|j'                  |f||¬«       y |j)                  |f||¬«       y y # t        $ r |j                  |«       Y �Œow xY w)NÚ
__header__rW   ©r6   Úis_eagerF)Ú	parent_idÚroot_id)r¡   r6   Ú	signatureÚ_appÚhasattrÚtypeÚ
isinstancerª   r   r&   Úappendr   rŸ   r®   r   rf   Útask_always_eagerÚdelivery_inforu   ÚapplyÚapply_async)	rC   rR   r£   r—   Úold_signatureÚerrbackrŒ   r®   Úgs	            r;   r¢   zBackend._call_task_errbacksÙ   sH  € ØˆØ×'Ô'ˆGØ—h‘h×(Ñ(¨Ó1ˆGØ—<’<à#Ÿx™x�”ð.ô   §¡¨lÔ;ô ' w§|¡|×'>Ñ'>ÄÔHÜ% g§l¡l×&=Ñ&=¸qÔAá˜G S¨)Õ4à!×(Ñ(¨Ô1øð+ (ñ: ð —j‘jˆGØ—o‘oÒ0¨ˆGÜ�m¨¯©Ô2ˆAØ�x‰x�}‰}×.Ò.°'×2GÑ2G×2KÑ2KÈJÐX]Ô2^Ø—‘Ø�J¨'¸7ð õ ð —‘Ø�J¨'¸7ð õ ð øô !ò .ð
 ×$Ñ$ W×-ð.ús   ÁA6E!Å!E?Å>E?r„   c                 ó�   — t        |«      }|r| j                  |||d |¬«       |r!|j                  r| j                  |||«       y y y )Nr–   )r   r‰   r�   r‘   )rC   rŒ   ÚreasonrR   r‰   r“   r£   s          r;   Úmark_as_revokedzBackend.mark_as_revoked  sO   € ä˜vÓ&ˆÙØ×Ñ˜g s¨EØ(,°gð ô ?á�w—}’}Ø×%Ñ% g¨u°cÕ:ð %ˆ7r=   c                 ó.   — | j                  |||||¬«      S )zfMark task as being retries.

        Note:
            Stores the current exception (if any).
        r–   )r‰   )rC   rŒ   r£   r—   rR   r‰   r“   s          r;   Úmark_as_retryzBackend.mark_as_retry  s)   € ð × Ñ  ¨#¨uØ+4¸gð !ó Gð 	Gr=   c                 óä  — | j                   }	 |j                  |j                     j                  }t        |j                  j                  d«      |j                  j                  dg «      t        «       dœ|¥«      }	 | j                  ||d «       |j                  |j                  |¬«      S # t        $ r | }Y ŒŠw xY w# t        $ r'}|j                  |j                  |¬«      cY d }~S d }~ww xY w)NrŒ   Ú
link_error)rŸ   r¡   r¶   )r£   )r6   Ú_tasksÚtaskÚbackendÚKeyErrorr   rž   ru   Údictr¢   Úfail_from_current_stackrŸ   Ú	Exception)rC   Úcallbackr£   r6   rÅ   Úfake_requestÚeb_excs          r;   Úchord_error_from_stackzBackend.chord_error_from_stack  sé   € Ø�h‰hˆð	Ø—j‘j §¡Ñ/×7Ñ7ˆGô Ø×"Ñ"×&Ñ& yÓ1Ø ×(Ñ(×,Ñ,¨\¸2Ó>Ü!›Vñ 
ð ð	 
ó ˆð	IØ×$Ñ$ \°3¸Ô=ð ×2Ñ2°8·;±;ÀCÐ2ÓHÐHøô% ò 	ØŠGð	ûô ò 	LØ×2Ñ2°8·;±;ÀFÐ2ÓKÕKûð	Lús/   Ž#B. Á>B? Â.B<Â;B<Â?	C/ÃC*Ã$C/Ã*C/c                 óî  — t        j                  «       \  }}}	 |€|n|}t        |||f«      }| j                  |||j                  «       ||�@	 |j
                  j                  «        |j
                  j                   |j                  }|�Œ@~S # t        $ r Y Œw xY w# |�P	 |j
                  j                  «        |j
                  j                   n# t        $ r Y nw xY w|j                  }|�ŒP~w xY wrA   )
ÚsysÚexc_infor	   r¨   r—   Útb_frameÚclearÚf_localsÚRuntimeErrorÚtb_next)rC   rŒ   r£   Útype_Úreal_excÚtbÚexception_infos          r;   rÈ   zBackend.fail_from_current_stack2  sõ   € Ü!Ÿl™l›nÑˆˆx˜ð	Ø!˜k‘(¨sˆCÜ*¨E°3¸Ð+;Ó<ˆNØ× Ñ  ¨#¨~×/GÑ/GÔHØ!à�.ðØ—K‘K×%Ñ%Ô'Ø—K‘K×(Ò(ð —Z‘Z�ð ‘.ñ øô $ò áðûð	 �.ðØ—K‘K×%Ñ%Ô'Ø—K‘K×(Ó(øÜ#ò áðúð —Z‘Z�ð ‘.ñ úsG   š2B Á0BÂ	BÂBÂC4Â#0CÃC4Ã	C ÃC4ÃC Ã C4Ã2C4c                 óä   — |€| j                   n|}|t        v rt        |«      S t        |«      }t	        |d|j
                  «      t        |j                  | j                  «      |j                  dœS )z$Prepare exception for serialization.rJ   )Úexc_typeÚexc_messageÚ
exc_module)
rh   ÚEXCEPTION_ABLE_CODECSr*   r²   ÚgetattrrH   r)   r9   ÚencoderI   )rC   r£   rh   Úexctypes       r;   Úprepare_exceptionzBackend.prepare_exceptionE  sf   € à(2Ð(:�T—_’_À
ˆ
ØÔ.Ñ.Ü+¨CÓ0Ð0Ü�s“)ˆÜ# G¨^¸W×=MÑ=MÓNÜ2°3·8±8¸T¿[¹[ÓIØ%×0Ñ0ñ2ð 	2r=   c                 óŠ  — |syt        |t        «      r| j                  t        v rt	        |«      }|S t        |t
        «      s	 t        |«      }|j                  d«      }	 |d   }|€t        |t        «      }n7	 t        j                  |   }|j                  d«      D ]  }t        ||«      }Œ 	 |j                  dd«      }t        |t&        «      rt)        |t        «      s|€|n|› d|› �}t+        d	|› d
|› �«      ‚	 t        |t,        t.        f«      r ||Ž }|S  ||«      }	 |S # t        $ r}t        d|› �«      |‚d}~ww xY w# t        $ r}t        d«      |‚d}~ww xY w# t        t         f$ r' t        |t"        j$                  j                  «      }Y Œéw xY w# t0        $ r}	t1        |› d|› d�«      }Y d}	~	|S d}	~	ww xY w)z1Convert serialized exception to Python exception.NzbIf the stored exception isn't an instance of BaseException, it must be a dictionary.
Instead got: rÝ   rÛ   z5Exception information must include the exception typeÚ.rÜ   r„   z!Expected an exception class, got z with payload Ú(Ú))r³   ÚBaseExceptionrh   rÞ   r+   rÇ   rœ   ru   rÆ   Ú
ValueErrorr(   rH   rÏ   ÚmodulesÚsplitrß   r›   ÚceleryÚ
exceptionsr²   Ú
issubclassr   r�   ÚlistrÉ   )
rC   r£   ÚerÝ   rÛ   r8   ÚnameÚexc_msgÚfake_exc_typeÚerrs
             r;   Úexception_to_pythonzBackend.exception_to_pythonO  s   € áØÜ˜œ]Ô+Ø�‰Ô"7Ñ7Ü+¨CÓ0�ØˆJÜ˜C¤Ô&ð>Ü˜3“i�ð —W‘W˜\Ó*ˆ
ð	:Ø˜:‘ˆHð ÐÜ&Øœ(ó$‰CðGä—k‘k *Ñ-�à$ŸN™N¨3Ö/�DÜ! # tÓ,‘Cñ 0ð
 —'‘'˜-¨Ó,ˆô" ˜#œtÔ$¬J°s¼MÔ,JØ(2Ð(:™HÀ:À,ÈaÐPXÈzÐ@ZˆMÜØ3°M°?À.ÐQXÐPYÐZó\ð \ð	1Ü˜'¤E¬4 =Ô1Ù˜7�m�ð ˆ
ñ	 ˜'“l‘ð ˆ
øôu ò >Üð #0ð 14¨uð!6ó 7ð =>ð>ûð>ûô ò 	:Üð 2ó 3Ø89ð:ûð	:ûô œnÐ-ò GÜ*¨8Ü+1×+<Ñ+<×+EÑ+EóG’ðGûôB ò 	1Ü˜s˜e 1 W I¨QÐ/Ó0ŒCàˆ
ûð	1ús`   ÁD' Á!E Á:5E$ Ã?F ÄF Ä'	EÄ0D?Ä?EÅ	E!ÅEÅE!Å$3FÆFÆ	GÆ&F=Æ=Gc                 ód   — | j                   dk7  r t        |t        «      r|j                  «       S |S )zPrepare value for storage.r1   )rh   r³   r    Úas_tuple©rC   r’   s     r;   Úprepare_valuezBackend.prepare_value–  s)   € à�?‰?˜hÒ&¬:°f¼jÔ+IØ—?‘?Ó$Ð$Øˆr=   c                 ó0   — | j                  |«      \  }}}|S rA   )Ú_encode)rC   ÚdataÚ_Úpayloads       r;   rà   zBackend.encodeœ  s   € ØŸ™ TÓ*‰ˆˆ1ˆgØˆr=   c                 ó0   — t        || j                  ¬«      S )N)rh   )r
   rh   )rC   rû   s     r;   rú   zBackend._encode   s   € Ü�T d§o¡oÔ6Ð6r=   c                 óV   — |d   | j                   v r| j                  |d   «      |d<   |S )NÚstatusr’   )ÚEXCEPTION_STATESrô   )rC   r�   s     r;   Úmeta_from_decodedzBackend.meta_from_decoded£  s1   € Ø�‰>˜T×2Ñ2Ñ2Ø!×5Ñ5°d¸8±nÓEˆD�‰NØˆr=   c                 óB   — | j                  | j                  |«      «      S rA   )r  Údecode©rC   rý   s     r;   Údecode_resultzBackend.decode_result¨  s   € Ø×%Ñ% d§k¡k°'Ó&:Ó;Ð;r=   c                 ó‚   — |€|S |xs t        |«      }t        || j                  | j                  | j                  ¬«      S )N)rk   rl   rs   )Ústrr   rk   rl   rs   r  s     r;   r  zBackend.decode«  sB   € Øˆ?ØˆNØÒ)œS ›\ˆÜ�WØ"&×"3Ñ"3Ø&*×&;Ñ&;Ø ŸK™Kô)ð 	)r=   c                 ó¢   — |€ | j                   j                  j                  }t        |t        «      r|j                  «       }|�
|r ||«      S |S rA   )r6   rf   Úresult_expiresr³   r   Útotal_seconds)rC   Úvaluer²   s      r;   rp   zBackend.prepare_expires´  sI   € Øˆ=Ø—H‘H—M‘M×0Ñ0ˆEÜ�eœYÔ'Ø×'Ñ'Ó)ˆEØÐ¡Ù˜“;ÐØˆr=   c                 ój   — |�|S | j                   j                  j                  }|€| j                  S |S rA   )r6   rf   Úresult_persistentÚ
persistent)rC   Úenabledr  s      r;   Úprepare_persistentzBackend.prepare_persistent½  s4   € ØÐØˆNØ—X‘X—]‘]×4Ñ4ˆ
Ø",Ð"4ˆt�‰ÐD¸*ÐDr=   c                 ó‚   — || j                   v r!t        |t        «      r| j                  |«      S | j	                  |«      S rA   )r  r³   rÉ   râ   rø   )rC   r’   r“   s      r;   Úencode_resultzBackend.encode_resultÃ  s;   € Ø�D×)Ñ)Ñ)¬j¸ÄÔ.KØ×)Ñ)¨&Ó1Ð1Ø×!Ñ! &Ó)Ð)r=   c                 ó   — || j                   v S rA   )ro   ©rC   rŒ   s     r;   Ú	is_cachedzBackend.is_cachedÈ  s   € Ø˜$Ÿ+™+Ð%Ð%r=   c           	      ó`  — || j                   v r6t        j                  t        j                  «      }|r|j                  «       }nd }|||| j                  |«      |dœ}|rt        |dd «      r|j                  |d<   |rt        |dd «      r|j                  |d<   | j                  j                  j                  dd«      rî|rìt        |dd «      t        |dd «      t        |d	d «      t        |d
d «      t        |dd «      t        |d«      r'|j                  r|j                  j                  d«      nd dœ}	t        |dd «      r*|j                   |	d<   |	j#                  |j$                  «       |r/dd	h}
|
D ]&  }|	|   }| j'                  |«      }t)        |«      |	|<   Œ( |j#                  |	«       |S )N)r   r’   r—   ÚchildrenÚ	date_doner   r˜   r­   Úextendedr’   rÄ   r9   r:   ÚhostnameÚretriesr¶   Úrouting_key)rð   r9   r:   Úworkerr  ÚqueueÚstampsÚstamped_headers)ÚREADY_STATESr   Únowr   ÚutcÚ	isoformatÚcurrent_task_childrenrß   r   r­   r6   rf   Úfind_value_for_keyr±   r¶   ru   r!  rL   r   rà   r   )rC   r’   r“   r—   rR   Úformat_daterà   r  r�   Úrequest_metaÚencode_needed_fieldsÚfieldr  Úencoded_values                 r;   Ú_get_result_metazBackend._get_result_metaË  s¦  € ð �D×%Ñ%Ñ%Ü Ÿ™¤X§\¡\Ó2ˆIÙØ%×/Ñ/Ó1‘	àˆIð ØØ"Ø×2Ñ2°7Ó;Ø"ñ
ˆñ ”w˜w¨°Ô6Ø&Ÿ}™}ˆD�ÑÙ”w˜w¨°TÔ:Ø '× 1Ñ 1ˆD�Ñà�8‰8�=‰=×+Ñ+¨J¸ÔAÙä# G¨V°TÓ:Ü# G¨V°TÓ:Ü% g¨x¸Ó>Ü% g¨z¸4Ó@Ü& w°	¸4Ó@ä˜w¨Ô8Ø×)Ò)ð %×2Ñ2×6Ñ6°}ÔEà/3ñ	 �ô ˜7 H¨dÔ3Ø6=×6MÑ6M�LÐ!2Ñ3Ø ×'Ñ'¨¯©Ô7áà,2°HÐ+=Ð(Û!5˜Ø ,¨UÑ 3˜Ø(,¯©°EÓ(:˜Ü.:¸=Ó.I˜ UÒ+ð "6ð
 —‘˜LÔ)àˆr=   c                 ó.   — t        j                  |«       y rA   )ÚtimeÚsleep)rC   Úamounts     r;   Ú_sleepzBackend._sleepþ  s   € Ü�
‰
�6Õr=   c                 ó’  — | j                  ||«      }d}	 	  | j                  ||||fd|i|¤Ž |S # t        $ r‹}| j                  rt| j	                  |«      rc|| j
                  k  r<|dz  }t        | j                  || j                  d«      dz  }	| j                  |	«       nt        t        d||¬«      «       n‚ Y d}~nd}~ww xY wŒ³)	záUpdate task state and result.

        if always_retry_backend_operation is activated, in the event of a recoverable exception,
        then retry operation with an exponential backoff until a limit has been reached.
        r   TrR   rW   éè  z%failed to store result on the backend)rŒ   r“   N)r  Ú_store_resultrÉ   rv   Úexception_safe_to_retryrX   r-   rx   rw   r2  r,   r   )
rC   rŒ   r’   r“   r—   rR   r:   r  r£   Úsleep_amounts
             r;   r‰   zBackend.store_result  sê   € ð ×#Ñ# F¨EÓ2ˆàˆàðØ"�×"Ñ" 7¨F°E¸9ñ >Ø+2ð>Ø6<ò>à�øÜò Ø×$Ò$¨×)EÑ)EÀcÔ)JØ ×!1Ñ!1Ò1Ø 1™˜ô (HØ ×>Ñ>ÀØ ×=Ñ=¸tó(EàGKñ(L˜ð Ÿ™ LÕ1ä*Ü-Ð.UÐ_fÐnsÔtõð ÿøð!úð s   —1 ±	CºBC Ã Cc                 ó^   — | j                   j                  |d «       | j                  |«       y rA   )ro   ÚpopÚ_forgetr  s     r;   ÚforgetzBackend.forget#  s    € Ø�‰�‰˜ Ô&Ø�‰�WÕr=   c                 ó   — t        d«      ‚)Nz"backend does not implement forget.©ÚNotImplementedErrorr  s     r;   r:  zBackend._forget'  s   € Ü!Ð"FÓGÐGr=   c                 ó*   — | j                  |«      d   S )zGet the state of a task.r   )Úget_task_metar  s     r;   Ú	get_statezBackend.get_state*  s   € à×!Ñ! 'Ó*¨8Ñ4Ð4r=   c                 óB   — | j                  |«      j                  d«      S )z$Get the traceback for a failed task.r—   ©r@  ru   r  s     r;   Úget_tracebackzBackend.get_traceback0  s   € à×!Ñ! 'Ó*×.Ñ.¨{Ó;Ð;r=   c                 óB   — | j                  |«      j                  d«      S )zGet the result of a task.r’   rC  r  s     r;   Ú
get_resultzBackend.get_result4  s   € à×!Ñ! 'Ó*×.Ñ.¨xÓ8Ð8r=   c                 óJ   — 	 | j                  |«      d   S # t        $ r Y yw xY w)z(Get the list of subtasks sent by a task.r  N)r@  rÆ   r  s     r;   Úget_childrenzBackend.get_children8  s/   € ð	Ø×%Ñ% gÓ.¨zÑ:Ð:øÜò 	Ùð	ús   ‚ –	"¡"c                 ó¼   — | j                   j                  j                  r<| j                   j                  j                  st	        j
                  dt        «       y y y )Nz‹Results are not stored in backend and should not be retrieved when task_always_eager is enabled, unless task_store_eager_result is enabled.)r6   rf   rµ   Útask_store_eager_resultÚwarningsÚwarnÚRuntimeWarning©rC   s    r;   Ú_ensure_not_eagerzBackend._ensure_not_eager?  sA   € Ø�8‰8�=‰=×*Ò*°4·8±8·=±=×3XÒ3XÜ�M‰Mð[äõð 4YÐ*r=   c                  ó   — y)a  Check if an exception is safe to retry.

        Backends have to overload this method with correct predicates dealing with their exceptions.

        By default no exception is safe to retry, it's up to backend implementation
        to define which exceptions are safe.
        FrB   )rC   r£   s     r;   r6  zBackend.exception_safe_to_retryG  s   € ð r=   c                 ó(  — | j                  «        |r	 | j                  |   S d}	 	 | j                  |«      }	 |r1|j                  d«      t        j                   k(  r|| j                  |<   |S # t        $ r Y ŒVw xY w# t        $ rŠ}| j
                  rs| j                  |«      rb|| j                  k  r<|dz  }t        | j                  || j                  d«      dz  }| j                  |«       nt        t        d|¬«      «       n‚ Y d}~nd}~ww xY wŒî)	zßGet task meta from backend.

        if always_retry_backend_operation is activated, in the event of a recoverable exception,
        then retry operation with an exponential backoff until a limit has been reached.
        r   TrW   r4  zfailed to get meta)rŒ   Nr   )rO  ro   rÆ   Ú_get_task_meta_forrÉ   rv   r6  rX   r-   rx   rw   r2  r,   r   ru   r   ÚSUCCESS)rC   rŒ   Úcacher  r�   r£   r7  s          r;   r@  zBackend.get_task_metaQ  s   € ð 	×ÑÔ ÙðØ—{‘{ 7Ñ+Ð+ð ˆØðØ×.Ñ.¨wÓ7�Øñ& �T—X‘X˜hÓ'¬6¯>©>Ò9Ø#'ˆD�K‰K˜Ñ Øˆøô7 ò Ùðûô ò Ø×$Ò$¨×)EÑ)EÀcÔ)JØ ×!1Ñ!1Ò1Ø 1™˜ô (HØ ×>Ñ>ÀØ ×=Ñ=¸tó(EàGKñ(L˜ð Ÿ™ LÕ1ä*Ü/Ð0DÈgÔVõð ÿøð!úð	 s)   ”A. §A= Á.	A:Á9A:Á=	DÂB DÄDc                 óD   — | j                  |d¬«      | j                  |<   y)z;Reload task result, even if it has been previously fetched.F©rT  N)r@  ro   r  s     r;   Úreload_task_resultzBackend.reload_task_resultx  s    € à#×1Ñ1°'ÀÐ1ÓGˆ�‰�GÒr=   c                 óD   — | j                  |d¬«      | j                  |<   y)z<Reload group result, even if it has been previously fetched.FrV  N)Úget_group_metaro   ©rC   r˜   s     r;   Úreload_group_resultzBackend.reload_group_result|  s    € à $× 3Ñ 3°HÀEÐ 3Ó Jˆ�‰�HÒr=   c                 ó°   — | j                  «        |r	 | j                  |   S | j                  |«      }|r|�|| j                  |<   |S # t        $ r Y Œ1w xY wrA   )rO  ro   rÆ   Ú_restore_group©rC   r˜   rT  r�   s       r;   rY  zBackend.get_group_meta€  sf   € Ø×ÑÔ ÙðØ—{‘{ 8Ñ,Ð,ð ×"Ñ" 8Ó,ˆÙ�TÐ%Ø$(ˆD�K‰K˜Ñ!Øˆøô ò Ùðús   ”A	 Á		AÁAc                 ó8   — | j                  ||¬«      }|r|d   S y)zGet the result for a group.rV  r’   N)rY  r^  s       r;   Úrestore_groupzBackend.restore_group�  s)   € à×"Ñ" 8°5Ð"Ó9ˆÙØ˜‘>Ð!ð r=   c                 ó&   — | j                  ||«      S )z&Store the result of an executed group.)Ú_save_group©rC   r˜   r’   s      r;   Ú
save_groupzBackend.save_group“  s   € à×Ñ ¨&Ó1Ð1r=   c                 ó\   — | j                   j                  |d «       | j                  |«      S rA   )ro   r9  Ú_delete_grouprZ  s     r;   Údelete_groupzBackend.delete_group—  s%   € Ø�‰�‰˜ $Ô'Ø×!Ñ! (Ó+Ð+r=   c                  ó   — y)zBackend cleanup.NrB   rN  s    r;   ÚcleanupzBackend.cleanup›  ó   � r=   c                  ó   — y)z:Cleanup actions to do at the end of a task worker process.NrB   rN  s    r;   Úprocess_cleanupzBackend.process_cleanupž  rj  r=   c                 ó   — i S rA   rB   )rC   ÚproducerrŒ   s      r;   Úon_task_callzBackend.on_task_call¡  s   € Øˆ	r=   c                 ó   — t        d«      ‚)Nz%Backend does not support add_to_chordr=  )rC   Úchord_idr’   s      r;   Úadd_to_chordzBackend.add_to_chord¤  s   € Ü!Ð"IÓJÐJr=   c                  ó   — y rA   rB   )rC   rR   r“   r’   r:   s        r;   r‘   zBackend.on_chord_part_return§  rG   r=   c                  ó   — y rA   rB   )rC   r˜   Ú
chord_sizes      r;   Úset_chord_sizezBackend.set_chord_sizeª  rG   r=   c                 ó.  — |D �cg c]  }|j                  «       ‘Œ c}|d<   	 t        |dd «      }|j                  j	                  dt        |dd «      «      }|€G| j
                  j                  j                  j                  ||j                  «      d   j                  }|j                  j	                  dt        |dd«      «      }| j
                  j                  d   j                  |j                  |f||||¬«       y c c}w # t        $ r d }Y Œãw xY w)Nr’   r²   r  Úpriorityr   zcelery.chord_unlock)Ú	countdownr  rx  )rö   rß   r   rž   ru   r6   ÚamqpÚrouterÚrouterð   Útasksr¸   rŸ   )	rC   Úheader_resultÚbodyry  r:   ÚrÚ	body_typer  rx  s	            r;   Úfallback_chord_unlockzBackend.fallback_chord_unlock­  s   € á2?Ó@±-¨Q˜AŸJ™J�L°-Ñ@ˆˆxÑð	Ü  f¨dÓ3ˆIð —‘× Ñ  ¬'°)¸WÀdÓ*KÓLˆàˆ=ð —H‘H—M‘M×(Ñ(×.Ñ.¨v°t·y±yÓAÀ'ÑJ×OÑOˆEà—<‘<×#Ñ# J´¸	À:ÈqÓ0QÓRˆØ�‰�‰Ð,Ñ-×9Ñ9Ø×Ñ˜tÐ% vØØØð	 	:õ 	
ùò Aøô ò 	ØŠIð	ús   …D£D ÄDÄDc                  ó   — y rA   rB   rN  s    r;   Úensure_chords_allowedzBackend.ensure_chords_allowedÄ  rG   r=   c                 ó~   — | j                  «         | j                  j                  |Ž } | j                  ||fi |¤Ž y rA   )r„  r6   r   r‚  ©rC   Úheader_result_argsr  r:   r~  s        r;   Úapply_chordzBackend.apply_chordÇ  s<   € Ø×"Ñ"Ô$Ø,˜Ÿ™×,Ñ,Ð.@ÐAˆØ"ˆ×"Ñ" =°$ÑA¸&ÓAr=   c                 ó–   — |xs t        t        «       dd «      }|r)t        |dg «      D �cg c]  }|j                  «       ‘Œ c}S y c c}w )NrR   r  )rß   r   rö   )rC   rR   r€  s      r;   r&  zBackend.current_task_childrenÌ  sJ   € ØÒIœWÔ%5Ó%7¸ÀDÓIˆÙÜ*1°'¸:ÀrÔ*JÓKÑ*J Q�A—J‘J•LÐ*JÑKÐKð ùÚKs   «Ac                 ó8   — |si n|}t         | j                  ||ffS rA   )r<   Ú	__class__©rC   r9   r:   s      r;   Ú
__reduce__zBackend.__reduce__Ñ  s!   € Ù!‘ vˆÜ  4§>¡>°4¸Ð"@ÐAÐAr=   )NNNNNN©FrA   )TF©NN)T)rW   )rB   N)ErH   rI   rJ   r   r"  ÚUNREADY_STATESr  r   Úsubpolling_intervalÚsupports_native_joinÚsupports_autoexpirer  Úretry_policyr‚   r‡   rŽ   rS  r”   ÚFAILUREr¨   r¢   ÚREVOKEDr¾   ÚRETRYrÀ   rÍ   rÈ   râ   rô   rø   rà   rú   r  r  r  rp   r  r  r  r-  r2  r‰   r;  r:  rA  Ú
get_statusrD  rF  rH  rO  r6  r@  rW  r[  rY  r`  rd  rg  ri  rl  ro  rr  r‘   rv  r‚  r„  rˆ  r&  r�  rB   r=   r;   rU   rU   Q   sÐ  „ Ø×&Ñ&€LØ×*Ñ*€NØ×.Ñ.Ðà€Lð
 Ðð !Ðð
  Ðð €Jð ØØØñ	€Lð CGØ6:óó:9ò@ð
 "°¸F¿N¹Nó>ð #'°Ø%)¸Ø$Ÿn™nó6Bòp,ð\ /1Ø $°4¸v¿~¹~ó;ð 59Ø"°¸V¿\¹\óGóIó0ó&2òEòNòò7òò
<ò)óóEò*ò
&ð AEØ %ó1òfð .2ó òDòHò5ð €Jò<ò9òòòó%òNHòKóó"ò2ò,òòIòòKòòó
ò.òBó
Lô
Br=   rU   c                   óN   — e Zd Z	 	 dd„Z	 	 	 d	d„Z	 d
d„Zdd„Zd„ Zed„ «       Z	y)ÚSyncBackendMixinNc              #   ó:  K  — | j                  «        |j                  }|sy t        «       }|D ]H  }t        |t        «      r|j
                  |j                  f–— Œ.|j                  |j
                  «       ŒJ | j                  ||||||¬«      E d {  –—†  y 7 Œ­w)N)ÚtimeoutÚintervalÚno_ackÚ
on_messageÚon_interval)rO  ÚresultsÚsetr³   r!   rŸ   ÚaddÚget_many)	rC   r’   rœ  r�  rž  rŸ  r   r¡  Útask_idss	            r;   Úiter_nativezSyncBackendMixin.iter_native×  s‹   è ø€ à×ÑÔ Ø—.‘.ˆÙØä“5ˆÛˆFÜ˜&¤)Ô,Ø—i‘i §¡Ð/Ó/à—‘˜VŸY™YÕ'ð	 ð —=‘=ØØ h°vØ!¨{ð !ó 
÷ 	
ò 	
ús   ‚BBÂBÂBc	                 óÊ   — | j                  «        |�t        d«      ‚| j                  |j                  ||||¬«      }	|	r$|j	                  |	«       |j                  ||¬«      S y )Nz,Backend does not support on_message callback)rœ  r�  r   rž  )Ú	propagaterÊ   )rO  r   Úwait_forrŸ   Ú_maybe_set_cacheÚmaybe_throw)
rC   r’   rœ  r�  rž  rŸ  r   rÊ   r¨  r�   s
             r;   Úwait_for_pendingz!SyncBackendMixin.wait_for_pendingë  s}   € ð 	×ÑÔ ØÐ!Ü&Ø>ó@ð @ð �}‰}Ø�I‰I˜wØØ#Øð	 ó 
ˆñ Ø×#Ñ# DÔ)Ø×%Ñ%°	ÀHÐ%ÓMÐMð r=   c                 óä   — | j                  «        d}	 | j                  |«      }|d   t        j                  v r|S |r |«        t	        j
                  |«       ||z  }|r||k\  rt        d«      ‚Œ^)aL  Wait for task and return its result.

        If the task raises an exception, this exception
        will be re-raised by :func:`wait_for`.

        Raises:
            celery.exceptions.TimeoutError:
                If `timeout` is not :const:`None`, and the operation
                takes longer than `timeout` seconds.
        g        r   zThe operation timed out.)rO  r@  r   r"  r/  r0  r   )rC   rŒ   rœ  r�  rž  r   Útime_elapsedr�   s           r;   r©  zSyncBackendMixin.wait_forý  sx   € ð 	×ÑÔ àˆàØ×%Ñ% gÓ.ˆDØ�H‰~¤×!4Ñ!4Ñ4Ø�ÙÙ”ä�J‰J�xÔ Ø˜HÑ$ˆLÙ˜<¨7Ò2Ü"Ð#=Ó>Ð>ð r=   c                 ó   — |S rA   rB   )rC   r’   r4   s      r;   Úadd_pending_resultz#SyncBackendMixin.add_pending_result  ó   € Øˆr=   c                 ó   — |S rA   rB   r÷   s     r;   Úremove_pending_resultz&SyncBackendMixin.remove_pending_result  r±  r=   c                  ó   — yrO   rB   rN  s    r;   Úis_asynczSyncBackendMixin.is_async  s   € àr=   )Nç      à?TNN)Nr¶  TNNNT)Nr¶  TNrŽ  )
rH   rI   rJ   r¦  r¬  r©  r°  r³  Úpropertyrµ  rB   r=   r;   rš  rš  Ö  sI   „ ØEIØ15ó
ð( ?BØCGØ26óNð& GKó?ó8òð ñó ñr=   rš  c                   ó   — e Zd ZdZy)r.   z"Base (synchronous) result backend.N©rH   rI   rJ   Ú__doc__rB   r=   r;   r.   r.   $  s   „ Ú,r=   r.   c                   ó(  ‡ — e Zd ZeZdZdZdZdZˆ fd„Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd"d„Zd"d„Zd"d„Zd"d„Zd„ Zej2                  fd„Zej2                  fd„Zddddddej2                  fd„Zd„ Z	 d#d„Zd„ Zd„ Z d„ Z!d„ Z"d „ Z#d!„ Z$ˆ xZ%S )$ÚBaseKeyValueStoreBackendzcelery-task-meta-zcelery-taskset-meta-zchord-unlock-Fc                 ó  •— t        | j                  d«      r| j                  j                  | _        t        ‰| �  |i |¤Ž | j                  «        | j                  «        | j                  r| j                  | _	        y y )NÚ__func__)
r±   Úkey_tr¾  Úsuperr‚   Ú_add_global_keyprefixÚ_encode_prefixesÚimplements_incrÚ_apply_chord_incrrˆ  )rC   r9   r:   r‹  s      €r;   r‚   z!BaseKeyValueStoreBackend.__init__2  sh   ø€ Ü�4—:‘:˜zÔ*ØŸ™×,Ñ,ˆDŒJÜ‰Ñ˜$Ð) &Ò)Ø×"Ñ"Ô$Ø×ÑÔØ×ÒØ#×5Ñ5ˆDÕð  r=   c                 óú   — | j                   j                  j                  di «      j                  dd«      }|rC|› d| j                  › �| _        |› d| j                  › �| _        |› d| j
                  › �| _        yy)a/  
        This method prepends the global keyprefix to the existing keyprefixes.

        This method checks if a global keyprefix is configured in `result_backend_transport_options` using the
        `global_keyprefix` key. If so, then it is prepended to the task, group and chord key prefixes.
        Ú result_backend_transport_optionsÚglobal_keyprefixNrü   )r6   rf   ru   Útask_keyprefixÚgroup_keyprefixÚchord_keyprefix)rC   rÇ  s     r;   rÁ  z.BaseKeyValueStoreBackend._add_global_keyprefix;  s‰   € ð  Ÿ8™8Ÿ=™=×,Ñ,Ð-OÐQSÓT×XÑXÐYkÐmqÓrÐÙØ%5Ð$6°a¸×8KÑ8KÐ7LÐ"MˆDÔØ&6Ð%7°q¸×9MÑ9MÐ8NÐ#OˆDÔ Ø&6Ð%7°q¸×9MÑ9MÐ8NÐ#OˆDÕ ð r=   c                 óÄ   — | j                  | j                  «      | _        | j                  | j                  «      | _        | j                  | j                  «      | _        y rA   )r¿  rÈ  rÉ  rÊ  rN  s    r;   rÂ  z)BaseKeyValueStoreBackend._encode_prefixesH  sG   € Ø"Ÿj™j¨×)<Ñ)<Ó=ˆÔØ#Ÿz™z¨$×*>Ñ*>Ó?ˆÔØ#Ÿz™z¨$×*>Ñ*>Ó?ˆÕr=   c                 ó   — t        d«      ‚)NzMust implement the get method.r=  ©rC   Úkeys     r;   ru   zBaseKeyValueStoreBackend.getM  ó   € Ü!Ð"BÓCÐCr=   c                 ó   — t        d«      ‚)NzDoes not support get_manyr=  )rC   Úkeyss     r;   ÚmgetzBaseKeyValueStoreBackend.mgetP  s   € Ü!Ð"=Ó>Ð>r=   c                 ó&   — | j                  ||«      S rA   )r¢  )rC   rÎ  r  r“   s       r;   Ú_set_with_statez(BaseKeyValueStoreBackend._set_with_stateS  s   € Ø�x‰x˜˜UÓ#Ð#r=   c                 ó   — t        d«      ‚)NzMust implement the set method.r=  ©rC   rÎ  r  s      r;   r¢  zBaseKeyValueStoreBackend.setV  rÏ  r=   c                 ó   — t        d«      ‚)Nz Must implement the delete methodr=  rÍ  s     r;   ÚdeletezBaseKeyValueStoreBackend.deleteY  s   € Ü!Ð"DÓEÐEr=   c                 ó   — t        d«      ‚)NzDoes not implement incrr=  rÍ  s     r;   ÚincrzBaseKeyValueStoreBackend.incr\  s   € Ü!Ð";Ó<Ð<r=   c                  ó   — y rA   rB   rÖ  s      r;   ÚexpirezBaseKeyValueStoreBackend.expire_  rG   r=   c                 ó^   — |st        d|› d�«      ‚| j                  | j                  ||«      S )z#Get the cache key for a task by id.ztask_id must not be empty. Got ú	 instead.)rè   Ú_get_key_forrÈ  )rC   rŒ   rÎ  s      r;   Úget_key_for_taskz)BaseKeyValueStoreBackend.get_key_for_taskb  s5   € áÜÐ>¸w¸iÀyÐQÓRÐRØ× Ñ  ×!4Ñ!4°g¸sÓCÐCr=   c                 ó^   — |st        d|› d�«      ‚| j                  | j                  ||«      S )z$Get the cache key for a group by id.ú group_id must not be empty. Got rÞ  )rè   rß  rÉ  ©rC   r˜   rÎ  s      r;   Úget_key_for_groupz*BaseKeyValueStoreBackend.get_key_for_grouph  ó5   € áÜÐ?À¸zÈÐSÓTÐTØ× Ñ  ×!5Ñ!5°xÀÓEÐEr=   c                 ó^   — |st        d|› d�«      ‚| j                  | j                  ||«      S )z?Get the cache key for the chord waiting on group with given id.râ  rÞ  )rè   rß  rÊ  rã  s      r;   Úget_key_for_chordz*BaseKeyValueStoreBackend.get_key_for_chordn  rå  r=   c                 óf   — | j                   } |d«      j                  | ||«       ||«      g«      S )Nr„   )r¿  Újoin)rC   ÚprefixrŸ   rÎ  r¿  s        r;   rß  z%BaseKeyValueStoreBackend._get_key_fort  s4   € Ø—
‘
ˆá�R‹y�~‰~Ø‘E˜"“I™u S›zð
ó ð 	r=   c                 óÈ   — | j                  |«      }| j                  | j                  fD ],  }|j                  |«      sŒt	        |t        |«      d «      c S  t	        |«      S )zTake bytes: emit string.N)r¿  rÈ  rÉ  Ú
startswithr   Úlen)rC   rÎ  rê  s      r;   Ú_strip_prefixz&BaseKeyValueStoreBackend._strip_prefix{  sZ   € à�j‰j˜‹oˆØ×)Ñ)¨4×+?Ñ+?Ó?ˆFØ�~‰~˜fÕ%Ü# C¬¨F«¨Ð$5Ó6Ò6ð @ô ˜CÓ Ð r=   c              #   ód   K  — |D ]'  \  }}|€Œ	| j                  |«      }|d   |v sŒ"||f–— Œ) y ­w)Nr   )r  )rC   Úvaluesr"  Úkr  s        r;   Ú_filter_readyz&BaseKeyValueStoreBackend._filter_readyƒ  s?   è ø€ Û‰HˆAˆuØÑ Ø×*Ñ*¨5Ó1�Ø˜‘? lÒ2Ø˜U˜(“Nñ	 ùs   ‚0Ž0§	0c                 ó.  — t        |d«      rC| j                  |j                  «       |«      D ��ci c]  \  }}| j                  |«      |“Œ c}}S | j                  t	        |«      |«      D ��ci c]  \  }}t        ||   «      |“Œ c}}S c c}}w c c}}w )NÚitems)r±   rò  rô  rî  Ú	enumerater   )rC   rð  rÑ  r"  rñ  ÚvÚis          r;   Ú_mget_to_resultsz)BaseKeyValueStoreBackend._mget_to_resultsŠ  s¥   € Ü�6˜7Ô#ð !×.Ñ.¨v¯|©|«~¸|ÔLôáL‘D�A�qð ×"Ñ" 1Ó% qÑ(ØLòð ð !×.Ñ.¬y¸Ó/@À,ÔOôáO‘D�A�qô ˜T !™WÓ% qÑ(ØOòð ùóùós   °BÁ.BNr¶  Tc	           
   #   ó>  K  — |€dn|}t        |t        «      r|n
t        |«      }	t        «       }
| j                  }|	D ]0  }	 ||   }|d   |v sŒt        |«      |f–— |
j	                  |«       Œ2 |	j                  |
«       d}|	rüt        |	«      }| j                  | j                  |D �cg c]  }| j                  |«      ‘Œ c}«      ||«      }|j                  |«       |	j                  |D �ch c]  }t        |«      ’Œ c}«       |j                  «       D ]  \  }}|� ||«       t        |«      |f–— Œ  |r||z  |k\  rt        d|› d�«      ‚|r |«        t        j                  |«       |dz  }|r||k\  ry |	rŒûy y # t
        $ r Y �ŒQw xY wc c}w c c}w ­w)Nr¶  r   r   zOperation timed out (ræ   rW   )r³   r¢  ro   r   r£  rÆ   Údifference_updaterî   rø  rÒ  rà  rL   rô  r   r/  r0  )rC   r¥  rœ  r�  rž  rŸ  r   Úmax_iterationsr"  ÚidsÚ
cached_idsrT  rŒ   ÚcachedÚ
iterationsrÑ  rñ  r€  rö  rÎ  r  s                        r;   r¤  z!BaseKeyValueStoreBackend.get_many˜  s·  è ø€ ð #Ð*‘3°ˆÜ$ X¬sÔ3‰h¼¸X»ˆÜ“Uˆ
Ø—‘ˆÛˆGð,Ø˜w™�ð ˜(Ñ# |Ò3Ü& wÓ/°Ð7Ò7Ø—N‘N 7Õ+ð ð 	×Ñ˜jÔ)Øˆ
ÙÜ˜“9ˆDØ×%Ñ% d§i¡iÙ:>ó1@Ù:>°Qð 26×1FÑ1FÀqÕ1IØ:>ñ1@ó 'AØBFÈóVˆAà�L‰L˜ŒOØ×!Ñ!¹AÓ">¹A°q¤<°¥?¸AÑ">Ô?ØŸg™gži‘
��UØÐ)Ù˜uÔ%Ü" 3Ó'¨Ð.Ó.ð (ñ ˜:¨Ñ0°GÒ;Ü"Ð%:¸7¸)À1Ð#EÓFÐFÙÙ”Ü�J‰J�xÔ Ø˜!‰OˆJÙ *°Ò">Øô# øô ò Úðüò1@ùò #?ùsO   ‚?FÁFÁFÁAFÂ+FÃ-FÃ0FÄA>FÆFÆ	FÆFÆFÆFc                 óD   — | j                  | j                  |«      «       y rA   )rØ  rà  r  s     r;   r:  z BaseKeyValueStoreBackend._forget¾  s   € Ø�‰�D×)Ñ)¨'Ó2Õ3r=   c                 óT  — | j                  ||||¬«      }t        |«      |d<   | j                  |«      }|d   t        j                  k(  r|S 	 | j                  | j                  |«      | j                  |«      |«       |S # t        $ r}	t        t        |	«      ||¬«      |	‚d }	~	ww xY w)N)r’   r“   r—   rR   rŒ   r   )r“   rŒ   )
r-  r   rR  r   rS  rÔ  rà  rà   r   r  )
rC   rŒ   r’   r“   r—   rR   r:   r�   Úcurrent_metaÚexs
             r;   r5  z&BaseKeyValueStoreBackend._store_resultÁ  sµ   € à×$Ñ$¨F¸%Ø/8À'ð %ó Kˆä& wÓ/ˆˆY‰ð ×.Ñ.¨wÓ7ˆà˜Ñ!¤V§^¡^Ò3ØˆMð	SØ× Ñ  ×!6Ñ!6°wÓ!?ÀÇÁÈTÓARÐTYÔZð ˆøô !ò 	SÜ#¤C¨£G°5À'ÔJÐPRÐRûð	Sús   Á1B Â	B'Â
B"Â"B'c                 ó¤   — | j                  | j                  |«      | j                  d|j                  «       i«      t        j
                  «       |S )Nr’   )rÔ  rä  rà   rö   r   rS  rc  s      r;   rb  z$BaseKeyValueStoreBackend._save_groupÙ  sA   € Ø×Ñ˜T×3Ñ3°HÓ=Ø!Ÿ[™[¨(°F·O±OÓ4EÐ)FÓGÌÏÉô	Yàˆr=   c                 óD   — | j                  | j                  |«      «       y rA   )rØ  rä  rZ  s     r;   rf  z&BaseKeyValueStoreBackend._delete_groupÞ  s   € Ø�‰�D×*Ñ*¨8Ó4Õ5r=   c                 óŽ   — | j                  | j                  |«      «      }|st        j                  ddœS | j	                  |«      S )ú$Get task meta-data for a task by id.N)r   r’   )ru   rà  r   ÚPENDINGr  r‹   s      r;   rR  z+BaseKeyValueStoreBackend._get_task_meta_forá  s>   € à�x‰x˜×-Ñ-¨gÓ6Ó7ˆÙÜ$Ÿn™n¸Ñ=Ð=Ø×!Ñ! $Ó'Ð'r=   c                 óª   — | j                  | j                  |«      «      }|r1| j                  |«      }|d   }t        || j                  «      |d<   |S y)r  r’   N)ru   rä  r  r#   r6   )rC   r˜   r�   r’   s       r;   r]  z'BaseKeyValueStoreBackend._restore_groupè  sU   € à�x‰x˜×.Ñ.¨xÓ8Ó9ˆñ Ø—;‘;˜tÓ$ˆDØ˜(‘^ˆFÜ.¨v°t·x±xÓ@ˆD�‰NØˆKð	 r=   c                 óz   — | j                  «         | j                  j                  |Ž }|j                  | ¬«       y )N©rÅ   )r„  r6   r   Úsaver†  s        r;   rÄ  z*BaseKeyValueStoreBackend._apply_chord_incrô  s6   € Ø×"Ñ"Ô$Ø,˜Ÿ™×,Ñ,Ð.@ÐAˆØ×Ñ 4ÐÕ(r=   c           	      ó˜  — | j                   sy | j                  }|j                  }|sy | j                  |«      }	 t	        j
                  || ¬«      }|€	 t        |«      ‚| j                  |«      }|j                  j                  d«      }|€t!        |«      }||kD  rt        j#                  d	|«       y ||k(  r¡t        |j                  |¬«      }
|j$                  r|j&                  n|j(                  }	 t+        «       5   ||j,                  j.                  d
¬«      }d d d «       	 |
j1                  «       |j=                  «        | j=                  |«       y | j?                  || j@                  «       y # t        $ rV}	t        |j                  |¬«      }
t        j                  d||	«       | j                  |
t        d|	›�«      «      cY d }	~	S d }	~	ww xY w# t        $ rW}	t        |j                  |¬«      }
t        j                  d||	«       | j                  |
t        d|› d�«      «      cY d }	~	S d }	~	ww xY w# 1 sw Y   �Œ xY w# t        $ r@}	t        j                  d||	«       | j                  |
t        d|	›�«      «       Y d }	~	�ŒUd }	~	ww xY w# t        $ r„}		 t3        |j5                  «       «      }dj7                  ||	«      }n# t8        $ r t;        |	«      }Y nw xY wt        j                  d||«       | j                  |
t        |«      «       Y d }	~	�Œåd }	~	ww xY w# |j=                  «        | j=                  |«       w xY w)Nr  r«   zChord %r raised: %rzCannot restore group: zChord callback %r raised: %rzGroupResult z no longer existsru  z/Chord counter incremented too many times for %rT)rœ  r¨  zCallback error: zDependency {0.id} raised {1!r})!rÃ  r6   r   rç  r   ÚrestorerÉ   r   r�   ÚloggerÚ	exceptionrÍ   r   rè   rÚ  ru   rí  Úwarningr’  Újoin_nativeré  r"   rf   Úresult_chord_join_timeoutÚdelayÚnextÚ_failed_join_reportÚformatÚStopIterationÚreprrØ  rÜ  rq   )rC   rR   r“   r’   r:   r6   ÚgidrÎ  Údepsr£   rÊ   ÚvalÚsizeÚjÚretÚculpritr½   s                    r;   r‘   z-BaseKeyValueStoreBackend.on_chord_part_returnù  sí  € Ø×#Ò#ØØ�h‰hˆØ�m‰mˆÙØØ×$Ñ$ SÓ)ˆð	Ü×&Ñ& s°DÔ9ˆDð ˆ<ðÜ  “oÐ%ð �i‰i˜‹nˆð �}‰}× Ñ  Ó.ˆØˆ<Ü�t“9ˆDØ�Š:Ü�N‰NÐLØõ à�DŠ[Ü& w§}¡}¸#Ô>ˆHØ$(×$=Ò$=�× Ò À4Ç9Á9ˆAð!Ü&Õ(ÙØ #§¡× BÑ BØ"&ô(�C÷ )ð Ø—N‘N 3Ô'ð —‘”Ø—‘˜CÕ à�K‰K˜˜TŸ\™\Õ*øôu ò 	Ü& w§}¡}¸#Ô>ˆHÜ×ÑÐ2°C¸Ô=Ø×.Ñ.ØÜÐ3°C°7Ð;Ó<óõ ûð	ûô ò Ü*¨7¯=©=¸cÔB�Ü× Ñ Ð!?ÀÀcÔJØ×2Ñ2ØÜ ¨c¨UÐ2CÐDÓEóõ ûðú÷( )Ñ(ûô$ !ò Ü×$Ñ$Ð%:¸CÀÔEØ×/Ñ/Ø Ü"Ð%5°c°WÐ#=Ó>÷ò ûðûô ò 
Jð'Ü" 4×#;Ñ#;Ó#=Ó>�GØ=×DÑDØ ó‘Føô %ò 'Ü! #›Y’Fð'úô × Ñ Ð!6¸¸VÔDØ×+Ñ+¨H´jÀÓ6H×IÒIûð
Jûð* —‘”Ø—‘˜CÕ úsÁ   »E8 ÁG Ã6
J Ä H=ÄJ Ä(I
 Å8	GÆAGÇGÇGÇ	H:Ç#AH5È/H:È5H:È=IÉJ É
	JÉ5JÊL& ÊJÊL& Ê	L#Ê +KËLËK#Ë LË"K#Ë#5LÌL& ÌL#Ì#L& Ì&#M	)r„   r�  )&rH   rI   rJ   r   r¿  rÈ  rÉ  rÊ  rÃ  r‚   rÁ  rÂ  ru   rÒ  rÔ  r¢  rØ  rÚ  rÜ  rà  rä  rç  rß  rî  r   r"  rò  rø  r¤  r:  r5  rb  rf  rR  r]  rÄ  r‘   Ú__classcell__)r‹  s   @r;   r¼  r¼  +  sÝ   ø„ Ø€EØ(€NØ,€OØ%€OØ€Oô6òPò@ò
Dò?ò$òDòFò=òóDóFóFóò!ð 28×1DÑ1Dó #ð ;A×:MÑ:Mó ð *.¸ÀDØ ¨dÀ4Ø$×1Ñ1ó$òL4ð /3óò0ò
6ò(ò
ò)ö
D+r=   r¼  c                   ó   — e Zd ZdZy)r/   z/Result backend base class for key/value stores.Nr¹  rB   r=   r;   r/   r/   @  s   „ Ú9r=   r/   c                   óH   — e Zd ZdZi Zd„ Zd„ Zd„ Zd„ ZexZ	xZ
xZZexZxZZy)r0   zDummy result backend.c                  ó   — y rA   rB   rŒ  s      r;   r‰   zDisabledBackend.store_resultI  rG   r=   c                 ó<   — t        t        j                  «       «      ‚rA   )r>  ÚE_CHORD_NO_BACKENDÚstriprN  s    r;   r„  z%DisabledBackend.ensure_chords_allowedL  s   € Ü!Ô"4×":Ñ":Ó"<Ó=Ð=r=   c                 ó<   — t        t        j                  «       «      ‚rA   )r>  ÚE_NO_BACKENDr'  rŒ  s      r;   Ú_is_disabledzDisabledBackend._is_disabledO  s   € Ü!¤,×"4Ñ"4Ó"6Ó7Ð7r=   c                  ó   — y)Nzdisabled://rB   rŒ  s      r;   r‡   zDisabledBackend.as_uriR  s   € Ør=   N)rH   rI   rJ   rº  ro   r‰   r„  r*  r‡   rA  r˜  rF  rD  Úget_task_meta_forr©  r¤  rB   r=   r;   r0   r0   D  sE   „ Ùà€Fòò>ò8òð ;GÐF€IÐF�
ÐF˜Z¨-Ø.:Ð:ÐÐ:˜¡8r=   r0   )Urº  rÏ   r/  rK  Úcollectionsr   r   r   r   Ú	functoolsr   Úweakrefr   Úbilliard.einfor	   Úkombu.serializationr
   r   r   r   ri   Úkombu.utils.encodingr   r   Úkombu.utils.urlr   Úcelery.exceptionsrë   r   r   r   r   Úcelery._stater   Úcelery.app.taskr   r   r   r   r   r   r   r   r   Úcelery.resultr   r    r!   r"   r#   Úcelery.utils.collectionsr$   Úcelery.utils.functionalr%   r&   Úcelery.utils.logr'   Úcelery.utils.serializationr(   r)   r*   r+   r,   Úcelery.utils.timer-   Ú__all__Ú	frozensetrÞ   rH   r  r|   r2   r)  r&  r<   rÇ   r?   rS   rU   rš  r.   ÚBaseDictBackendr¼  r/   r0   rB   r=   r;   Ú<module>r@     s-  ðñó Û Û Ý "ß 2Ñ 2Ý Ý 'å (ß DÑ DÝ ?ß ;Ý .ã ß >Ó >Ý *Ý #÷]÷ ]ó ]ç bÕ bÝ .ß ;Ý '÷Sõ Så >à
D€á! 8 *Ó-Ð á	�HÓ	€àÐ áÐ2ð 5ó Ð ð€ð
Ð òGô
/�ô /ò!÷B
Bñ B
B÷JKñ Kô\-�'Ð+ô -ð €ôR+˜wô R+ôj:Ð3Ð5Eô :ô;�kõ ;r=   