U
    •uÄc“* ã                   @   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/ee d&œ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                    @   sž  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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
i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!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
i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ejejejejd0œZ#dOd2d3eeee$e e$e d4œd5d6„Z%e&d2d7œd8d9„ƒZ'e&d3d7œd:d;„ƒZ(e&ed7œd<d=„ƒZ)e&ed7œd>d?„ƒZ*e&ed7œd@dA„ƒZ+e&e$e d7œdBdC„ƒZ,e&e$e d7œdDdE„ƒZ-dPee$e. e$e eedHœdIdJ„Z/ed7œdKdL„Z0e.ee1f d7œdMdN„Z2d1S )QÚ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ÚObj)r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r   NÚFbsRepositoryÚ	FbsSchema)Ú
repositoryÚschemaÚbasetypeÚelementÚindexÚobjtypeÚelementtypec                 C   s.   || _ || _|| _|| _|| _|| _|| _d S ©N)r   r   r   r   r   r   r   )Úselfr1   r2   r3   r4   r5   r6   r7   © r:   úS/var/www/html/VBACK/school/venv/lib/python3.8/site-packages/autobahn/xbr/_schema.pyÚ__init__É   s    zFbsType.__init__©Úreturnc                 C   s   | j S r8   ©r   ©r9   r:   r:   r;   r1   Ù   s    zFbsType.repositoryc                 C   s   | j S r8   ©r   r@   r:   r:   r;   r2   Ý   s    zFbsType.schemac                 C   s   | j S )z:
        Flatbuffers base type.

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

        :return:
        )r   r@   r:   r:   r;   r4   ê   s    zFbsType.elementc                 C   s   | j S )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:
        )r   r@   r:   r:   r;   r5   ó   s    	zFbsType.indexc                 C   sH   | j tjkrB| jdkrB| jtjkr6| jj| j j	| _ndsBt
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   ÚnameÚAssertionErrorr@   r:   r:   r;   r7   þ   s
    	zFbsType.elementtypec                 C   s.   | j tjkr(| jdkr(| jj| j j| _| jS )z\
        If basetype == Object, fully qualified object type name.

        :return:
        N)r   r   r.   r   r   rC   r   rD   r@   r:   r:   r;   r6     s    	zFbsType.objtypeTF)ÚlanguageÚattrsÚrequiredÚobjtype_as_stringr>   c                 C   sb  |dk�rLd}| j tjkrp| jtjkr>|r8d|kr8d}qnd}n0| jr\d | j d¡d ¡}nd tj| j ¡}n�| j tj	kr¨| jr”| j d¡d }nd tj| j ¡}nX| j tj
tjtjg krì| j tjkrÞ|rÞd	|krÞd
}ntj| j  }ntd | j | j¡ƒ‚|�r0| j tj	k�r0|�r$d |¡S d |¡S n|�r@d |¡S d |¡S ntd || j¡ƒ‚dS )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   rF   rG   rH   rI   Z_mapped_typer:   r:   r;   rX     s:    

ÿ

zFbsType.mapc                 C   s   d  t |  ¡ ¡¡S ©Nú
{}
©rS   Úpprintr   Úmarshalr@   r:   r:   r;   Ú__str__]  s    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)NTF)3Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Ú	_BaseTyper    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   rV   r-   r.   r   ZSTRUCTURED_TYPESrU   r   r   r   r   ÚlistÚdictÚFBS2PY_TYPEZ	FBS2FLAGSZFBS2PREPENDr`   ZSTR2FBSr   r<   Úpropertyr1   r2   r3   r4   r5   r7   r6   r   rX   r_   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Ú )rS   r@   r:   r:   r;   r_   o  s    zFbsAttribute.__str__N)rc   rd   re   r<   r_   r:   r:   r:   r;   rm   k  s   rm   c                   @   s@  e Zd ZdZddeeeeeeeee	ee
f edœdd„Zeddœdd	„ƒZeddœd
d„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZee	ee
f dœdd„ƒZeedœdd„ƒZedœd d!„Ze	eef dœd"d#„Zd$S )%ÚFbsField©r   r   Ú_nameÚ_typeÚ_idÚ_offsetÚ_default_intÚ_default_realÚ_deprecatedÚ	_requiredÚ_attrsÚ_docsr/   r0   ©r1   r2   rD   ÚtypeÚidÚoffsetÚdefault_intÚdefault_realÚ
deprecatedrH   rG   Údocsc                 C   sL   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _d S r8   rp   )r9   r1   r2   rD   r|   r}   r~   r   r€   r�   rH   rG   r‚   r:   r:   r;   r<   w  s    zFbsField.__init__r=   c                 C   s   | j S r8   r?   r@   r:   r:   r;   r1   ‘  s    zFbsField.repositoryc                 C   s   | j S r8   rA   r@   r:   r:   r;   r2   •  s    zFbsField.schemac                 C   s   | j S r8   ©rq   r@   r:   r:   r;   rD   ™  s    zFbsField.namec                 C   s   | j S r8   )rr   r@   r:   r:   r;   r|   �  s    zFbsField.typec                 C   s   | j S r8   ©rs   r@   r:   r:   r;   r}   ¡  s    zFbsField.idc                 C   s   | j S r8   )rt   r@   r:   r:   r;   r~   ¥  s    zFbsField.offsetc                 C   s   | j S r8   )ru   r@   r:   r:   r;   r   ©  s    zFbsField.default_intc                 C   s   | j S r8   )rv   r@   r:   r:   r;   r€   ­  s    zFbsField.default_realc                 C   s   | j S r8   )rw   r@   r:   r:   r;   r�   ±  s    zFbsField.deprecatedc                 C   s   | j S r8   )rx   r@   r:   r:   r;   rH   µ  s    zFbsField.requiredc                 C   s   | j S r8   ©ry   r@   r:   r:   r;   rG   ¹  s    zFbsField.attrsc                 C   s   | j S r8   ©rz   r@   r:   r:   r;   r‚   ½  s    zFbsField.docsc                 C   s   d  t |  ¡ ¡¡S rZ   r\   r@   r:   r:   r;   r_   Á  s    zFbsField.__str__c                 C   sd   | j | jr| j ¡ nd | j| j| j| j| j| ji | j	dœ
}| j
r`| j
 ¡ D ]\}}||d |< qJ|S )N)
rD   r|   r}   r~   r   r€   r�   rH   rG   r‚   rG   )rq   rr   r^   rs   rt   ru   rv   rw   rx   rz   ry   Úitems©r9   rb   ÚkÚvr:   r:   r;   r^   Ä  s    özFbsField.marshalN)rc   rd   re   rg   r   r   r   r   r   r   rm   r<   rl   r1   r2   rD   r|   r}   r~   r   r€   r�   rH   rG   r‚   r_   r	   r^   r:   r:   r:   r;   ro   s  sP   
ôro   c                 C   sd   i }t |  ¡ ƒD ]N}|  |¡}| ¡ }|r4| d¡}| ¡ }|rJ| d¡}||ksVt‚|||< q|S )NÚutf8)ÚrangeZAttributesLengthZ
AttributesZKeyÚdecodeÚValuerE   )rb   rG   ÚjZfbs_attrZattr_keyZ
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)rb   r‚   r�   Zdoc_liner:   r:   r;   Ú
parse_docsæ  s    
r•   c                 C   s  i }i }t | ¡ ƒD ]Ê}| |¡}| ¡ }|r8| d¡}t| ¡ ƒ}	|||	< | ¡ }
d }t| ||
 	¡ |
 
¡ |
 ¡ |d�}t| ||||	| ¡ | ¡ | ¡ | ¡ | ¡ t|ƒt|ƒd�}||ksÖtd ||	t| ¡ ƒ¡ƒ‚|||< qg }t t|ƒƒD ]}| |||  ¡ qð||fS )Nr‹   )r1   r2   r3   r4   r5   r6   r{   z,field "{}" with id "{}" already in fields {})rŒ   ZFieldsLengthZFieldsÚNamer�   r   ZIdÚTyper   r   ZElementZIndexro   ZOffsetZDefaultIntegerZDefaultRealZ
DeprecatedZRequiredr�   r•   rE   rS   ÚsortedÚkeysÚlenr“   )r1   r2   rb   Ú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¡}|
 ¡ }|rr| d¡}|
 ¡ }|
 ¡ }|
 	¡ }t
|
ƒ}t|
ƒ}t| ||
|d�\}}t| ||||||||||d�}| ¡ }| ¡ }|rê| d¡}| ¡ }|�r| d¡}| ¡ }| ¡ }| 	¡ }t
|ƒ}t|ƒ}t| |||d�\}}t| ||||||||||d�}t
|ƒ} t|ƒ}!t| |||	||| |!d�}"||k�s¨td ||	t| ¡ ƒ¡ƒ‚|"||< |	|k�sÔtd ||	t| ¡ ƒ¡ƒ‚|||	< qg }#t| ¡ ƒD ]\}$}%|# |%¡ �qî|#}||fS )Nr‹   ©r›   ©r1   r2   Údeclaration_filerD   ÚfieldsrŸ   Ú	is_structÚ	min_alignÚbytesizerG   r‚   ©r1   r2   rD   r}   ÚrequestÚresponser‚   rG   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¡   Ú	FbsObjectZResponseÚ
FbsRPCCallrE   rS   r˜   r™   r‡   r“   )&r1   r2   Ú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eeeeef ee ee	e	eee
f edœdd„Zd-eee eed	œd
d„Zeedœdd„Zeddœdd„ƒZeddœdd„ƒZeedœdd„ƒZeedœdd„ƒZeeeef dœdd„ƒZeee dœdd„ƒZeedœdd„ƒZee	dœdd„ƒZee	dœd d!„ƒZeeee
f dœd"d#„ƒZeedœd$d%„ƒZedœd&d'„Zeeef dœd(d)„Zed.d+d,„ƒZd*S )/r±   )r   r   Ú_declaration_filerq   Ú_fieldsÚ_fields_by_idÚ
_is_structÚ
_min_alignÚ	_bytesizery   rz   Ú
modulenameÚ	classnameÚmodule_relimportr/   r0   r£   c                 C   sF   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
d S r8   )r   r   r»   rq   r¼   r½   r¾   r¿   rÀ   ry   rz   )r9   r1   r2   r¤   rD   r¥   rŸ   r¦   r§   r¨   rG   r‚   r:   r:   r;   r<   š  s    zFbsObject.__init__TF)rF   rH   rI   r>   c                 C   sZ   |dkrP| j  d¡d }|r6|r*d |¡S d |¡S qV|rDd |¡S d |¡S ntƒ ‚d S )NrJ   rL   rM   rO   rP   rQ   rR   ©rq   rT   rS   rW   )r9   rF   rH   rI   Úklassr:   r:   r;   rX   ²  s    

zFbsObject.map)rF   r>   c                 C   s>   |dkr4| j  d¡d }| j  d¡d }d ||¡S tƒ ‚d S )NrJ   rL   éþÿÿÿrM   zfrom {} import {}rÄ   )r9   rF   ÚbaserÅ   r:   r:   r;   Ú
map_importÅ  s
    zFbsObject.map_importr=   c                 C   s   | j S r8   r?   r@   r:   r:   r;   r1   Í  s    zFbsObject.repositoryc                 C   s   | j S r8   rA   r@   r:   r:   r;   r2   Ñ  s    zFbsObject.schemac                 C   s   | j S r8   ©r»   r@   r:   r:   r;   r¤   Õ  s    zFbsObject.declaration_filec                 C   s   | j S r8   rƒ   r@   r:   r:   r;   rD   Ù  s    zFbsObject.namec                 C   s   | j S r8   )r¼   r@   r:   r:   r;   r¥   Ý  s    zFbsObject.fieldsc                 C   s   | j S r8   )r½   r@   r:   r:   r;   rŸ   á  s    zFbsObject.fields_by_idc                 C   s   | j S r8   )r¾   r@   r:   r:   r;   r¦   å  s    zFbsObject.is_structc                 C   s   | j S r8   )r¿   r@   r:   r:   r;   r§   é  s    zFbsObject.min_alignc                 C   s   | j S r8   )rÀ   r@   r:   r:   r;   r¨   í  s    zFbsObject.bytesizec                 C   s   | j S r8   r…   r@   r:   r:   r;   rG   ñ  s    zFbsObject.attrsc                 C   s   | j S r8   r†   r@   r:   r:   r;   r‚   õ  s    zFbsObject.docsc                 C   s   d  t |  ¡ ¡¡S rZ   r\   r@   r:   r:   r;   r_   ù  s    zFbsObject.__str__c              	   C   s~   | j | ji | j| j| ji | jdœ}| jrT| j ¡ D ] \}}|rF| ¡ nd |d |< q2| j	rz| j	 ¡ D ]\}}||d |< qd|S )N)rD   r¤   r¥   r¦   r§   r¨   rG   r‚   r¥   rG   )
rq   r»   r¾   r¿   rÀ   rz   r¼   r‡   r^   ry   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°   )r1   r2   Úfbs_objr›   Úobj_nameZobj_declaration_fileZobj_docsZ	obj_attrsrœ   rŸ   rb   r:   r:   r;   Úparse  s,    

özFbsObject.parse)TF)N) rc   rd   re   rg   r   r   ro   r   r   r   rm   r<   r   rX   rÈ   rl   r1   r2   r¤   rD   r¥   rŸ   r¦   r§   r¨   rG   r‚   r_   r	   r^   ÚstaticmethodrÌ   r:   r:   r:   r;   r±   •  sR   

õr±   c                
   @   s    e Zd Zddeeeeeeeef dœ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   r©   c	           	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S r8   )r   r   rq   rs   Ú_requestÚ	_responserz   ry   )	r9   r1   r2   rD   r}   rª   r«   r‚   rG   r:   r:   r;   r<   +  s    	zFbsRPCCall.__init__c                 C   s   | j S r8   r?   r@   r:   r:   r;   r1   =  s    zFbsRPCCall.repositoryc                 C   s   | j S r8   rA   r@   r:   r:   r;   r2   A  s    zFbsRPCCall.schemac                 C   s   | j S r8   rƒ   r@   r:   r:   r;   rD   E  s    zFbsRPCCall.namec                 C   s   | j S r8   r„   r@   r:   r:   r;   r}   I  s    zFbsRPCCall.idc                 C   s   | j S r8   )rÎ   r@   r:   r:   r;   rª   M  s    zFbsRPCCall.requestc                 C   s   | j S r8   )rÏ   r@   r:   r:   r;   r«   Q  s    zFbsRPCCall.responsec                 C   s   | j S r8   r†   r@   r:   r:   r;   r‚   U  s    zFbsRPCCall.docsc                 C   s   | j S r8   r…   r@   r:   r:   r;   rG   Y  s    zFbsRPCCall.attrsc                 C   s   d  t |  ¡ ¡¡S rZ   r\   r@   r:   r:   r;   r_   ]  s    zFbsRPCCall.__str__c                 C   s^   | j | jr| j ¡ nd | jr&| j ¡ nd i | jdœ}| jrZ| j ¡ D ]\}}||d |< qD|S )N)rD   rª   r«   rG   r‚   rG   )rq   rÎ   r^   rÏ   rz   ry   r‡   rˆ   r:   r:   r;   r^   `  s    ûzFbsRPCCall.marshalN)rc   rd   re   r   r   r±   r   rm   r<   rl   r1   r2   rD   r}   rª   r«   r‚   rG   r_   r^   r:   r:   r:   r;   r²   *  s6   
ø







r²   c                	   @   s¬   e Zd Zddeeeeef ee eeef edœ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¤   rD   r´   rµ   rG   r‚   c	           	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S r8   )r   r   r»   rq   Ú_callsÚ_calls_by_idry   rz   )	r9   r1   r2   r¤   rD   r´   rµ   rG   r‚   r:   r:   r;   r<   o  s    	zFbsService.__init__c                 C   s   | j S r8   r?   r@   r:   r:   r;   r1   �  s    zFbsService.repositoryc                 C   s   | j S r8   rA   r@   r:   r:   r;   r2   …  s    zFbsService.schemac                 C   s   | j S r8   rÉ   r@   r:   r:   r;   r¤   ‰  s    zFbsService.declaration_filec                 C   s   | j S r8   rƒ   r@   r:   r:   r;   rD   �  s    zFbsService.namec                 C   s   | j S r8   )rÒ   r@   r:   r:   r;   r´   ‘  s    zFbsService.callsc                 C   s   | j S r8   )rÓ   r@   r:   r:   r;   rµ   •  s    zFbsService.calls_by_idc                 C   s   | j S r8   r…   r@   r:   r:   r;   rG   ™  s    zFbsService.attrsc                 C   s   | j S r8   r†   r@   r:   r:   r;   r‚   �  s    zFbsService.docsc                 C   s   d  t |  ¡ ¡¡S rZ   r\   r@   r:   r:   r;   r_   ¡  s    zFbsService.__str__c                 C   sj   | j | ji i | jdœ}| jr@| j ¡ D ]\}}| ¡ |d |< q&| jrf| j ¡ D ]\}}||d |< qP|S )N)rD   r¤   r´   rG   r‚   r´   rG   )rq   r»   rz   rÒ   r‡   r^   ry   rˆ   r:   r:   r;   r^   ¤  s    ûzFbsService.marshalN)rc   rd   re   r   r   r²   r   rm   r<   rl   r1   r2   r¤   rD   r´   rµ   rG   r‚   r_   r^   r:   r:   r:   r;   rÐ   n  s6   

ø







rÐ   c                   @   s„   e Zd Zddeedœ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   rD   r}   c                 C   s.   || _ || _|| _|| _|| _i | _|| _dS )ze

        :param repository:
        :param name:
        :param value:
        :param docs:
        N)r   r   rq   rs   Ú_valuery   rz   )r9   r1   r2   rD   r}   r¹   r‚   r:   r:   r;   r<   ¶  s    zFbsEnumValue.__init__c                 C   s   | j S r8   r?   r@   r:   r:   r;   r1   Ì  s    zFbsEnumValue.repositoryc                 C   s   | j S r8   rA   r@   r:   r:   r;   r2   Ð  s    zFbsEnumValue.schemac                 C   s   | j S r8   rƒ   r@   r:   r:   r;   rD   Ô  s    zFbsEnumValue.namec                 C   s   | j S r8   r„   r@   r:   r:   r;   r}   Ø  s    zFbsEnumValue.idc                 C   s   | j S r8   )rÕ   r@   r:   r:   r;   r¹   Ü  s    zFbsEnumValue.valuec                 C   s   | j S r8   r…   r@   r:   r:   r;   rG   à  s    zFbsEnumValue.attrsc                 C   s   | j S r8   r†   r@   r:   r:   r;   r‚   ä  s    zFbsEnumValue.docsc                 C   s   d  t |  ¡ ¡¡S rZ   r\   r@   r:   r:   r;   r_   è  s    zFbsEnumValue.__str__c                 C   sD   | j | j| j| j| jdœ}| jr@| j ¡ D ]\}}||d |< q*|S )N)r}   rD   rG   r‚   r¹   rG   )rs   rq   ry   rz   rÕ   r‡   rˆ   r:   r:   r;   r^   ë  s    ûzFbsEnumValue.marshalN)rc   rd   re   r   r   r<   rl   r1   r2   rD   r}   r¹   rG   r‚   r_   r^   r:   r:   r:   r;   rÔ   µ  s*   ü






rÔ   c                   @   sÚ   e Zd ZdZddeeeeeef ee e	eeee
f edœ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¤   rD   r}   ÚvaluesÚvalues_by_idÚis_unionÚunderlying_typerG   r‚   c                 C   sF   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
d S r8   )r   r   r»   rq   rs   Ú_valuesÚ_values_by_idÚ	_is_unionÚ_underlying_typery   rz   )r9   r1   r2   r¤   rD   r}   rØ   rÙ   rÚ   rÛ   rG   r‚   r:   r:   r;   r<      s    zFbsEnum.__init__c                 C   s   | j S r8   r?   r@   r:   r:   r;   r1     s    zFbsEnum.repositoryc                 C   s   | j S r8   rA   r@   r:   r:   r;   r2     s    zFbsEnum.schemac                 C   s   | j S r8   rÉ   r@   r:   r:   r;   r¤   "  s    zFbsEnum.declaration_filec                 C   s   | j S r8   rƒ   r@   r:   r:   r;   rD   &  s    zFbsEnum.namec                 C   s   | j S r8   r„   r@   r:   r:   r;   r}   *  s    z
FbsEnum.idc                 C   s   | j S r8   )rÜ   r@   r:   r:   r;   rØ   .  s    zFbsEnum.valuesc                 C   s   | j S r8   )rÝ   r@   r:   r:   r;   rÙ   2  s    zFbsEnum.values_by_idc                 C   s   | j S r8   )rÞ   r@   r:   r:   r;   rÚ   6  s    zFbsEnum.is_unionc                 C   s   | j S r8   )rß   r@   r:   r:   r;   rÛ   :  s    zFbsEnum.underlying_typec                 C   s   | j S r8   r…   r@   r:   r:   r;   rG   >  s    zFbsEnum.attrsc                 C   s   | j S r8   r†   r@   r:   r:   r;   r‚   B  s    zFbsEnum.docsc                 C   s   d  t |  ¡ ¡¡S rZ   r\   r@   r:   r:   r;   r_   F  s    zFbsEnum.__str__c                 C   s|   | j | ji | jtj | jd ¡i | jdœ}| jrR| j 	¡ D ]\}}| 
¡ |d |< q8| jrx| j 	¡ D ]\}}||d |< qb|S )N)rD   r}   rØ   rÚ   rÛ   rG   r‚   rØ   rG   )rq   rs   rÞ   r   r`   ra   rß   rz   rÜ   r‡   r^   ry   rˆ   r:   r:   r;   r^   I  s    ù	zFbsEnum.marshalN)rc   rd   re   rf   r   r   r   rÔ   r   r   rm   r<   rl   r1   r2   r¤   rD   r}   rØ   rÙ   rÚ   rÛ   rG   r‚   r_   r^   r:   r:   r:   r;   rÖ   ù  sJ   

õ










rÖ   c                   @   s„  e Zd ZdZd-deeeeeeeeef  ee	e
eeef  e
ee  e
eeef  e
ee  e
eeef  e
ee  dœ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!d"„ ƒZed#d$„ ƒZd%d&„ Zeeef d'œd(d)„Z e!d.de"ee#j$e%e& f e
e d d*œd+d,„ƒZ'dS )/r0   z
    Nr/   )r1   Ú	file_nameÚfile_sha256Ú	file_sizeÚ
file_identÚfile_extÚ	fbs_filesÚ
root_tableÚrootÚobjsrC   Ú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   r1   rà   rá   râ   rã   rä   rå   ræ   rç   rè   rC   ré   rê   rë   rì   r:   r:   r;   r<   `  s    "zFbsSchema.__init__c                 C   s   | j S r8   r?   r@   r:   r:   r;   r1   ’  s    zFbsSchema.repositoryc                 C   s   | j S r8   )rí   r@   r:   r:   r;   rà   –  s    zFbsSchema.file_namec                 C   s   | j S r8   )rî   r@   r:   r:   r;   rá   š  s    zFbsSchema.file_sha256c                 C   s   | j S r8   )rï   r@   r:   r:   r;   râ   ž  s    zFbsSchema.file_sizec                 C   s   | j S r8   )rð   r@   r:   r:   r;   rã   ¢  s    zFbsSchema.file_identc                 C   s   | j S r8   )rñ   r@   r:   r:   r;   rä   ¦  s    zFbsSchema.file_extc                 C   s   | j S r8   )rò   r@   r:   r:   r;   rå   ª  s    zFbsSchema.fbs_filesc                 C   s   | j S r8   )ró   r@   r:   r:   r;   ræ   ®  s    zFbsSchema.root_tablec                 C   s   | j S r8   )rô   r@   r:   r:   r;   rç   ²  s    zFbsSchema.rootc                 C   s   | j S r8   ©rõ   r@   r:   r:   r;   rè   ¶  s    zFbsSchema.objsc                 C   s   | j S r8   )rö   r@   r:   r:   r;   rC   º  s    zFbsSchema.objs_by_idc                 C   s   | j S r8   ©r÷   r@   r:   r:   r;   ré   ¾  s    zFbsSchema.enumsc                 C   s   | j S r8   )rø   r@   r:   r:   r;   rê   Â  s    zFbsSchema.enums_by_idc                 C   s   | j S r8   ©rù   r@   r:   r:   r;   rë   Æ  s    zFbsSchema.servicesc                 C   s   | j S r8   )rú   r@   r:   r:   r;   rì   Ê  s    zFbsSchema.services_by_idc                 C   s   d  tj|  ¡ dd�¡S )Nr[   éÿ   )Úwidthr\   r@   r:   r:   r;   r_   Î  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rV| j ¡ ndi i i dœ}| jrŽ| j ¡ D ]\}}| ¡ |d |< qt| j
r¸| j
 ¡ D ]\}}| ¡ |d |< qž| jrâ| j ¡ D ]\}}| ¡ |d |< qÈ|S )z

        :return:
        N)	ÚidentÚextrD   ÚfilesÚsha256ÚsizeÚobjectsré   rë   )r2   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)r1   ÚsfileÚfilenamer>   c           .      C   s²  t |ƒtkr8tj |¡r8t|dƒ�}| ¡ }W 5 Q R X n| ¡ }t ¡ }| 	|¡ t
 |d¡}| ¡ }|dk	rx| d¡}| ¡ }|dk	r’| d¡}g }	t| ¡ ƒD ]l}
| |
¡}| ¡ }|rÆ| d¡}g }t| ¡ ƒD ]&}| |¡}|rò| d¡}| |¡ qÖ|	 ||dœ¡ q¢| ¡ }|dk	�r.t | |¡}t| |t|ƒ| ¡ |||	||d�	}i }g }t| ¡ ƒD �]}
| |
¡}| ¡ }|�rŒ| d¡}| ¡ }|�r¤| d¡}|  ¡ }i }g }t| !¡ ƒD ]l}| "|¡}| ¡ }|�ræ| d¡}| #¡ }t$|ƒ}t%| |||||d�}||k�st&‚|||< | |¡ �qÀt'| ||||
||| (¡ |t)|ƒt$|ƒd�}||k�sft&‚|||< | |¡ �qd||_*||_+i } g }!t| ,¡ ƒD ]F}
| -|
¡}"tj| ||"|!d	�}#|#j.| k�sÌt&‚|#| |#j.< |! |#¡ �qœ| |_/|!|_0i }$g }%t| 1¡ ƒD ]œ}
| 2|
¡}&|& ¡ }'|'�r*|' d¡}'|& ¡ }(|(�rB|( d¡}(t$|&ƒ})t)|&ƒ}*t3| ||&|!d	�\}+},t4| ||(|'|+|,|*|)d
�}-|'|$k�sŒt&‚|-|$|'< |% |-¡ �q|$|_5|%|_6|S )ze

        :param repository:
        :param sfile:
        :param filename:
        :return:
        Úrbr   Nr‹   )r
  Zincluded_filenames)	r1   rà   râ   rá   rã   rä   rå   ræ   rç   )r1   r2   rD   r}   r¹   r‚   r×   r¢   rÑ   )7r|   r   r  r  ÚisfileÚopenÚreadÚhashlibr  ÚupdateÚ_SchemaZGetRootAsSchemaZ	FileIdentr�   ZFileExtrŒ   ZFbsFilesLengthZFbsFilesZFilenameZIncludedFilenamesLengthZIncludedFilenamesr“   Z	RootTabler±   rÌ   r0   rš   Ú	hexdigestZEnumsLengthZEnumsr–   r­   ZUnderlyingTypeZValuesLengthZValuesrŽ   r•   rÔ   rE   rÖ   ZIsUnionr�   r÷   rø   ZObjectsLengthZObjectsrD   rõ   rö   ZServicesLengthZServicesrº   rÐ   rù   rú   ).r1   r	  r
  ÚfdÚdataÚmrç   rã   rä   rå   r    Zschema_fileZschema_file_filenameZschema_file_included_filenamesr�   Zincluded_filenameræ   r2   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è   rC   rÊ   rb   rë   rì   r³   Zsvc_nameZsvc_declaration_filer‚   rG   r´   rµ   Úservicer:   r:   r;   Úloadò  s    






þÿ
ø




ûö




ùzFbsSchema.load)NNNNNN)N)(rc   rd   re   rf   r   r   r   r   r±   r  r   rÖ   rÐ   r<   rl   r1   rà   rá   râ   rã   rä   rå   ræ   rç   rè   rC   ré   rê   rë   rì   r_   r   r^   rÍ   r   ÚioÚ	RawIOBaser   r   r  r:   r:   r:   r;   r0   \  s~         ñ


ñ2














! þ þr0   )r¹   c                 C   sN   | j jtjkr>tj| j j }t |ƒ|krJtd t |ƒ|¡ƒ‚ndsJtdƒ‚d S )Nz&invalid type {} for value, expected {}FrB   )r|   r3   r   rk   r   rS   rE   )rž   r¹   Zexpected_typer:   r:   r;   Úvalidate_scalar™  s
    r  c                   @   s:  e Zd ZdZedœdd„Zeed dœdd„ƒZeed dœd	d
„ƒZe	edœdd„ƒZ
e	eeef dœdd„ƒZe	eeef dœdd„ƒZe	eeef dœdd„ƒZe	eeef dœdd„ƒZe	dd„ ƒZeeeef dœdd„Zd(dd„Zdd„ Zdd „ Zee ee d!œd"d#„Zeee eeef ee d$œd%d&„Zd'S ))r/   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   s
   t ƒ }|S r8   ©r/   )r
  Úcatalogr:   r:   r;   Úfrom_archive¶  s    zFbsRepository.from_archive)Úaddressr>   c                 C   s
   t ƒ }|S r8   r!  )r$  r"  r:   r:   r;   Úfrom_address»  s    zFbsRepository.from_addressr=   c                 C   s   | j S r8   )r  r@   r:   r:   r;   r  À  s    zFbsRepository.basemodulec                 C   s   | j S r8   )r   r@   r:   r:   r;   ÚschemasÄ  s    zFbsRepository.schemasc                 C   s   | j S r8   rû   r@   r:   r:   r;   rè   È  s    zFbsRepository.objsc                 C   s   | j S r8   rü   r@   r:   r:   r;   ré   Ì  s    zFbsRepository.enumsc                 C   s   | j S r8   rý   r@   r:   r:   r;   rë   Ð  s    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 |¡rXt|ƒ d¡D ]2}t j ||j¡}|| jkrL| |¡ q"|d7 }q"n t j 	|¡r„|| jkrz| |¡ qø|d7 }ntd|krê| 
d¡D ]P}t j |¡}t j 	|¡rØ|| jkrÈ| |¡ qætd |¡ƒ q–td |¡ƒ‚q–ntd |¡ƒ‚d}d}d}	|D ]¾}t | |¡}
|
j ¡ D ]*}|j| jk�r>|d7 }n|| j|j< �q"|
j ¡ D ]*}|j| jk�rt|d7 }n|| j|j< �qX|
j ¡ D ]*}|j| jk�rª|	d7 }	n|| 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: "{}")r  r  Úisdirr   Zrglobr”   rD   r   r“   r  rT   Ú
expanduserÚprintrS   rY   r0   r  ré   rØ   r÷   rè   rõ   rë   rù   )r9   r
  Z	file_dupsZload_from_filenamesr  ÚfnZfilename_singleZ	enum_dupsZobj_dupsZsvc_dupsr2   r  rb   ÚsvcZ	type_dupsr:   r:   r;   r  Ø  sR    	






zFbsRepository.loadFc                 C   sd   |r:t | j ¡ ƒt | j ¡ ƒt | j ¡ ƒt | j ¡ ƒdœS t| jƒt| jƒt| jƒt| jƒdœS 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 �]R\}}|j d| j¡}| d¡d }|jrHdn|}d |jrZd	nd
|¡}	td t	d d|	ddt
|	ƒ  ¡|d�¡ƒ |r¬t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 �]j}
tj|
jddddddddddd�}|
jjtjk�rn|
jj d¡d }| j |
jj j�r`t	|dd�}nt	||d�}nL|
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%| ƒ �qNqö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 ]È}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�ƒ �qPtƒ  �qvd S )6N)é3   é…   rþ   )rþ   é   é$   )r2  r2  r2  ZwampurirL   rM   Z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   rn   z
Vector[{}]Zwhiteú(ú, ú)r‘   z    {:<36} {} {}é   r   r(  z9                                                         rK   zInterface {}Zyellowz    Interface UUID:  {}z    Interface URIs:  {}.({}|{})Ú	procedureÚtopicZgreenr|   )rI  rH  rQ   )rþ   rþ   rþ   z      {} {} ({}) -> {})r7  ZboldéZ   z
          )rè   r‡   rG   ra   r  rT   r¦   rS   r,  r   rš   ÚtextwrapÚfillr‚   rŸ   Úwrapr|   r3   r   r.   r6   r-   r`   r4   r”   r™   rD   rë   r´   rª   r«   )r9   ZbrownZorangeZpinkZobj_keyrb   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_labelZuriÚepZep_typeZep_colorZ	uri_shortr:   r:   r;   Úprint_summary5  sæ     ÿ

ööþ
 ÿ

ÿ
ö

ý
özFbsRepository.print_summaryc           (      C   s8  | j  ¡ | j ¡ | j ¡ dœ}i }i }i }| ¡ D �]Ì\}}	|	D �]¼}
t|
tƒsvt|
tƒsvt|
tƒsvt	d 
t|
ƒ¡ƒ‚|
}d |j d¡dd… ¡}||_|j d¡d  ¡ |_| d¡d |_||k}||f|k}|räd|||f< |dk�r@| d 
|¡¡}|j| |t||| jd	�}| d
 
|¡¡}|j| |t||| jd	�}nr|dk�r|| d 
|¡¡}|j| |t||| jd	�}d}d}n6|dk�r¤tj| ¡ ddddd�}d}ntd 
|¡ƒ‚||k�rÌg ||< g ||< ||  |¡ |�rð||  |¡ q@||  d¡ q@q2i }| ¡ D ]r}| d¡}tt|ƒƒD ]T}|| }d |d|… ¡}||k�rXg ||< |�r(||| k�r(||  |¡ �q(�qtd 
t |ƒ¡ƒ d}t!ƒ }| ¡ D �]Š\}}d |¡}|�rÚdg| d¡dd…  }ndg}tt|ƒƒD �]}t"j#j|f|d|d … žŽ }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 5 Q R X td 
t|!ƒ|¡ƒ | *|¡ n t(|dƒ�}"|" )|!¡ W 5 Q R X �qì|dk�rD|�r:d 
| d¡d ¡}#d  
| d¡d ¡}$nd}#d}$n8|dk�rt|�rjd! 
| d¡d ¡}#nd"}#d}$nd}#d}$|#�r$zt+|ƒd }W n2 t,k
�rÄ }% ztd# 
|%¡ƒ W 5 d}%~%X Y nX | &d¡}!t"j#j||#g Ž }t"j# ||¡}t(|dƒ�}&|& )|!¡ W 5 Q R X td$ 
t|!ƒ|¡ƒ |$�r¦|| }'d |'¡}zt+|ƒd }W n2 t,k
�r~ }% ztd# 
|%¡ƒ W 5 d}%~%X Y nX | &d¡}!t"j#j||$g Ž }t"j# ||¡}||k�rüt"j# '|¡�rüt" -|¡ t(|dƒ�}&|& )d% &d¡¡ W 5 Q R X | *|¡ t(|dƒ�}&|& )|!¡ W 5 Q R X td$ 
t|!ƒ|¡ƒ �q¦dS )&zm

        :param jinja2_env:
        :param output_dir:
        :param output_lang:
        :return:
        )rb   r  r  zunexpected type {}rL   r   rM   TrJ   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)rE  z: Fr9  )Ú
separatorsÚensure_asciiÚindentÚ	sort_keysz)invalid language "{}" for code generationzNamespaces:
{}
z


rn   r(  z__init__.pyzpy-autobahn/module.py.jinja2)rQ  rÁ   ZimportsrT  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Ð   rE   rS   r|   r”   rD   rT   rÁ   r’   rÂ   rÃ   Zget_templateÚrenderr   r  rU  Údumpsr^   rY   r“   r™   rŒ   rš   r,  r   Úsetr  r  r*  Ú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Ø   ÚitemrR  rÁ   Zis_firstrS  ÚtmplÚcodeZ	test_tmplZ	test_codeZ
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;   r]  µ  s   ý
0

ý	
ý

ý

ü







ÿ


 
	
 


zFbsRepository.render)Úvalidation_typer¹   c           
      C   sÐ  |dkrdS || j kr&td | j ¡ƒ‚| j | }t|ƒtk�rht|j ¡ ƒ}| ¡ D ]ê\}}||jkrxt	d ||j
¡ƒ‚| |¡ |j| }|jjtjkr¬|  |jj|¡ qT|jjtjkrÄtdƒ qT|jjtjk�r4t|tƒsèt|tƒròtdƒ n@t|tƒ�r|D ]}|  |jj|¡ �qnt	d t|ƒ|j
¡ƒ‚qTt||ƒ qT|j�rÌ|�rÌt	d t|ƒ|j
¡ƒ‚�ndt|ƒttfk�r¶|j�s˜t	d t|ƒ|j
¡ƒ‚d	}	|jD ]ò}|	t|ƒk�rÈt	d
 |j
|j
¡ƒ‚||	 }|	d7 }	|jjtjk�rú|  |jj|¡ n˜|jjtjk�rtdƒ n~|jjtjk�rˆt|tƒ�s<t|tƒ�rFtdƒ n@t|tƒ�r~|D ]$}t|jj|ƒ |  |jj|¡ �qVntdƒ n
t||ƒ �q¢t|ƒ|	k�rÌt	d |j
¡ƒ‚nt	d t|ƒ|j
¡ƒ‚dS )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 "{}"r(  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è   rY   rS   r|   rj   r_  r¥   r™   r‡   r   rD   Údiscardr3   r   r.   Úvalidate_objr6   r   r,  r-   r\  r   r   r   r7   r  r¦   ri   ÚtuplerŸ   rš   )
r9   rp  r¹   ÚvtZ	vt_kwargsr‰   rŠ   rž   ÚveÚidxr:   r:   r;   ru  �  sl    






 ÿ



zFbsRepository.validate_obj)rp  ÚargsÚkwargsr>   c           
      C   sú  |dkrdS || j kr,td |t| j ƒ¡ƒ‚| j | }d}t|rH| ¡ ng ƒ}|jD �]T}|jsvd|jksvd|jk�rf|dksŠ|t|ƒkržt	d |j
|j
¡ƒ‚|| }|d7 }|jjtjkrÎ|  |jj|¡ n–|jjtjkrætdƒ n~|jjtjk�rZt|tƒ�st|tƒ�rtd	ƒ n@t|tƒ�rP|D ]$}	t|jj|	ƒ |  |jj|	¡ �q(ntd
ƒ n
t||ƒ qTd|jk�rž|j
|k�rª||j
 }tdƒ | |j
¡ qTdsTtdƒ‚qTt|ƒ|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 "{}"r(  rq  rr  rs  z	FIXME-003Fzshould not arrive herez/{} unexpected positional arguments in type "{}"z/{} unexpected keyword arguments {} in type "{}")rè   rY   rS   rš   r_  r™   rŸ   rH   rG   r   rD   r|   r3   r   r.   ru  r6   r   r,  r-   r\  r   r   r   r7   r  rt  rE   ri   )
r9   rp  rz  r{  rw  Zargs_idxZkwargs_keysrž   r¹   rx  r:   r:   r;   Úvalidateï  sJ    





zFbsRepository.validateN)F) rc   rd   re   rf   r   r<   rÍ   r#  r%  rl   r  r   r0   r&  r±   rè   rÖ   ré   rÐ   rë   r'  r
   r   r  r/  rP  r]  r   r	   ru  r   r~  r:   r:   r:   r;   r/   ¥  s4   
M
  Ybr/   )N)N)2rU  r  r  r]   r  rK  Ú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   rh   Z"zlmdb.flatbuffers.reflection.Fieldr   r   r   rm   ro   r�   r•   r¡   rº   r±   r²   rÐ   rÔ   rÖ   r0   r  r/   r:   r:   r:   r;   Ú<module>   sH   $  ;d
J
Y DGDc  ?