o
    åÅe?  ã                   @   sZ   d dl Z d dlmZ G dd„ deƒZdd„ Ze  d¡Zdd	„ Zd
d„ Z	dd„ Z
dd„ ZdS )é    N)Úerrorc                   @   s@   e Zd Zdd„ Zddd„Zdd„ Zddd	„Zd
d„ Zdd„ ZdS )ÚParserc                 C   s,   || _ || _t|tƒs|  d¡ tƒ | _d S )NzObject expected.)ÚnameÚjsonÚ
isinstanceÚdictÚ_Parser__raise_errorÚsetÚused)Úselfr   r   © r   ú//usr/lib/python3/dist-packages/ovs/db/parser.pyÚ__init__   s
   

zParser.__init__Nc                 C   s¨   || j v rI| j |¡ t| j | ƒ}t|ƒrd|v r|S zt|ƒr2t|t|ƒƒs5|  d| ¡ W |S W |S W |S  t	yH   |  d| ¡ Y |S w |sR|  d| ¡ |S )NÚidzType mismatch for member '%s'.z Required '%s' member is missing.)
r   r
   ÚaddÚfloat_to_intÚis_identifierÚlenr   Útupler   Ú	TypeError)r   r   ÚtypesÚoptionalÚdefaultÚmemberr   r   r   Ú__get   s(   
üüþþzParser.__getc                 C   s   |   ||d¡S )NF©Ú_Parser__get)r   r   r   r   r   r   Úget-   s   z
Parser.getc                 C   s   |   ||d|¡S )NTr   )r   r   r   r   r   r   r   Úget_optional0   s   zParser.get_optionalc                 C   s   t  d| j|f | j¡‚)NzParsing %s failed: %s)r   ÚErrorr   r   )r   Úmessager   r   r   Ú__raise_error3   s   ÿzParser.__raise_errorc                 C   sb   t | jƒt | jƒ }|r/| ¡ }t|ƒdkrdt|ƒ }n|r"d}nd}|  d||f ¡ d S d S )Né   zand %d other members arezand 1 other member areÚisz+Member '%s' %s present but not allowed here)r	   r   r
   Úpopr   r   )r   Úmissingr   Úpresentr   r   r   Úfinish7   s   
ÿøzParser.finish©N)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r'   r   r   r   r   r      s    

r   c                 C   s:   t | tƒrt| ƒ}|| krd|  krdk r|S  | S | S )Nlüÿÿÿ       l          )r   ÚfloatÚint)ÚxÚintegerr   r   r   r   E   s   
ÿr   z[_a-zA-Z][_a-zA-Z0-9]*$c                 C   s   t | tƒo	t | ¡S r(   )r   ÚstrÚid_reÚmatch)Úsr   r   r   r   Q   s   r   c                 C   sp   t g}| tg¡ t|ƒ}| d u rdS t| tƒrdS t| tƒr!dS t| tƒr(dS t| |ƒr/dS t| tƒr6dS dS )NÚnullÚbooleanÚobjectÚarrayÚnumberÚstringz	<invalid>)	r-   Úextendr,   r   Ú
issubclassÚboolr   Úlistr0   )Útype_Únumber_typesr   r   r   Újson_type_to_stringU   s    




r@   c                 C   sT   t | ttfƒrt| ƒdks| d |kst | d t|ƒƒs&t d||f | ¡‚| d S )Né   r   r"   zexpected ["%s", <%s>])r   r=   r   r   r   r   )r   r   r   Údescr   r   r   Úunwrap_jsoni   s   ÿrC   c                 C   s&   t | tƒrt| ƒdkrt d| ¡‚| S )NrA   zexpected 2-element array)r   r=   r   r   r   )r   r   r   r   Úparse_json_pairq   s   rD   )ÚreÚovs.dbr   r6   r   r   Úcompiler1   r   r@   rC   rD   r   r   r   r   Ú<module>   s   1
	