
    *Ce                     p    d dl mZ d dlZd dlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZ  G d	 d
      Zy)    )StringION)IO   )ffilib)NetDefinitionNetDefinitionIterator)Parser)_checked_lib_callc                      e Zd Zd Zd ZdefdZd ZdefdZ	dd	ed
efdZ
d ded
efdZdefdZedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zedefd       Zy)!Statec                 6    t        j                         | _        y N)r   netplan_state_new_ptrselfs    //usr/lib/python3/dist-packages/netplan/state.py__init__zState.__init__"   s    ))+	    c                 n    t        j                  d| j                        }t        j                  |       y )NzNetplanState **)r   newr   r   netplan_state_clear)r   refs     r   __del__zState.__del__%   s%    gg'3$r   	netdef_idc                     t        j                  | j                  |j                  d            }|s
t	               t        | |      S Nutf-8)r   netplan_state_get_netdefr   encode
IndexErrorr   )r   r   ptrs      r   __getitem__zState.__getitem__)   s;    **499i6F6Fw6OP,T3''r   c                 @    t        j                  | j                        S r   )r   netplan_state_get_netdefs_sizer   r   s    r   __len__zState.__len__/   s    11$))<<r   parserc                 b    t        t        j                  | j                  |j                         y r   )r   r   #netplan_state_import_parser_resultsr   )r   r(   s     r   import_parser_resultszState.import_parser_results2   s    #AA499fkkZr   Nfilenamerootdirc                     |r|j                  d      nt        j                  }|r|j                  d      nt        j                  }t        t        j
                  | j                  ||       y r   )r!   r   NULLr   r   netplan_state_write_yaml_filer   )r   r,   r-   nameroots        r   _write_yaml_filezState._write_yaml_file:   sF    +3xw'*1w~~g&sxx#;;TYYdSr   default_filenamec                     |j                  d      }|r|j                  d      nt        j                  }t        t        j
                  | j                  ||       y r   )r!   r   r/   r   r   #netplan_state_update_yaml_hierarchyr   )r   r4   r-   r1   r2   s        r   _update_yaml_hierarchyzState._update_yaml_hierarchy?   sA    &&w/*1w~~g&sxx#AA499dTXYr   output_filec                 0   t        |t              rt        j                  d      }t	        t
        j                  | j                  |       t        j                  |dt        j                        }t        j                  |dt        j                         t        j                  ||      }t        j                  |       |j                  |j                  d             y |j                         }t	        t
        j                  | j                  |       y )Nnetplan_temp_file)r1   r   r   )
isinstancer   osmemfd_creater   r   netplan_state_dump_yamlr   lseekSEEK_CURSEEK_SETreadclosewritedecodefileno)r   r8   fdsizedatas        r   
_dump_yamlzState._dump_yamlD   s    k8,&9:Bc99499bI88B2;;/DHHRBKK(772t$DHHRLdkk'23##%Bc99499bIr   returnc                     t        j                  t        j                  t        j                  | j
                                    j                  d      S r   )r   stringr   netplan_backend_namenetplan_state_get_backendr   rE   r   s    r   backendzState.backendQ   s:    zz#2233P3PQUQZQZ3[\]ddelmmr   c                 :    t        d t        | d       D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   id.0nds     r   	<genexpr>z State.netdefs.<locals>.<genexpr>W   s     LBRUUBKL   dictr	   r   s    r   netdefszState.netdefsU   s    L*?d*KLLLr   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   z"State.ethernets.<locals>.<genexpr>[   s     SBRUUBKSrY   	ethernetsrZ   r   s    r   r_   zState.ethernetsY   s    S*?k*RSSSr   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   zState.modems.<locals>.<genexpr>_   s     PBRUUBKPrY   modemsrZ   r   s    r   rb   zState.modems]   s    P*?h*OPPPr   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   zState.wifis.<locals>.<genexpr>c        OBRUUBKOrY   wifisrZ   r   s    r   rf   zState.wifisa       O*?g*NOOOr   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   zState.vlans.<locals>.<genexpr>g   re   rY   vlansrZ   r   s    r   rj   zState.vlanse   rg   r   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   z State.bridges.<locals>.<genexpr>k        QBRUUBKQrY   bridgesrZ   r   s    r   rn   zState.bridgesi       Q*?i*PQQQr   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   zState.bonds.<locals>.<genexpr>o   re   rY   bondsrZ   r   s    r   rr   zState.bondsm   rg   r   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   z&State.dummy_devices.<locals>.<genexpr>s   s     WBRUUBKWrY   zdummy-devicesrZ   r   s    r   dummy_deviceszState.dummy_devicesq   s    W*?o*VWWWr   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   z State.tunnels.<locals>.<genexpr>w   rm   rY   tunnelsrZ   r   s    r   rx   zState.tunnelsu   ro   r   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   z*State.virtual_ethernets.<locals>.<genexpr>{   s     [BRUUBK[rY   zvirtual-ethernetsrZ   r   s    r   virtual_ethernetszState.virtual_ethernetsy   s    [*?FY*Z[[[r   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   zState.vrfs.<locals>.<genexpr>   s     NBRUUBKNrY   vrfsrZ   r   s    r   r~   z
State.vrfs}   s    N*?f*MNNNr   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   z"State.ovs_ports.<locals>.<genexpr>        TBRUUBKTrY   z
_ovs-portsrZ   r   s    r   	ovs_portszState.ovs_ports       T*?l*STTTr   c                 :    t        d t        | d      D              S )Nc              3   8   K   | ]  }|j                   |f  y wr   rS   rU   s     r   rX   z#State.nm_devices.<locals>.<genexpr>   r   rY   z
nm-devicesrZ   r   s    r   
nm_deviceszState.nm_devices   r   r   )NNr   )__name__
__module____qualname__r   r   strr$   r'   r
   r+   r3   r7   r   rJ   propertyrP   r	   r\   r_   rb   rf   rj   rn   rr   ru   rx   r{   r~   r   r    r   r   r   r   !   s   ,%(S (=[F [T Tc T
Zs ZS Z
Jb J n n n M. M M T0 T T Q- Q Q P, P P P, P P R. R R P, P P X4 X X R. R R \#8 \ \ O+ O O U0 U U U1 U Ur   r   )ior   r<   typingr   _netplan_cffir   r   netdefr   r	   r(   r
   _utilsr   r   r   r   r   <module>r      s*   "  	  # 8  %fU fUr   