o
    ›¨Êhh3  ã                   @   sŠ  d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 d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mZ ddlmZ ddlmZmZmZmZm Z m!Z!m"Z" dZ#dZ$e %dej&¡Z'dZ(dZ)dZ*dd„ Z+G dd„ deƒZ,ej-fdd„Z.ej-fdd„Z/eddƒZ0e0e ee/e(ƒZ1e0eee.e)ƒZ2		d-dd „Z3G d!d"„ d"ƒZ4d#d$„ Z5d%d&„ Z6d'd(„ Z7d)d*„ Z8eefd+d,„Z9dS ).z?App utilities: Compat settings, bug-report tool, pickling apps.é    N)Ú
namedtuple)ÚMapping)Údeepcopy)Ú
ModuleType)Úmaybe_sanitize_url)ÚImproperlyConfigured)Úpyimplementation)ÚConfigurationView)Úimport_from_cwdÚqualnameÚsymbol_by_name©Úprettyé   )Ú_OLD_DEFAULTSÚ_OLD_SETTING_KEYSÚ_TO_NEW_KEYÚ_TO_OLD_KEYÚDEFAULTSÚSETTING_KEYSÚfind)ÚSettingsÚappstrÚ	bugreportÚfilter_hidden_settingsÚfind_appa   
software -> celery:{celery_v} kombu:{kombu_v} py:{py_v}
            billiard:{billiard_v} {driver_v}
platform -> system:{system} arch:{arch}
            kernel version:{kernel_version} imp:{py_i}
loader   -> {loader}
settings -> transport:{transport} results:{results}

{human_settings}
z=API|TOKEN|KEY|SECRET|PASS|PROFANITIES_LIST|SIGNATURE|DATABASEzk

Cannot mix new and old setting keys, please rename the
following settings to the new format:

{renames}

z·

Cannot mix new setting names with old setting names, please
rename the following settings to use the old format:

{renames}

Or change all of the settings to use the new format :)

z{replace:<36} -> {with_}c                 C   s   | j pd› dt| ƒd›�S )z1String used in __repr__ etc, to id app instances.Ú__main__z at z#x)ÚmainÚid)Úapp© r    úB/var/www/html/env/lib/python3.10/site-packages/celery/app/utils.pyr   A   ó   r   c                       sÊ   e Zd ZdZddœ‡ fdd„
Zedd„ ƒZedd	„ ƒZed
d„ ƒZedd„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZdd„ Zdd„ Zd*dd„Zd+dd„Zdd„ Zd d!„ Zd,d$d%„Zd,d&d'„Zd(d)„ Z‡  ZS )-r   zsCelery settings object.

    .. seealso:

        :ref:`configuration` for a full list of configuration keys.

    N)Údeprecated_settingsc                   s   t ƒ j|i |¤Ž || _d S ©N)ÚsuperÚ__init__r#   )Úselfr#   ÚargsÚkwargs©Ú	__class__r    r!   r&   O   s   
zSettings.__init__c                 C   ó   t j d¡p|  d¡p| jS )NÚCELERY_BROKER_READ_URLÚbroker_read_url©ÚosÚenvironÚgetÚ
broker_url©r'   r    r    r!   r.   T   ó
   ÿýzSettings.broker_read_urlc                 C   r,   )NÚCELERY_BROKER_WRITE_URLÚbroker_write_urlr/   r4   r    r    r!   r7   \   r5   zSettings.broker_write_urlc                 C   s   t j d¡p|  dd¡S )NÚCELERY_BROKER_URLr3   Úbroker_host©r0   r1   r2   Úfirstr4   r    r    r!   r3   d   ó   
þzSettings.broker_urlc                 C   s   t j d¡p|  dd¡S )NÚCELERY_RESULT_BACKENDÚresult_backendr:   r4   r    r    r!   r>   k   r<   zSettings.result_backendc                 C   ó   |   dd¡S )NÚtask_default_exchangeÚtask_default_queue©r;   r4   r    r    r!   r@   r   ó   þzSettings.task_default_exchangec                 C   r?   )NÚtask_default_routing_keyrA   rB   r4   r    r    r!   rD   y   rC   z!Settings.task_default_routing_keyc                 C   r?   )NÚtimezoneÚ	TIME_ZONErB   r4   r    r    r!   rE   €   s   zSettings.timezonec                 C   s   t i | jdd… ƒS )z7Return the current configuration, but without defaults.Néÿÿÿÿ)r   Úmapsr4   r    r    r!   Úwithout_defaults…   s   zSettings.without_defaultsc                 C   s   ||   ¡ v S r$   )rI   )r'   Úkeyr    r    r!   Úvalue_set_forŠ   s   zSettings.value_set_forÚ c                 C   s
   t ||ƒS )aÙ  Search for option by name.

        Example:
            >>> from proj.celery import app
            >>> app.conf.find_option('disable_rate_limits')
            ('worker', 'prefetch_multiplier',
             <Option: type->bool default->False>))

        Arguments:
            name (str): Name of option, cannot be partial.
            namespace (str): Preferred name-space (``None`` by default).
        Returns:
            Tuple: of ``(namespace, key, type)``.
        )r   ©r'   ÚnameÚ	namespacer    r    r!   Úfind_option�   s   
zSettings.find_optionÚceleryc                 C   s   | j |  ||¡dd… Ž S )z6Shortcut to ``get_by_parts(*find_option(name)[:-1])``.NrG   )Úget_by_partsrP   rM   r    r    r!   Úfind_value_for_keyž   r"   zSettings.find_value_for_keyc                 G   s   | d  dd„ |D ƒ¡ S )zÙReturn the current value for setting specified as a path.

        Example:
            >>> from proj.celery import app
            >>> app.conf.get_by_parts('worker', 'disable_rate_limits')
            False
        Ú_c                 s   ó   � | ]}|r|V  qd S r$   r    )Ú.0Úpartr    r    r!   Ú	<genexpr>ª   ó   € z(Settings.get_by_parts.<locals>.<genexpr>)Újoin)r'   Úpartsr    r    r!   rR   ¢   s   zSettings.get_by_partsc                 C   s$   z| d  W | S  t y   Y | S w )NÚ	__bogus__)ÚKeyErrorr4   r    r    r!   Úfinalize¬   s   
þþzSettings.finalizeFTc                    sJ   |rt ndd„ }ttƒ‰ |  ¡  |r| n|  ¡ }|‡ fdd„| ¡ D ƒƒS )Nc                 S   s   | S r$   r    )Úvr    r    r!   Ú<lambda>¶   s    z Settings.table.<locals>.<lambda>c                    s(   i | ]\}}|  d ¡s|ˆ vr||“qS )rT   )Ú
startswith©rV   Úkr_   ©Údict_membersr    r!   Ú
<dictcomp>º   s    þÿz"Settings.table.<locals>.<dictcomp>)r   ÚdirÚdictr^   rI   Úitems)r'   Úwith_defaultsÚcensoredÚfiltÚsettingsr    rd   r!   Útableµ   s   ÿzSettings.tablec                 C   s    d  dd„ |  ||¡ ¡ D ƒ¡S )z;Return a human readable text showing configuration changes.Ú
c                 s   s*   � | ]\}}|› d t |dd�› �V  qdS )z: é2   )ÚwidthNr   )rV   rJ   Úvaluer    r    r!   rX   Á   s
   € ÿ
ÿz$Settings.humanize.<locals>.<genexpr>)rZ   rn   ri   )r'   rj   rk   r    r    r!   Úhumanize¿   s   
þzSettings.humanizec                 C   sV   | j r)ddlm} ddlm} | j D ]}|jd|›d�dd|| › d�d	� qd
S dS )Nr   )r   )Ú
deprecatedzThe z settingz6.0.0zUse the z instead)ÚdescriptionÚremovalÚalternativeTF)r#   Úcelery.app.defaultsr   Úcelery.utilsrt   Úwarn)r'   r   rt   Úsettingr    r    r!   Úmaybe_warn_deprecated_settingsÅ   s   
þz'Settings.maybe_warn_deprecated_settings)rL   )rQ   )FT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   Úpropertyr.   r7   r3   r>   r@   rD   rE   rI   rK   rP   rS   rR   r^   rn   rs   r|   Ú__classcell__r    r    r*   r!   r   F   s4    










	

r   c                 C   ó
   || | ƒS r$   r    ©rJ   Úconvertr    r    r!   Ú_new_key_to_oldÔ   ó   
r†   c                 C   rƒ   r$   r    r„   r    r    r!   Ú_old_key_to_newØ   r‡   rˆ   Úsettings_info_t)Údefaultsr…   Úkey_tÚ	mix_errorc                    sp  |si n|}|st ƒ n|}|stn|}|stn|}| }| d u r$|i }} t | ¡ ƒ| ‰ ˆ  |¡}ˆ  |¡}d ‰|rNt|‰}	|rNt|ƒt|ƒkrNt|‰}	|rgˆsWt|‰}	|rft|ƒt|ƒkrft|‰}	nt|‰}	|rttt ƒ ‰}	‡ ‡fdd„|	D ƒ}
|
r•tˆj	j
d ‡fdd„t|
ƒD ƒ¡d�ƒ‚‡fdd„| ¡ D ƒ}ttˆjƒfi |¤Ž}t|| |gttf||d	�S )
Nc                    s   h | ]}ˆj | ˆ vr|’qS r    )r…   ©rV   rJ   ©ÚhaveÚinfor    r!   Ú	<setcomp>  s    z"detect_settings.<locals>.<setcomp>ro   c                 3   s$   � | ]}t j|ˆ j| d �V  qdS ))ÚreplaceÚwith_N)ÚFMT_REPLACE_SETTINGÚformatr…   r�   ©r�   r    r!   rX     s
   € ÿ
ÿz"detect_settings.<locals>.<genexpr>)Úrenamesc                    s    i | ]\}}ˆ j  ||¡|“qS r    )r…   r2   rb   r–   r    r!   rf     s     z#detect_settings.<locals>.<dictcomp>)r#   Úprefix)Úsetr   r   ÚkeysÚintersectionÚ_settings_infoÚlenÚ_old_settings_infor   rŒ   r•   rZ   Úsortedri   rh   r   rŠ   r   rˆ   r†   )ÚconfÚpreconfÚignore_keysr˜   Úall_keysÚold_keysÚsourceÚ	is_in_newÚ	is_in_oldÚleftÚreally_leftrŠ   r    rŽ   r!   Údetect_settingsè   sJ   






€
þürª   c                   @   s<   e Zd ZdZdd„ Zdd„ Zdd„ Z	dd	d
„Zdd„ ZdS )Ú
AppPicklerz*Old application pickler/unpickler (< 3.1).c                 G   s2   | j |Ž }| j|fi |¤Ž}| j|fi |¤Ž |S r$   )Úbuild_kwargsÚ	constructÚprepare)r'   Úclsr(   r)   r   r    r    r!   Ú__call__$  s   
zAppPickler.__call__c                 K   s   |j  |d ¡ d S )NÚchanges)r    Úupdate)r'   r   r)   r    r    r!   r®   *  s   zAppPickler.preparec                 G   s
   | j |Ž S r$   )Úbuild_standard_kwargs)r'   r(   r    r    r!   r¬   -  r‡   zAppPickler.build_kwargsNc                 C   s   ||||||||d|
dœ
S )NF)
r   ÚloaderÚbackendÚamqpr±   ÚeventsÚlogÚcontrolÚset_as_currentÚconfig_sourcer    )r'   r   r±   r´   rµ   r¶   r·   r¸   r¹   Úaccept_magic_kwargsr»   r    r    r!   r³   0  s
   ýz AppPickler.build_standard_kwargsc                 K   s   |di |¤ŽS )Nr    r    )r'   r¯   r)   r    r    r!   r­   8  s   zAppPickler.constructr$   )	r}   r~   r   r€   r°   r®   r¬   r³   r­   r    r    r    r!   r«   !  s    
þr«   c                 G   s   |ƒ | g|¢R Ž S )zRebuild app for versions 2.5+.r    )r¯   Úpicklerr(   r    r    r!   Ú_unpickle_app<  s   r¾   c                 C   s   d|d< | di |¤ŽS )zRebuild app for versions 3.1+.Frº   Nr    r    )r¯   r)   r    r    r!   Ú_unpickle_app_v2A  s   r¿   c                    s    ddd„‰ ‡ fdd„|   ¡ D ƒS )zFilter sensitive settings.ú********c                 S   sn   t |tƒr	t|ƒS t | tƒr5t | ¡r|S d|  ¡ v r)ddlm} ||ƒj	|d�S d|  ¡ v r5t
||d�S |S )Nr3   r   )Ú
Connection)Úmaskrµ   )Ú
isinstancer   r   ÚstrÚHIDDEN_SETTINGSÚsearchÚlowerÚkomburÁ   Úas_urir   )rJ   rr   rÂ   rÁ   r    r    r!   Úmaybe_censorI  s   


z,filter_hidden_settings.<locals>.maybe_censorc                    s   i | ]
\}}|ˆ ||ƒ“qS r    r    rb   ©rÊ   r    r!   rf   W  s    z*filter_hidden_settings.<locals>.<dictcomp>N)rÀ   )ri   )r    r    rË   r!   r   G  s   
r   c                 C   sÂ   ddl }ddl}ddl}z|  ¡ }d |jj|j ¡ ¡}|j}W n t	y-   d }}Y nw t
jt ¡ d dd„ t ¡ D ƒ¡t ¡ tƒ |j|j|jt ¡ ||t| jjpTdƒ| j ¡ t| jjƒd	�S )
z=Return a string containing information useful in bug-reports.r   Nz{}:{}rL   z, c                 s   rU   r$   r    )rV   Úxr    r    r!   rX   k  rY   zbugreport.<locals>.<genexpr>Údisabled)ÚsystemÚarchÚkernel_versionÚpy_iÚcelery_vÚkombu_vÚ
billiard_vÚpy_vÚdriver_vÚ	transportÚresultsÚhuman_settingsr´   )ÚbilliardrÈ   rQ   Ú
connectionr•   r×   Údriver_nameÚdriver_versionÚtransport_clsÚ	ExceptionÚBUGREPORT_INFOÚ	_platformrÎ   rZ   ÚarchitectureÚreleaser   ÚVERSION_BANNERÚ__version__Úpython_versionr   r    r>   rs   r   r´   r+   )r   rÚ   rÈ   rQ   ÚconnrÖ   r×   r    r    r!   r   Z  s6   
ÿ
ÿ
ór   c                 C   s  ddl m} z|| |d�}W n ty   || ƒ}Y nw t|tƒrŠd| vrŠz|j}t|tƒr1tƒ ‚W |S  ty‰   z|j}t|tƒrGtdƒ‚W | Y S  tyˆ   t|ddƒrqzt| › d�||d	�W  Y  Y S  t	yp   Y nw t
|ƒ ¡ D ]}t||ƒr†|   Y  Y S qw‚ w w |S )
zFind app by name.r   )ÚCelery)Úimpú:zBattribute 'celery' is the celery module not the instance of celeryÚ__path__Nz.celery)r   ré   )Úbaserè   ÚAttributeErrorrÃ   r   r   rQ   Úgetattrr   ÚImportErrorÚvarsÚvalues)r   r   ré   rè   ÚsymÚfoundÚsuspectr    r    r!   r   z  sP   þ
ÿê
ÿÿòþÿ
ÿôúr   )NNNNN):r€   r0   Úplatformrá   ÚreÚcollectionsr   Úcollections.abcr   Úcopyr   Útypesr   Úkombu.utils.urlr   Úcelery.exceptionsr   Úcelery.platformsr   Úcelery.utils.collectionsr	   Úcelery.utils.importsr
   r   r   Úcelery.utils.textr   rŠ   r   r   r   r   r   r   r   Ú__all__rà   ÚcompileÚ
IGNORECASErÅ   ÚE_MIX_OLD_INTO_NEWÚE_MIX_NEW_INTO_OLDr”   r   r   r2   r†   rˆ   Ú_settings_info_trœ   rž   rª   r«   r¾   r¿   r   r   r   r    r    r    r!   Ú<module>   sZ    $þ	 
ÿÿ
ÿ9 