o
    èó·i“* ã                   @   s¢  d dl 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 d dlmZ d dl	m
Z
mZmZmZmZmZmZ d dlmZ d dlm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! G dd„ de"ƒZ#G dd„ de"ƒZ$G dd„ de"ƒZ%dd„ Z&dd„ Z'd+dd„Z(d+dd„Z)G dd„ de"ƒZ*G dd„ de"ƒZ+G dd„ de"ƒZ,G d d!„ d!e"ƒZ-G d"d#„ d#e"ƒZ.G d$d%„ d%e"ƒZ/d&ee fd'd(„Z0G d)d*„ d*e"ƒZ1dS ),é    N)ÚPath)Úpformat)ÚUnionÚDictÚListÚOptionalÚIOÚAnyÚTuple)ÚSequence)Ú
FormatCode)ÚInvalidPayload)Úhlval)ÚSchema)ÚBaseType)ÚFieldc                   @   s0  e Zd ZdZdZejZejZejZej	Z	ej
Z
ejZejZejZejZejZejZejZejZejejej	ej
ejejejejejejejejgZejZejZejZejejejgZi ejd“ejd“ejd“ej	d“ej
d“ejd“ejd“ejd“ejd“ejd“ejd“ejd“ejd“ejd“ejd	“ejd
“Zejeejeejeej	eej
eejeejeejeejeejeejeejeejeejeejeiZejdejdej	dej
dejdejdejdejdejdejdejdiZ ejdejdej	dej
dejdejdejdejdejdejdejd iZ!i ejd!“ejd"“ejd#“ej	d$“ej
d%“ejd&“ejd'“ejd(“ejd)“ejd*“ejd+“ejd,“ejd-“ejd.“ejd/“ejd
“Z"i d!ej“d"ej“d#ej“d$ej	“d%ej
“d&ej“d'ej“d(ej“d)ej“d*ej“d+ej“d,ej“d-ej“d.ej“d/ej“d
ej“Z#	0	0dWd1d2d3d4d5ed6ed7ed8e$e d9e$e fd:d;„Z%e&dXd=d>„ƒZ'e&dYd?d@„ƒZ(e&d<efdAdB„ƒZ)e&d<efdCdD„ƒZ*e&d<efdEdF„ƒZ+e&d<e$e fdGdH„ƒZ,e&d<e$e fdIdJ„ƒZ-	K	LdZdMedNe$e. dOe$e dPed<ef
dQdR„Z/d<efdSdT„Z0d<e.ee1f fdUdV„Z2d0S )[ÚFbsTypez—
    Flatbuffers type.

    See: https://github.com/google/flatbuffers/blob/11a19887053534c43f73e74786b46a615ecbf28e/reflection/reflection.fbs#L33
    )Ú_repositoryÚ_schemaÚ	_basetypeÚ_elementÚ_indexÚ_objtypeÚ_elementtypeÚintÚboolÚbytesÚfloatÚstrr   Úobjectr   Z	BoolFlagsZ	Int8FlagsZ
Uint8FlagsZ
Int16FlagsZUint16FlagsZ
Int32FlagsZUint32FlagsZ
Int64FlagsZUint64FlagsZFloat32FlagsZFloat64FlagsZPrependBoolSlotZPrependInt8SlotZPrependUint8SlotZPrependInt16SlotZPrependUint16SlotZPrependInt32SlotZPrependUint32SlotZPrependInt64SlotZPrependUint64SlotZPrependFloat32SlotZPrependFloat64SlotÚUTypeÚBoolÚByteÚUByteÚShortÚUShortÚIntÚUIntÚLongÚULongÚFloatÚDoubleÚStringÚVectorÚObjNÚ
repositoryÚFbsRepositoryÚschemaÚ	FbsSchemaÚbasetypeÚelementÚindexÚobjtypeÚelementtypec                 C   s.   || _ || _|| _|| _|| _|| _|| _d S ©N)r   r   r   r   r   r   r   )Úselfr/   r1   r3   r4   r5   r6   r7   © r:   úZC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\autobahn/xbr/_schema.pyÚ__init__É   s   
zFbsType.__init__Úreturnc                 C   ó   | j S r8   ©r   ©r9   r:   r:   r;   r/   Ù   ó   zFbsType.repositoryc                 C   r>   r8   ©r   r@   r:   r:   r;   r1   Ý   rA   zFbsType.schemac                 C   r>   )z:
        Flatbuffers base type.

        :return:
        N)r   r@   r:   r:   r;   r3   á   ó   zFbsType.basetypec                 C   r>   )z>
        Only if basetype == Vector

        :return:
        N)r   r@   r:   r:   r;   r4   ê   rC   zFbsType.elementc                 C   r>   )zñ
        If basetype == Object, index into "objects".
        If base_type == Union, UnionType, or integral derived from an enum, index into "enums".
        If base_type == Vector && element == Union or UnionType.

        :return:
        N)r   r@   r:   r:   r;   r5   ó   s   	zFbsType.indexc                 C   sH   | j tjkr!| jdu r!| jtjkr| jj| j j	| _| jS J dƒ‚| jS )z]
        If basetype == Vector, fully qualified element type name.

        :return:
        NFÚFIXME)
r   r   r-   r   r   r.   r   Ú
objs_by_idr   Únamer@   r:   r:   r;   r7   þ   s   	ÿzFbsType.elementtypec                 C   s.   | j tjkr| jdu r| jj| j j| _| jS )z\
        If basetype == Object, fully qualified object type name.

        :return:
        N)r   r   r.   r   r   rE   r   rF   r@   r:   r:   r;   r6     s   	zFbsType.objtypeTFÚlanguageÚattrsÚrequiredÚobjtype_as_stringc                 C   sP  |dkrŸd}| j tjkr7| jtjkr|rd|v rd}ndd}na| jr-d | j d¡d ¡}nRd tj| j ¡}nH| j tj	krS| jrI| j d¡d }n6d tj| j ¡}n,| j tj
tjtjg v ru| j tjkrn|rnd	|v rnd
}ntj| j  }n
td | j | j¡ƒ‚|r“| j tj	kr“|rŽd |¡S d |¡S |ršd |¡S d |¡S td || j¡ƒ‚)z…

        :param language:
        :param attrs:
        :param required:
        :param objtype_as_string:
        :return:
        ÚpythonNÚuuidz	uuid.UUIDr   zList[{}]Ú.éÿÿÿÿÚ	timestampznp.datetime64zAFIXME: implement mapping of FlatBuffers type "{}" to Python in {}ú'{}'úOptional['{}']ú{}úOptional[{}]z9cannot map FlatBuffers type to target language "{}" in {})r3   r   r-   r4   r#   r6   ÚformatÚsplitÚFBS2PYr.   ÚSCALAR_TYPESr    r   r)   ÚNotImplementedErrorÚmapÚRuntimeError)r9   rG   rH   rI   rJ   Z_mapped_typer:   r:   r;   rY     s:   
ÿ



zFbsType.mapc                 C   ó   d  t |  ¡ ¡¡S ©Nú
{}
©rT   Úpprintr   Úmarshalr@   r:   r:   r;   Ú__str__]  ó   zFbsType.__str__c                 C   s.   | j  | jd ¡| j  | jd ¡| j| jdœ}|S )N)r3   r4   r5   r6   )ÚFBS2STRÚgetr3   r4   r5   r6   )r9   Úobjr:   r:   r;   r`   `  s   üzFbsType.marshal)NN©r=   r0   ©r=   r2   )NTF)3Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Ú	_BaseTyper    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   rW   r-   r.   r   ZSTRUCTURED_TYPESrV   r   r   r   r   ÚlistÚdictÚFBS2PY_TYPEZ	FBS2FLAGSZFBS2PREPENDrc   ZSTR2FBSr   r<   Úpropertyr/   r1   r3   r4   r5   r7   r6   r   rY   ra   r	   r`   r:   r:   r:   r;   r   2   s®   õþÿþýüûúùø	÷
öõôóòñðñõõÿþýüûúùø	÷
öõôóòñðÿþýüûúùø	÷
öõôóòñðùÿþýüûú
ù
ÿÿ
ÿ@r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFbsAttributec                 C   s   d S r8   r:   r@   r:   r:   r;   r<   l  s   zFbsAttribute.__init__c                 C   s   d  ¡ S )NÚ )rT   r@   r:   r:   r;   ra   o  s   zFbsAttribute.__str__N)rh   ri   rj   r<   ra   r:   r:   r:   r;   rr   k  s    rr   c                   @   sN  e Zd ZdZdddddededed	ed
edededede	ee
f defdd„Zed0dd„ƒZed1dd„ƒZedefdd„ƒZedefdd„ƒZedefdd„ƒZedefdd„ƒZedefdd „ƒZedefd!d"„ƒZedefd#d$„ƒZedefd%d&„ƒZede	ee
f fd'd(„ƒZedefd)d*„ƒZdefd+d,„Zde	eef fd-d.„Zd/S )2ÚFbsField©r   r   Ú_nameÚ_typeÚ_idÚ_offsetÚ_default_intÚ_default_realÚ_deprecatedÚ	_requiredÚ_attrsÚ_docsr/   r0   r1   r2   rF   ÚtypeÚidÚoffsetÚdefault_intÚdefault_realÚ
deprecatedrI   rH   Údocsc                 C   sL   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _d S r8   ru   )r9   r/   r1   rF   r€   r�   r‚   rƒ   r„   r…   rI   rH   r†   r:   r:   r;   r<   w  s   
zFbsField.__init__r=   c                 C   r>   r8   r?   r@   r:   r:   r;   r/   ‘  rA   zFbsField.repositoryc                 C   r>   r8   rB   r@   r:   r:   r;   r1   •  rA   zFbsField.schemac                 C   r>   r8   ©rv   r@   r:   r:   r;   rF   ™  rA   zFbsField.namec                 C   r>   r8   )rw   r@   r:   r:   r;   r€   �  rA   zFbsField.typec                 C   r>   r8   ©rx   r@   r:   r:   r;   r�   ¡  rA   zFbsField.idc                 C   r>   r8   )ry   r@   r:   r:   r;   r‚   ¥  rA   zFbsField.offsetc                 C   r>   r8   )rz   r@   r:   r:   r;   rƒ   ©  rA   zFbsField.default_intc                 C   r>   r8   )r{   r@   r:   r:   r;   r„   ­  rA   zFbsField.default_realc                 C   r>   r8   )r|   r@   r:   r:   r;   r…   ±  rA   zFbsField.deprecatedc                 C   r>   r8   )r}   r@   r:   r:   r;   rI   µ  rA   zFbsField.requiredc                 C   r>   r8   ©r~   r@   r:   r:   r;   rH   ¹  rA   zFbsField.attrsc                 C   r>   r8   ©r   r@   r:   r:   r;   r†   ½  rA   zFbsField.docsc                 C   r[   r\   r^   r@   r:   r:   r;   ra   Á  rb   zFbsField.__str__c                 C   sd   | j | jr
| j ¡ nd | j| j| j| j| j| ji | j	dœ
}| j
r0| j
 ¡ D ]
\}}||d |< q%|S )N)
rF   r€   r�   r‚   rƒ   r„   r…   rI   rH   r†   rH   )rv   rw   r`   rx   ry   rz   r{   r|   r}   r   r~   Úitems©r9   re   ÚkÚvr:   r:   r;   r`   Ä  s   özFbsField.marshalNrf   rg   )rh   ri   rj   rl   r   r   r   r   r   r   rr   r<   rq   r/   r1   rF   r€   r�   r‚   rƒ   r„   r…   rI   rH   r†   ra   r	   r`   r:   r:   r:   r;   rt   s  sj    ÿþýüûúùø	÷
ö
õ
ôrt   c                 C   sd   i }t |  ¡ ƒD ]'}|  |¡}| ¡ }|r| d¡}| ¡ }|r%| d¡}||vs+J ‚|||< q|S )NÚutf8)ÚrangeZAttributesLengthZ
AttributesÚKeyÚdecodeÚValue)re   rH   ÚjZfbs_attrZattr_keyÚ
attr_valuer:   r:   r;   Ú
parse_attr×  s   



r–   c                 C   sN   g }t |  ¡ ƒD ]}|  |¡}|r| d¡ ¡ }| |¡ qd |¡ ¡ }|S )Nr�   ú )r�   ZDocumentationLengthZDocumentationr’   ÚstripÚappendÚjoin)re   r†   r”   Zdoc_liner:   r:   r;   Ú
parse_docsæ  s   

€r›   c                 C   s  i }i }t | ¡ ƒD ]e}| |¡}| ¡ }|r| d¡}t| ¡ ƒ}	|||	< | ¡ }
d }t| ||
 	¡ |
 
¡ |
 ¡ |d�}t| ||||	| ¡ | ¡ | ¡ | ¡ | ¡ t|ƒt|ƒd�}||vskJ d ||	t| ¡ ƒ¡ƒ‚|||< q
g }t t|ƒƒD ]}| |||  ¡ qx||fS )Nr�   )r/   r1   r3   r4   r5   r6   )r/   r1   rF   r€   r�   r‚   rƒ   r„   r…   rI   rH   r†   z,field "{}" with id "{}" already in fields {})r�   ZFieldsLengthZFieldsÚNamer’   r   ZIdÚTyper   r   ÚElementÚIndexrt   ZOffsetZDefaultIntegerZDefaultRealZ
DeprecatedZRequiredr–   r›   rT   ÚsortedÚkeysÚlenr™   )r/   r1   re   Úobjs_lstÚfields_by_nameZfield_id_to_namer”   Z	fbs_fieldÚ
field_nameZfield_idZfbs_field_typer   Z
field_typeÚfieldÚfields_by_idÚir:   r:   r;   Úparse_fieldsò  sP   	

	ûõ
þ
r©   c           &      C   s  i }i }t | ¡ ƒD ]à}| |¡}| ¡ }|r| d¡}|}	| ¡ }
|
 ¡ }|r-| d¡}|
 ¡ }|r8| d¡}|
 ¡ }|
 ¡ }|
 	¡ }t
|
ƒ}t|
ƒ}t| ||
|d�\}}t| ||||||||||d�}| ¡ }| ¡ }|rt| d¡}| ¡ }|r| d¡}| ¡ }| ¡ }| 	¡ }t
|ƒ}t|ƒ}t| |||d�\}}t| ||||||||||d�}t
|ƒ} t|ƒ}!t| |||	||| |!d�}"||vsÑJ d ||	t| ¡ ƒ¡ƒ‚|"||< |	|vsæJ d ||	t| ¡ ƒ¡ƒ‚|||	< q
g }#t| ¡ ƒD ]	\}$}%|# |%¡ qó|#}||fS )Nr�   ©r£   ©r/   r1   Údeclaration_filerF   Úfieldsr§   Ú	is_structÚ	min_alignÚbytesizerH   r†   )r/   r1   rF   r�   ÚrequestÚresponser†   rH   z*call "{}" with id "{}" already in calls {}z+call "{}" with id " {}" already in calls {})r�   ZCallsLengthZCallsrœ   r’   ÚRequestÚDeclarationFileÚIsStructÚMinalignÚBytesizer›   r–   r©   Ú	FbsObjectÚResponseÚ
FbsRPCCallrT   r    r¡   r‹   r™   )&r/   r1   Úsvc_objr£   ÚcallsÚcalls_by_idr”   Zfbs_callZ	call_nameZcall_idZfbs_call_reqZcall_req_nameZcall_req_declaration_fileZcall_req_is_structZcall_req_min_alignZcall_req_bytesizeZcall_req_docsZcall_req_attrsZcall_req_fieldsZcall_fields_by_idZcall_reqZfbs_call_respZcall_resp_nameZcall_resp_declaration_fileZcall_resp_is_structZcall_resp_min_alignZcall_resp_bytesizeZcall_resp_docsZcall_resp_attrsZcall_resp_fieldsZcall_resp_fields_by_idZ	call_respZ	call_docsZ
call_attrsÚcallÚresÚ_Úvaluer:   r:   r;   Úparse_calls<  s¤   



ö

öù	
ÿ
ÿ
rÂ   c                   @   s�  e Zd ZdZdddddededeeef d	ee d
ede	de	deee
f defdd„Zd8dedee dedefdd„Zdedefdd„Zed9dd„ƒZed:dd„ƒZedefdd „ƒZedefd!d"„ƒZedeeef fd#d$„ƒZedee fd%d&„ƒZedefd'd(„ƒZede	fd)d*„ƒZede	fd+d,„ƒZedeee
f fd-d.„ƒZedefd/d0„ƒZdefd1d2„Zdeeef fd3d4„Zed;d6d7„ƒZd5S )<r¸   )r   r   Ú_declaration_filerv   Ú_fieldsÚ_fields_by_idÚ
_is_structÚ
_min_alignÚ	_bytesizer~   r   Ú
modulenameÚ	classnameÚmodule_relimportr/   r0   r1   r2   r¬   rF   r­   r§   r®   r¯   r°   rH   r†   c                 C   óF   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
d S r8   )r   r   rÃ   rv   rÄ   rÅ   rÆ   rÇ   rÈ   r~   r   )r9   r/   r1   r¬   rF   r­   r§   r®   r¯   r°   rH   r†   r:   r:   r;   r<   š  s   
zFbsObject.__init__TFrG   rI   rJ   r=   c                 C   sR   |dkr&| j  d¡d }|r|rd |¡S d |¡S |r!d |¡S d |¡S tƒ ‚)NrK   rM   rN   rP   rQ   rR   rS   ©rv   rU   rT   rX   )r9   rG   rI   rJ   Úklassr:   r:   r;   rY   ²  s   



zFbsObject.mapc                 C   s:   |dkr| j  d¡d }| j  d¡d }d ||¡S tƒ ‚)NrK   rM   éþÿÿÿrN   zfrom {} import {}rÍ   )r9   rG   ÚbaserÎ   r:   r:   r;   Ú
map_importÅ  s
   zFbsObject.map_importc                 C   r>   r8   r?   r@   r:   r:   r;   r/   Í  rA   zFbsObject.repositoryc                 C   r>   r8   rB   r@   r:   r:   r;   r1   Ñ  rA   zFbsObject.schemac                 C   r>   r8   ©rÃ   r@   r:   r:   r;   r¬   Õ  rA   zFbsObject.declaration_filec                 C   r>   r8   r‡   r@   r:   r:   r;   rF   Ù  rA   zFbsObject.namec                 C   r>   r8   )rÄ   r@   r:   r:   r;   r­   Ý  rA   zFbsObject.fieldsc                 C   r>   r8   )rÅ   r@   r:   r:   r;   r§   á  rA   zFbsObject.fields_by_idc                 C   r>   r8   )rÆ   r@   r:   r:   r;   r®   å  rA   zFbsObject.is_structc                 C   r>   r8   )rÇ   r@   r:   r:   r;   r¯   é  rA   zFbsObject.min_alignc                 C   r>   r8   )rÈ   r@   r:   r:   r;   r°   í  rA   zFbsObject.bytesizec                 C   r>   r8   r‰   r@   r:   r:   r;   rH   ñ  rA   zFbsObject.attrsc                 C   r>   r8   rŠ   r@   r:   r:   r;   r†   õ  rA   zFbsObject.docsc                 C   r[   r\   r^   r@   r:   r:   r;   ra   ù  rb   zFbsObject.__str__c              	   C   s~   | j | ji | j| j| ji | jdœ}| jr*| j ¡ D ]\}}|r#| ¡ nd |d |< q| j	r=| j	 ¡ D ]
\}}||d |< q2|S )N)rF   r¬   r­   r®   r¯   r°   rH   r†   r­   rH   )
rv   rÃ   rÆ   rÇ   rÈ   r   rÄ   r‹   r`   r~   rŒ   r:   r:   r;   r`   ü  s    ø
zFbsObject.marshalNc                 C   s~   |  ¡ }|r| d¡}| ¡ }|r| d¡}t|ƒ}t|ƒ}t| |||d�\}}	t| |||||	| ¡ | ¡ | 	¡ ||d�}
|
S )Nr�   rª   r«   )
rœ   r’   r´   r›   r–   r©   r¸   rµ   r¶   r·   )r/   r1   Úfbs_objr£   Úobj_nameZobj_declaration_fileZobj_docsZ	obj_attrsr¤   r§   re   r:   r:   r;   Úparse  s,   

özFbsObject.parse)TFrf   rg   r8   ) rh   ri   rj   rl   r   r   rt   r   r   r   rr   r<   r   rY   rÑ   rq   r/   r1   r¬   rF   r­   r§   r®   r¯   r°   rH   r†   ra   r	   r`   ÚstaticmethodrÕ   r:   r:   r:   r;   r¸   •  sj    ÿþýü
ûúùø	÷

ö
õ r¸   c                   @   s®   e Zd Zdddddedededed	ed
eeef 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e	dd„ ƒZdd„ Zdd „ Zd!S )"rº   r/   r0   r1   r2   rF   r�   r±   r²   r†   rH   c	           	      C   ó4   || _ || _|| _|| _|| _|| _|| _|| _d S r8   )r   r   rv   rx   Ú_requestÚ	_responser   r~   )	r9   r/   r1   rF   r�   r±   r²   r†   rH   r:   r:   r;   r<   +  ó   	
zFbsRPCCall.__init__c                 C   r>   r8   r?   r@   r:   r:   r;   r/   =  rA   zFbsRPCCall.repositoryc                 C   r>   r8   rB   r@   r:   r:   r;   r1   A  rA   zFbsRPCCall.schemac                 C   r>   r8   r‡   r@   r:   r:   r;   rF   E  rA   zFbsRPCCall.namec                 C   r>   r8   rˆ   r@   r:   r:   r;   r�   I  rA   zFbsRPCCall.idc                 C   r>   r8   )rØ   r@   r:   r:   r;   r±   M  rA   zFbsRPCCall.requestc                 C   r>   r8   )rÙ   r@   r:   r:   r;   r²   Q  rA   zFbsRPCCall.responsec                 C   r>   r8   rŠ   r@   r:   r:   r;   r†   U  rA   zFbsRPCCall.docsc                 C   r>   r8   r‰   r@   r:   r:   r;   rH   Y  rA   zFbsRPCCall.attrsc                 C   r[   r\   r^   r@   r:   r:   r;   ra   ]  rb   zFbsRPCCall.__str__c                 C   s^   | j | jr
| j ¡ nd | jr| j ¡ nd i | jdœ}| jr-| j ¡ D ]
\}}||d |< q"|S )N)rF   r±   r²   rH   r†   rH   )rv   rØ   r`   rÙ   r   r~   r‹   rŒ   r:   r:   r;   r`   `  s   ûzFbsRPCCall.marshalN)rh   ri   rj   r   r   r¸   r   rr   r<   rq   r/   r1   rF   r�   r±   r²   r†   rH   ra   r`   r:   r:   r:   r;   rº   *  sH    ÿþýüûúù

ø







rº   c                   @   sº   e Zd Zdddddededeeef dee d	eeef d
e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e	dd„ ƒZdd„ Zdd „ Zd!S )"Ú
FbsServicer/   r0   r1   r2   r¬   rF   r¼   r½   rH   r†   c	           	      C   r×   r8   )r   r   rÃ   rv   Ú_callsÚ_calls_by_idr~   r   )	r9   r/   r1   r¬   rF   r¼   r½   rH   r†   r:   r:   r;   r<   o  rÚ   zFbsService.__init__c                 C   r>   r8   r?   r@   r:   r:   r;   r/   �  rA   zFbsService.repositoryc                 C   r>   r8   rB   r@   r:   r:   r;   r1   …  rA   zFbsService.schemac                 C   r>   r8   rÒ   r@   r:   r:   r;   r¬   ‰  rA   zFbsService.declaration_filec                 C   r>   r8   r‡   r@   r:   r:   r;   rF   �  rA   zFbsService.namec                 C   r>   r8   )rÜ   r@   r:   r:   r;   r¼   ‘  rA   zFbsService.callsc                 C   r>   r8   )rÝ   r@   r:   r:   r;   r½   •  rA   zFbsService.calls_by_idc                 C   r>   r8   r‰   r@   r:   r:   r;   rH   ™  rA   zFbsService.attrsc                 C   r>   r8   rŠ   r@   r:   r:   r;   r†   �  rA   zFbsService.docsc                 C   r[   r\   r^   r@   r:   r:   r;   ra   ¡  rb   zFbsService.__str__c                 C   sj   | j | ji i | jdœ}| jr | j ¡ D ]\}}| ¡ |d |< q| jr3| j ¡ D ]
\}}||d |< q(|S )N)rF   r¬   r¼   rH   r†   r¼   rH   )rv   rÃ   r   rÜ   r‹   r`   r~   rŒ   r:   r:   r;   r`   ¤  s   ûzFbsService.marshalN)rh   ri   rj   r   r   rº   r   rr   r<   rq   r/   r1   r¬   rF   r¼   r½   rH   r†   ra   r`   r:   r:   r:   r;   rÛ   n  sH    ÿþýü
ûú
ù
ø







rÛ   c                   @   sŠ   e Zd Zdddddede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S )ÚFbsEnumValuer/   r0   r1   r2   rF   r�   c                 C   s.   || _ || _|| _|| _|| _i | _|| _dS )ze

        :param repository:
        :param name:
        :param value:
        :param docs:
        N)r   r   rv   rx   Ú_valuer~   r   )r9   r/   r1   rF   r�   rÁ   r†   r:   r:   r;   r<   ¶  s   
zFbsEnumValue.__init__c                 C   r>   r8   r?   r@   r:   r:   r;   r/   Ì  rA   zFbsEnumValue.repositoryc                 C   r>   r8   rB   r@   r:   r:   r;   r1   Ð  rA   zFbsEnumValue.schemac                 C   r>   r8   r‡   r@   r:   r:   r;   rF   Ô  rA   zFbsEnumValue.namec                 C   r>   r8   rˆ   r@   r:   r:   r;   r�   Ø  rA   zFbsEnumValue.idc                 C   r>   r8   )rß   r@   r:   r:   r;   rÁ   Ü  rA   zFbsEnumValue.valuec                 C   r>   r8   r‰   r@   r:   r:   r;   rH   à  rA   zFbsEnumValue.attrsc                 C   r>   r8   rŠ   r@   r:   r:   r;   r†   ä  rA   zFbsEnumValue.docsc                 C   r[   r\   r^   r@   r:   r:   r;   ra   è  rb   zFbsEnumValue.__str__c                 C   sD   | j | j| j| j| jdœ}| jr | j ¡ D ]
\}}||d |< q|S )N)r�   rF   rH   r†   rÁ   rH   )rx   rv   r~   r   rß   r‹   rŒ   r:   r:   r;   r`   ë  s   ûzFbsEnumValue.marshalN)rh   ri   rj   r   r   r<   rq   r/   r1   rF   r�   rÁ   rH   r†   ra   r`   r:   r:   r:   r;   rÞ   µ  s4    ÿþý
ü






rÞ   c                   @   sî   e Zd ZdZdddddededed	eeef d
ee de	dedeee
f de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edd „ ƒZed!d"„ ƒZed#d$„ ƒZed%d&„ ƒZd'd(„ Zd)d*„ Zd+S ),ÚFbsEnumz›
    FlatBuffers enum type.

    See https://github.com/google/flatbuffers/blob/11a19887053534c43f73e74786b46a615ecbf28e/reflection/reflection.fbs#L61
    r/   r0   r1   r2   r¬   rF   r�   ÚvaluesÚvalues_by_idÚis_unionÚunderlying_typerH   r†   c                 C   rÌ   r8   )r   r   rÃ   rv   rx   Ú_valuesÚ_values_by_idÚ	_is_unionÚ_underlying_typer~   r   )r9   r/   r1   r¬   rF   r�   rá   râ   rã   rä   rH   r†   r:   r:   r;   r<      s   
zFbsEnum.__init__c                 C   r>   r8   r?   r@   r:   r:   r;   r/     rA   zFbsEnum.repositoryc                 C   r>   r8   rB   r@   r:   r:   r;   r1     rA   zFbsEnum.schemac                 C   r>   r8   rÒ   r@   r:   r:   r;   r¬   "  rA   zFbsEnum.declaration_filec                 C   r>   r8   r‡   r@   r:   r:   r;   rF   &  rA   zFbsEnum.namec                 C   r>   r8   rˆ   r@   r:   r:   r;   r�   *  rA   z
FbsEnum.idc                 C   r>   r8   )rå   r@   r:   r:   r;   rá   .  rA   zFbsEnum.valuesc                 C   r>   r8   )ræ   r@   r:   r:   r;   râ   2  rA   zFbsEnum.values_by_idc                 C   r>   r8   )rç   r@   r:   r:   r;   rã   6  rA   zFbsEnum.is_unionc                 C   r>   r8   )rè   r@   r:   r:   r;   rä   :  rA   zFbsEnum.underlying_typec                 C   r>   r8   r‰   r@   r:   r:   r;   rH   >  rA   zFbsEnum.attrsc                 C   r>   r8   rŠ   r@   r:   r:   r;   r†   B  rA   zFbsEnum.docsc                 C   r[   r\   r^   r@   r:   r:   r;   ra   F  rb   zFbsEnum.__str__c                 C   s|   | j | ji | jtj | jd ¡i | jdœ}| jr)| j 	¡ D ]\}}| 
¡ |d |< q| jr<| j 	¡ D ]
\}}||d |< q1|S )N)rF   r�   rá   rã   rä   rH   r†   rá   rH   )rv   rx   rç   r   rc   rd   rè   r   rå   r‹   r`   r~   rŒ   r:   r:   r;   r`   I  s   ù	zFbsEnum.marshalN)rh   ri   rj   rk   r   r   r   rÞ   r   r   rr   r<   rq   r/   r1   r¬   rF   r�   rá   râ   rã   rä   rH   r†   ra   r`   r:   r:   r:   r;   rà   ù  sb    ÿþýüû
úùø	÷

ö
õ










rà   c                !   @   s´  e Zd ZdZ						d<dddedededed	ed
eeeef  dede	de
eeef  de
ee  de
eeef  de
ee  de
eeef  de
ee  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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/d0„ ƒZed1d2„ ƒZd3d4„ Zd5eeef fd6d7„Z e!	d=ddd8e"ee#j$e%e& f d9e
e d5d fd:d;„ƒZ'dS )>r2   z
    Nr/   r0   Ú	file_nameÚfile_sha256Ú	file_sizeÚ
file_identÚfile_extÚ	fbs_filesÚ
root_tableÚrootÚobjsrE   ÚenumsÚenums_by_idÚservicesÚservices_by_idc                 C   s^   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _dS )a�  

        :param repository:
        :param file_name:
        :param file_sha256:
        :param file_size:
        :param file_ident:
        :param file_ext:
        :param fbs_files:
        :param root_table:
        :param root:
        :param objs:
        :param objs_by_id:
        :param enums:
        :param enums_by_id:
        :param services:
        :param services_by_id:
        N)r   Ú
_file_nameÚ_file_sha256Ú
_file_sizeÚ_file_identÚ	_file_extÚ
_fbs_filesÚ_root_tableÚ_rootÚ_objsÚ_objs_by_idÚ_enumsÚ_enums_by_idÚ	_servicesÚ_services_by_id)r9   r/   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rE   rò   ró   rô   rõ   r:   r:   r;   r<   `  s   "
zFbsSchema.__init__c                 C   r>   r8   r?   r@   r:   r:   r;   r/   ’  rA   zFbsSchema.repositoryc                 C   r>   r8   )rö   r@   r:   r:   r;   ré   –  rA   zFbsSchema.file_namec                 C   r>   r8   )r÷   r@   r:   r:   r;   rê   š  rA   zFbsSchema.file_sha256c                 C   r>   r8   )rø   r@   r:   r:   r;   rë   ž  rA   zFbsSchema.file_sizec                 C   r>   r8   )rù   r@   r:   r:   r;   rì   ¢  rA   zFbsSchema.file_identc                 C   r>   r8   )rú   r@   r:   r:   r;   rí   ¦  rA   zFbsSchema.file_extc                 C   r>   r8   )rû   r@   r:   r:   r;   rî   ª  rA   zFbsSchema.fbs_filesc                 C   r>   r8   )rü   r@   r:   r:   r;   rï   ®  rA   zFbsSchema.root_tablec                 C   r>   r8   )rý   r@   r:   r:   r;   rð   ²  rA   zFbsSchema.rootc                 C   r>   r8   ©rþ   r@   r:   r:   r;   rñ   ¶  rA   zFbsSchema.objsc                 C   r>   r8   )rÿ   r@   r:   r:   r;   rE   º  rA   zFbsSchema.objs_by_idc                 C   r>   r8   ©r   r@   r:   r:   r;   rò   ¾  rA   zFbsSchema.enumsc                 C   r>   r8   )r  r@   r:   r:   r;   ró   Â  rA   zFbsSchema.enums_by_idc                 C   r>   r8   ©r  r@   r:   r:   r;   rô   Æ  rA   zFbsSchema.servicesc                 C   r>   r8   )r  r@   r:   r:   r;   rõ   Ê  rA   zFbsSchema.services_by_idc                 C   s   d  tj|  ¡ dd�¡S )Nr]   éÿ   )Úwidthr^   r@   r:   r:   r;   ra   Î  s   zFbsSchema.__str__r=   c              
   C   sæ   | j | j| jrtj | j¡nd| j| j| jt	| j
ƒt	| jƒt	| jƒdœ	| jr+| j ¡ ndi i i dœ}| jrG| j ¡ D ]\}}| ¡ |d |< q:| j
r\| j
 ¡ D ]\}}| ¡ |d |< qO| jrq| j ¡ D ]\}}| ¡ |d |< qd|S )z

        :return:
        N)	ÚidentÚextrF   ÚfilesÚsha256ÚsizeÚobjectsrò   rô   )r1   rï   rò   r  rô   rò   r  rô   )rù   rú   rö   ÚosÚpathÚbasenamerû   r÷   rø   r¢   rþ   r   r  rü   r`   r‹   rŒ   r:   r:   r;   r`   Ñ  s2   ÷ñzFbsSchema.marshalÚsfileÚfilenamec           .      C   s¸  t |ƒtkr&tj |¡r&t|dƒ�}| ¡ }W d  ƒ n1 s w   Y  n| ¡ }t ¡ }| 	|¡ t
 |d¡}| ¡ }|durF| d¡}| ¡ }|durS| d¡}g }	t| ¡ ƒD ]6}
| |
¡}| ¡ }|rm| d¡}g }t| ¡ ƒD ]}| |¡}|rƒ| d¡}| |¡ qu|	 ||dœ¡ q[| ¡ }|dur t | |¡}t| |t|ƒ| ¡ |||	||d�	}i }g }t| ¡ ƒD ]…}
| |
¡}| ¡ }|rÍ| d¡}| ¡ }|rØ| d¡}|  ¡ }i }g }t| !¡ ƒD ]4}| "|¡}| ¡ }|rø| d¡}| #¡ }t$|ƒ}t%| |||||d�}||v�sJ ‚|||< | |¡ qæt&| ||||
||| '¡ |t(|ƒt$|ƒd�}||v�s7J ‚|||< | |¡ q»||_)||_*i } g }!t| +¡ ƒD ]#}
| ,|
¡}"tj| ||"|!d	�}#|#j-| v�siJ ‚|#| |#j-< |! |#¡ �qQ| |_.|!|_/i }$g }%t| 0¡ ƒD ]N}
| 1|
¡}&|& ¡ }'|'�r˜|' d¡}'|& ¡ }(|(�r¤|( d¡}(t$|&ƒ})t(|&ƒ}*t2| ||&|!d	�\}+},t3| ||(|'|+|,|*|)d
�}-|'|$v�sÉJ ‚|-|$|'< |% |-¡ �q…|$|_4|%|_5|S )ze

        :param repository:
        :param sfile:
        :param filename:
        :return:
        ÚrbNr   r�   )r  Zincluded_filenames)	r/   ré   rë   rê   rì   rí   rî   rï   rð   )r/   r1   rF   r�   rÁ   r†   )r/   r1   r¬   rF   r�   rá   râ   rã   rä   rH   r†   rª   )r/   r1   r¬   rF   r¼   r½   rH   r†   )6r€   r   r  r  ÚisfileÚopenÚreadÚhashlibr  ÚupdateÚ_SchemaZGetRootAsSchemaZ	FileIdentr’   ZFileExtr�   ZFbsFilesLengthZFbsFilesZFilenameZIncludedFilenamesLengthZIncludedFilenamesr™   Z	RootTabler¸   rÕ   r2   r¢   Ú	hexdigestZEnumsLengthZEnumsrœ   r´   ZUnderlyingTypeZValuesLengthÚValuesr“   r›   rÞ   rà   ZIsUnionr–   r   r  ZObjectsLengthZObjectsrF   rþ   rÿ   ZServicesLengthZServicesrÂ   rÛ   r  r  ).r/   r  r  ÚfdÚdataÚmrð   rì   rí   rî   r¨   Zschema_fileZschema_file_filenameZschema_file_included_filenamesr”   Zincluded_filenamerï   r1   rò   ró   Zfbs_enumZ	enum_nameZenum_declaration_fileZenum_underlying_typeZenum_valuesZenum_values_by_idZfbs_enum_valueZenum_value_nameZenum_value_valueZenum_value_docsZ
enum_valueÚenumrñ   rE   rÓ   re   rô   rõ   r»   Zsvc_nameZsvc_declaration_filer†   rH   r¼   r½   Úservicer:   r:   r;   Úloadò  s  
ÿ






þÿø




ûö




ùzFbsSchema.load)NNNNNNr8   )(rh   ri   rj   rk   r   r   r   r   r¸   r  r   rà   rÛ   r<   rq   r/   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rE   rò   ró   rô   rõ   ra   r   r`   rÖ   r   ÚioÚ	RawIOBaser   r   r"  r:   r:   r:   r;   r2   \  s     ñÿþýüûúùø	÷
ö
õô
óò

ñ2














!þÿþþr2   rÁ   c                 C   sH   | j jtjv r tj| j j }t |ƒ|krtd t |ƒ|¡ƒ‚d S J dƒ‚)Nz&invalid type {} for value, expected {}FrD   )r€   r3   r   rp   r   rT   )r¦   rÁ   Úexpected_typer:   r:   r;   Úvalidate_scalar™  s   ÿr&  c                	   @   sH  e Zd ZdZdefdd„Zededd fdd„ƒZed	edd fd
d„ƒZe	defdd„ƒZ
e	deeef fdd„ƒZe	deeef fdd„ƒZe	deeef fdd„ƒZe	deeef fdd„ƒZe	dd„ ƒZdedeeef fdd„Zd*dd„Zdd„ Zdd „ Zd!ee d"ee fd#d$„Zd!ed%ee d&eeef dee fd'd(„Zd)S )+r0   z²
    crossbar.interfaces.IInventory
      - add: FbsRepository[]
        - load: FbsSchema[]

    https://github.com/google/flatbuffers/blob/master/reflection/reflection.fbs
    Ú
basemodulec                 C   s,   t  ¡ | _|| _i | _i | _i | _i | _d S r8   )ÚtxaioZmake_loggerÚlogÚ_basemoduleÚ	_schematarþ   r   r  )r9   r'  r:   r:   r;   r<   ®  s   

zFbsRepository.__init__r  r=   c                 C   ó
   t ƒ }|S r8   ©r0   )r  Úcatalogr:   r:   r;   Úfrom_archive¶  ó   zFbsRepository.from_archiveÚaddressc                 C   r,  r8   r-  )r1  r.  r:   r:   r;   Úfrom_address»  r0  zFbsRepository.from_addressc                 C   r>   r8   )r*  r@   r:   r:   r;   r'  À  rA   zFbsRepository.basemodulec                 C   r>   r8   )r+  r@   r:   r:   r;   ÚschemasÄ  rA   zFbsRepository.schemasc                 C   r>   r8   r  r@   r:   r:   r;   rñ   È  rA   zFbsRepository.objsc                 C   r>   r8   r  r@   r:   r:   r;   rò   Ì  rA   zFbsRepository.enumsc                 C   r>   r8   r  r@   r:   r:   r;   rô   Ð  rA   zFbsRepository.servicesc                 C   s   t | jƒt | jƒ t | jƒ S r8   )r¢   rþ   r   r  r@   r:   r:   r;   Útotal_countÔ  s   zFbsRepository.total_countc                 C   sÈ  d}g }t j |¡r+t|ƒ d¡D ]g}t j ||j¡}|| jvr&| |¡ q|d7 }qt j 	|¡rA|| jvr<| |¡ n=|d7 }n8d|v rr| 
d¡D ].}t j |¡}t j 	|¡rk|| jvrc| |¡ qJtd |¡ƒ qJtd |¡ƒ‚td |¡ƒ‚d}d}d}	|D ]X}t | |¡}
|
j ¡ D ]}|j| jv r›|d7 }qŽ|| j|j< qŽ|
j ¡ D ]}|j| jv r´|d7 }q§|| j|j< q§|
j ¡ D ]}|j| jv rÍ|	d7 }	qÀ|| j|j< qÀ|
| j|< q�|| |	 }||fS )	aM  
        Load and add all schemata from Flatbuffers binary schema files (`*.bfbs`)
        found in the given directory. Alternatively, a path to a single schema file
        can be provided.

        :param filename: Filesystem path of a directory or single file from which to
            load and add Flatbuffers schemata.
        r   z*.bfbsé   ú,z3duplicate schema file skipped ("{}" already loaded)z"{}" in list is not a filez*cannot open schema file or directory: "{}"N)r  r  Úisdirr   Úrglobrš   rF   r+  r™   r  rU   Ú
expanduserÚprintrT   rZ   r2   r"  rò   rá   r   rñ   rþ   rô   r  )r9   r  Z	file_dupsZload_from_filenamesr  ÚfnZfilename_singleZ	enum_dupsZobj_dupsZsvc_dupsr1   r   re   ÚsvcZ	type_dupsr:   r:   r;   r"  Ø  sR   	







zFbsRepository.loadFc                 C   s`   |rt | j ¡ ƒt | j ¡ ƒt | j ¡ ƒt | j ¡ ƒdœS t| jƒt| jƒt| jƒt| jƒdœS )N)Zschematarñ   rò   rô   )r    r+  r¡   rþ   r   r  r¢   )r9   r¡   r:   r:   r;   Úsummary%  s   üüzFbsRepository.summaryc                 C   s  d}d}d}| j  ¡ D �]$\}}|j d| j¡}| d¡d }|jr$dn|}d |jr-d	nd
|¡}	td t	d d|	ddt
|	ƒ  ¡|d�¡ƒ |rVtd t	|ƒt	|ƒ¡ƒ n	td t	|ƒ¡ƒ tƒ  ttj|jddddddddddd�ƒ tƒ  |jD ]±}
tj|
jddddddddddd�}|
jjtjkr´|
jj d¡d }| j |
jj jr­t	|dd�}n,t	||d�}n%|
jjtjkrÌd tj|
jj ¡}t	|dd�}ntj|
jj }t	|dd�}|
jrýdd |
j ¡ ¡ d }t	||d�}d  ||g¡}d  ||g¡}n|}|}td! t	|
jƒ|d d"t
|ƒ   |�r|d# nd¡ƒ |d$d … D ]	}td%| ƒ �q"q{tƒ  q| j ¡ D ]Õ\}}|j d| j¡}|j d&d ¡}| d¡d }d' |¡}td t	d d|ddt
|ƒ  ¡d(d�¡ƒ td) t	|ƒ¡ƒ td* t	|ƒt	d+|d�t	d,d-d�¡ƒ tƒ  ttj|jddddddddddd�ƒ |j ¡ D ]d}tƒ  |j| }|jd. }d-|d/œ |d¡}d0 t	|j d|j¡d1d�¡}td2 t	||d�|t	|jj d¡d ddd3�t	|jj d¡d ddd3�¡ƒ tƒ  ttj|jd4d5d5dddddddd�ƒ �q¢tƒ  �q6d S )6N)é3   é…   r  )r  é   é$   )r@  r@  r@  ZwampurirM   rN   Úbluez{} {}ÚStructZTablez{}
z   {} {} {}z====ú=év   )Úcolorz    Type URI:  {}.{}z    Type URI:  {}éd   z    TFé   )
r  Úinitial_indentÚsubsequent_indentÚexpand_tabsÚreplace_whitespaceÚfix_sentence_endingsÚbreak_long_wordsÚdrop_whitespaceÚbreak_on_hyphensÚtabsizeéF   rs   z
Vector[{}]Zwhiteú(ú, ú)r—   z    {:<36} {} {}é   r   r5  z9                                                         rL   zInterface {}Zyellowz    Interface UUID:  {}z    Interface URIs:  {}.({}|{})Ú	procedureÚtopicÚgreenr€   )rX  rW  rR   )r  r  r  z      {} {} ({}) -> {})rF  ZboldéZ   z
          )rñ   r‹   rH   rd   r*  rU   r®   rT   r:  r   r¢   ÚtextwrapÚfillr†   r§   Úwrapr€   r3   r   r.   r6   r-   rc   r4   rš   r¡   rF   rô   r¼   r±   r²   )r9   ZbrownZorangeZpinkZobj_keyre   Z
prefix_urirÔ   Z	obj_colorZ	obj_labelr¦   r†   Ztype_desc_strZ	type_descZattrs_text_strZ
attrs_textZtype_text_strZ	type_textÚlineZsvc_keyr<  Zifx_uuidZifc_nameZ	ifc_labelÚuriÚepZep_typeZep_colorZ	uri_shortr:   r:   r;   Úprint_summary5  sê    
ÿ
ö
öþÿ
 
ÿ
ÿ
ö

ý
ö
ÒzFbsRepository.print_summaryc           (      C   s   | j  ¡ | j ¡ | j ¡ dœ}i }i }i }| ¡ D ]à\}}	|	D ]Ù}
t|
tƒs9t|
tƒs9t|
tƒs9J d 	t
|
ƒ¡ƒ‚|
}d |j d¡dd… ¡}||_|j d¡d  ¡ |_| d¡d |_||v}||f|v}|rpd|||f< |dkr�| d 	|¡¡}|j| |t||| jd	�}| d
 	|¡¡}|j| |t||| jd	�}n7|dkrº| d 	|¡¡}|j| |t||| jd	�}d}d}n|dkrÍtj| ¡ ddddd�}d}ntd 	|¡ƒ‚||vràg ||< g ||< ||  |¡ |rñ||  |¡ q||  d¡ qqi }| ¡ D ]9}| d¡}tt|ƒƒD ]*}|| }d |d|… ¡}||v�r%g ||< |�r6||| v�r6||  |¡ �q�q td 	t|ƒ¡ƒ d}t ƒ }| ¡ D �] \}}d |¡}|�rfdg| d¡dd…  }ndg}tt|ƒƒD ]¡}t!j"j|g|d|d … ¢R Ž }t!j" #|¡�s�t! $|¡ |dk�rt!j" |d¡}d |d|d … ¡dd… }|| }| d¡}|j| ||| jd�} |  %d¡}!t!j" &|¡�sót'|dƒ�}"|" (|!¡ W d  ƒ n	1 �sÝw   Y  td 	t|!ƒ|¡ƒ | )|¡ �qot'|dƒ�}"|" (|!¡ W d  ƒ �qo1 �s
w   Y  �qo|dk�r3|�r.d 	| d¡d ¡}#d  	| d¡d ¡}$n!d}#d}$n|dk�rK|�rFd! 	| d¡d ¡}#nd"}#d}$nd}#d}$|#�r¯zt*|ƒd }W n t+�yt }% ztd# 	|%¡ƒ W Y d}%~%nd}%~%ww | %d¡}!t!j"j||#g Ž }t!j" ||¡}t'|dƒ�}&|& (|!¡ W d  ƒ n	1 �s w   Y  td$ 	t|!ƒ|¡ƒ |$�rL|| }'d |'¡}zt*|ƒd }W n t+�yÝ }% ztd# 	|%¡ƒ W Y d}%~%nd}%~%ww | %d¡}!t!j"j||$g Ž }t!j" ||¡}||v�r't!j" &|¡�r't! ,|¡ t'|dƒ�}&|& (d% %d¡¡ W d  ƒ n	1 �sw   Y  | )|¡ t'|dƒ�}&|& (|!¡ W d  ƒ n	1 �s=w   Y  td$ 	t|!ƒ|¡ƒ �qLdS )&zm

        :param jinja2_env:
        :param output_dir:
        :param output_lang:
        :return:
        )re   r   r!  zunexpected type {}rM   r   rN   TrK   zpy-autobahn/{}.py.jinja2)ÚrepoÚmetadatar   Zrender_importsÚis_first_by_categoryÚrender_to_basemodulezpy-autobahn/test_{}.py.jinja2Zeip712zso-eip712/{}-eip712.sol.jinja2NÚjson)rT  z: FrH  )Ú
separatorsÚensure_asciiÚindentÚ	sort_keysz)invalid language "{}" for code generationzNamespaces:
{}
z


rs   r5  z__init__.pyzpy-autobahn/module.py.jinja2)rb  rÉ   Zimportsre  r�   Úwbz3Ok, rendered "module.py.jinja2" in {} bytes to "{}"Úabz{}.pyz
test_{}.pyz{}.jsonz	init.jsonz error during formatting code: {}zOk, written {} bytes to {}z# Copyright (c) ...
)-rñ   rá   rò   rô   r‹   Ú
isinstancer¸   rà   rÛ   rT   r€   rš   rF   rU   rÉ   r˜   rÊ   rË   Zget_templateÚrenderr   r'  rf  Údumpsr`   rZ   r™   r¡   r�   r¢   r:  r   Úsetr  r  r7  ÚmkdirÚencodeÚexistsr  ÚwriteÚaddr   Ú	ExceptionÚremove)(r9   Z
jinja2_envÚ
output_dirZoutput_langZworkZcode_modulesZtest_code_modulesZis_first_by_category_modulesÚcategoryrá   Úitemrc  rÉ   Zis_firstrd  ÚtmplÚcodeZ	test_tmplZ	test_codeÚ
namespacesZ	code_fileZ
name_partsr¨   ZpnÚnsZinitializedZcode_sectionsZcode_file_dirÚdr;  Z_modulenameZ_importsZ	init_coder  ÚfZcode_file_nameZtest_code_file_nameÚer  Ztest_code_sectionsr:   r:   r;   rn  µ  s0  ý0
ý	
ý
ý
ü·L

€ú
 



ÿ
ÿ ÿ€

€ÿ
	ÿ
€ÿ

ÿ
ÿ€¡zFbsRepository.renderÚvalidation_typerÁ   c           
      C   s¼  |du rdS || j vrtd | j ¡ƒ‚| j | }t|ƒtkr¯t|j ¡ ƒ}| ¡ D ]q\}}||jvr;t	d ||j
¡ƒ‚| |¡ |j| }|jjtjkrU|  |jj|¡ q)|jjtjkrb	 tdƒ q)|jjtjkr•t|tƒsst|tƒrxtdƒ q)t|tƒrŠ|D ]}|  |jj|¡ qt	d t|ƒ|j
¡ƒ‚t||ƒ q)|jr«|r­t	d t|ƒ|j
¡ƒ‚dS dS t|ƒttfv �rS|jsÆt	d t|ƒ|j
¡ƒ‚d	}	|jD ]v}|	t|ƒkrÝt	d
 |j
|j
¡ƒ‚||	 }|	d7 }	|jjtjkrõ|  |jj|¡ qË|jjtjk�r	 tdƒ qË|jjtjk�r<t|tƒ�st|tƒ�rtdƒ qËt|tƒ�r7|D ]}t|jj|ƒ |  |jj|¡ �q$tdƒ qËt||ƒ qËt|ƒ|	k�rQt	d |j
¡ƒ‚dS t	d t|ƒ|j
¡ƒ‚)a�  
        Validate value against the validation type given.

        If the application payload does not validate against the provided type,
        an :class:`autobahn.wamp.exception.InvalidPayload` is raised.

        :param validation_type: Flatbuffers type (fully qualified) against to validate application payload.
        :param value: Value to validate.
        :return:
        Nz+validation type "{}" not found in inventoryz9unexpected argument "{}" in value of validation type "{}"úFIXME-003-UnionzFIXME-003-1-VectorzNinvalid type {} for value (expected Vector/List/Tuple) of validation type "{}"z.missing argument(s) {} in validation type "{}"z9**: invalid type {} for (non-struct) validation type "{}"r   z"missing argument "{}" in type "{}"r5  zFIXME-005-UnionúFIXME-005-1-VectorúFIXME-005-3-Vectorz.unexpected argument(s) in validation type "{}"z1invalid type {} for value of validation type "{}")rñ   rZ   rT   r€   ro   rp  r­   r¡   r‹   r   rF   Údiscardr3   r   r.   Úvalidate_objr6   r   r:  r-   rm  r   r   r   r7   r&  r®   rn   Útupler§   r¢   )
r9   r‚  rÁ   ÚvtZ	vt_kwargsr�   rŽ   r¦   ÚveÚidxr:   r:   r;   r‡  �  sv   







ÿ
€
ÿ




€ÿzFbsRepository.validate_objÚargsÚkwargsc           
      C   sà  |du rdS || j vrtd |t| j ƒ¡ƒ‚| j | }d}t|r$| ¡ ng ƒ}|jD ] }|js9d|jv s9d|jvr¬|du sC|t|ƒkrMt	d |j
|j
¡ƒ‚|| }|d7 }|jjtjkre|  |jj|¡ q*|jjtjkrr	 tdƒ q*|jjtjkr¦t|tƒsƒt|tƒrˆtd	ƒ q*t|tƒr¡|D ]:}	t|jj|	ƒ |  |jj|	¡ q�td
ƒ q*t||ƒ q*d|jv rÆ|j
|v rÅ||j
 }tdƒ | |j
¡ q*J dƒ‚q*t|ƒ|krÞt	d t|ƒ| |j
¡ƒ‚|rît	d t|ƒt|ƒ|j
¡ƒ‚|S )a  
        Validate the WAMP application payload provided in positional argument in ``args``
        and in keyword-based arguments in ``kwargs`` against the FlatBuffers table
        type ``validation_type`` from this repository.

        If the application payload does not validate against the provided type,
        an :class:`autobahn.wamp.exception.InvalidPayload` is raised.

        :param validation_type: Flatbuffers type (fully qualified) against to validate application payload.
        :param args: The application payload WAMP positional arguments.
        :param kwargs: The application payload WAMP keyword-based arguments.
        :return: The validation type object from this repository (reference in ``validation_type``)
            which has been used for validation.
        Nz<validation type "{}" not found in inventory (among {} types)r   ÚargÚkwargz-missing positional argument "{}" in type "{}"r5  rƒ  r„  r…  z	FIXME-003Fzshould not arrive herez/{} unexpected positional arguments in type "{}"z/{} unexpected keyword arguments {} in type "{}")rñ   rZ   rT   r¢   rp  r¡   r§   rI   rH   r   rF   r€   r3   r   r.   r‡  r6   r   r:  r-   rm  r   r   r   r7   r&  r†  rn   )
r9   r‚  rŒ  r�  r‰  Zargs_idxZkwargs_keysr¦   rÁ   rŠ  r:   r:   r;   Úvalidateï  sP   









€ïzFbsRepository.validateN)F) rh   ri   rj   rk   r   r<   rÖ   r/  r2  rq   r'  r   r2   r3  r¸   rñ   rà   rò   rÛ   rô   r4  r
   r   r"  r=  ra  rn  r   r	   r‡  r   r�  r:   r:   r:   r;   r0   ¥  s6    

M  Y.br0   r8   )2rf  r  r#  r_   r  r[  Úpathlibr   r   Útypingr   r   r   r   r   r	   r
   Úcollections.abcr   Zyapf.yapflib.yapf_apir   r(  Zautobahn.wamp.exceptionr   Zautobahn.utilr   Z#zlmdb.flatbuffers.reflection.Schemar   r  Z%zlmdb.flatbuffers.reflection.BaseTyper   rm   Z"zlmdb.flatbuffers.reflection.Fieldr   r   r   rr   rt   r–   r›   r©   rÂ   r¸   rº   rÛ   rÞ   rà   r2   r&  r0   r:   r:   r:   r;   Ú<module>   sJ   $  ;d

JY DGDc  ?