o
    Ýîi…+  ã                   @   s¬   d dl Z e  d¡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 G dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ deƒZdS )é    NÚspyne)Ú
LogicError)Úsix)ÚDefaultAttrDict)ÚServiceÚServiceBaseBase)Ú
DEFAULT_NSc                   @   ó   e Zd ZdS )ÚBODY_STYLE_WRAPPEDN©Ú__name__Ú
__module__Ú__qualname__© r   r   úP/var/www/html/LicenciasMIG/venv/lib/python3.10/site-packages/spyne/descriptor.pyr
      ó    r
   c                   @   r	   )ÚBODY_STYLE_EMPTYNr   r   r   r   r   r      r   r   c                   @   r	   )ÚBODY_STYLE_BARENr   r   r   r   r   r       r   r   c                   @   r	   )ÚBODY_STYLE_OUT_BARENr   r   r   r   r   r   !   r   r   c                   @   r	   )ÚBODY_STYLE_EMPTY_OUT_BARENr   r   r   r   r   r   "   r   r   c                   @   sž   e Zd ZdZdd„ Zdd„ Zedd„ ƒZedd	„ ƒZe	d
d„ ƒZ
dd„ Ze	dd„ ƒZdd„ Zddd„Zedd„ ƒZejdd„ ƒZedd„ ƒZejdd„ ƒZdS )ÚMethodDescriptorzˆThis class represents the method signature of an exposed service. It is
    produced by the :func:`spyne.decorator.srpc` decorator.
    c                 C   sh  || _ 	 |  ¡  || _	 || _	 || _	 d | _	 |tu r!|jj| _| jd u r,| j 	¡ | _|| _
	 || _	 || _|| _|| _|| _|| _	 |	| _	 |
| _	 || _	 tdi |¤Ž | _| _	 || _	 || _	 || _	 || _	 || _	 || _	 || _	 || _	 || _|d u r‹|dur‹t dƒ‚|| _!	 || _"	 || _#	 || _$	 || _%	 || _&	 | jd ur²| j% '| jj(¡ d S d S )NFz/default_on_null is only to be used inside @mrpcr   ))Ú _MethodDescriptor__real_functionÚreset_functionÚoperation_nameÚinternal_key_suffixÚ
in_messageÚnamer   Ú
AttributesÚsub_nameÚget_type_nameÚout_messageÚdocÚis_callbackÚis_asyncÚmtomÚ	port_typeÚ	in_headerÚ
out_headerÚfaultsÚno_ctxr   ÚudpÚuddÚ	class_keyÚauxÚpatternsÚ
body_styleÚargsÚno_selfÚservice_classÚparent_classÚdefault_on_nullr   ÚtranslationsÚhrefÚwhenÚstatic_whenÚevent_managersÚloggedÚappendÚevent_manager)ÚselfÚfunctionr   r    r!   r"   r#   r$   r&   r'   r(   r3   r%   r)   r+   r,   r-   r.   r/   r0   r   r1   r5   r7   r8   r2   r6   r   r4   r9   r:   r   r   r   Ú__init__*   s†   

	
ÿzMethodDescriptor.__init__c                 C   s(   |du rd}| j dur| j  ||¡S |S )z‘
        :param locale: locale string
        :param default: default string if no translation found
        :returns: translated string
        NÚen_US)r5   Úget)r=   ÚlocaleÚdefaultr   r   r   Ú	translate½   s
   
zMethodDescriptor.translatec                 C   s*   | j  ¡ tus	J ‚d| j  ¡ | j  ¡ f S )z2The function identifier in '{namespace}name' form.ú{%s}%s)r   Úget_namespacer   r   ©r=   r   r   r   ÚkeyÊ   s   ÿzMethodDescriptor.keyc                 C   s|   | j }|dur'|j}|j}| j}| dd¡d |kr!d|||f S d||f S | j}|dur<d| ¡ t | j	¡| j
f S dS )z;The internal function identifier in '{namespace}name' form.NÚ.é   r   z	{%s}%s.%srE   z{%s}%s%s)r3   r   r   r   Úsplitr2   Úget_internal_keyr   Úget_function_namer>   r   )r=   ÚpcÚmnÚonÚdnÚscr   r   r   Úinternal_keyÓ   s   
þÿzMethodDescriptor.internal_keyc                 C   s   t | tƒr	|  ¡ S | jS ©N)Ú
issubclassr   Úget_service_namer   ©Úclsr   r   r   Úget_owner_nameê   s   
zMethodDescriptor.get_owner_namec                 C   sn   t |tƒrd |j|  |¡| j¡S | ¡ pd}| ¡ }| j}| dd¡d |kr0d 	|||f¡S d 	||f¡S )Nz{}.{}.{}Ú__none__rI   rJ   r   )
rU   r   Úformatr   rY   r   rF   r   rK   Újoin)r=   rX   rO   rP   rQ   r   r   r   Úgen_interface_keyð   s   
ÿz"MethodDescriptor.gen_interface_keyc                 C   s   d  dd„ | j d¡D ƒ¡S )NrI   c                 S   s   g | ]	}|  d ¡s|‘qS )Ú_)Ú
startswith)Ú.0Úfragr   r   r   Ú
<listcomp>  s    
ÿz;MethodDescriptor._get_class_module_name.<locals>.<listcomp>)r\   r   rK   rW   r   r   r   Ú_get_class_module_name  s   z'MethodDescriptor._get_class_module_namec                 C   s   | j ttttfv S rT   )r/   r   r   r   r   rG   r   r   r   Úis_out_bare  s
   ýzMethodDescriptor.is_out_bareNc                 C   s   |d kr|| _ | j | _d S rT   )r   r>   )r=   Úvalr   r   r   r     s   zMethodDescriptor.reset_functionc                 C   ó   | j S rT   )Ú_MethodDescriptor__in_headerrG   r   r   r   r&     ó   zMethodDescriptor.in_headerc                 C   ó\   ddl m} zt||ƒ}W n ty   d}Y nw |r|f}|d u s)t|tƒs)J ‚|| _d S ©Nr   )Ú	ModelBaseF)Úspyne.model._baserk   rU   Ú	TypeErrorÚ
isinstanceÚtuplerg   )r=   r&   rk   Úis_modelr   r   r   r&     ó   ÿ
c                 C   rf   rT   )Ú_MethodDescriptor__out_headerrG   r   r   r   r'   %  rh   zMethodDescriptor.out_headerc                 C   ri   rj   )rl   rk   rU   rm   rn   ro   rr   )r=   r'   rk   rp   r   r   r   r'   )  rq   rT   )r   r   r   Ú__doc__r?   rD   ÚpropertyrH   rS   ÚstaticmethodrY   r]   rc   rd   r   r&   Úsetterr'   r   r   r   r   r   %   s0     







r   )ÚloggingÚ	getLoggerÚloggerr   r   Ú
spyne.utilr   r   Úspyne.servicer   r   Úspyne.const.xmlr   r
   r   r   r   r   Úobjectr   r   r   r   r   Ú<module>   s   
