o
    ϐxe                     @   sj   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
 d
ZdS )    )StringION)IO   )ffilib)NetDefinitionNetDefinitionIterator)Parser)_checked_lib_callc                   @   sr  e Zd Zdd Zdd ZdefddZdd	 Zd
efddZ	d5dedefddZ
d6dedefddZ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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/d0Zedefd1d2Zedefd3d4ZdS )7Statec                 C   s   t  | _d S N)r   netplan_state_new_ptrself r   //usr/lib/python3/dist-packages/netplan/state.py__init__"   s   zState.__init__c                 C   s   t d| j}t| d S )NzNetplanState **)r   newr   r   netplan_state_clear)r   refr   r   r   __del__%   s   zState.__del__	netdef_idc                 C   s(   t | j|d}|st t| |S Nutf-8)r   netplan_state_get_netdefr   encode
IndexErrorr   )r   r   ptrr   r   r   __getitem__)   s   
zState.__getitem__c                 C   s   t | jS r   )r   netplan_state_get_netdefs_sizer   r   r   r   r   __len__/   s   zState.__len__parserc                 C   s   t tj| j|j d S r   )r
   r   #netplan_state_import_parser_resultsr   )r   r"   r   r   r   import_parser_results2   s   zState.import_parser_resultsNfilenamerootdirc                 C   s>   |r| dntj}|r| dntj}ttj| j|| d S r   )r   r   NULLr
   r   netplan_state_write_yaml_filer   )r   r%   r&   namerootr   r   r   _write_yaml_file:   s   zState._write_yaml_filedefault_filenamec                 C   s4   | d}|r| dntj}ttj| j|| d S r   )r   r   r'   r
   r   #netplan_state_update_yaml_hierarchyr   )r   r,   r&   r)   r*   r   r   r   _update_yaml_hierarchy?   s   
zState._update_yaml_hierarchyoutput_filec                 C   s   t |tr8tjdd}ttj| j| t|dtj	}t|dtj
 t||}t| ||d d S | }ttj| j| d S )Nnetplan_temp_file)r)   r   r   )
isinstancer   osmemfd_creater
   r   netplan_state_dump_yamlr   lseekSEEK_CURSEEK_SETreadclosewritedecodefileno)r   r/   fdsizedatar   r   r   
_dump_yamlD   s   

zState._dump_yamlreturnc                 C   s   t tt| jdS r   )r   stringr   netplan_backend_namenetplan_state_get_backendr   r;   r   r   r   r   backendQ   s   zState.backendc                 C   s   t dd t| d D S )Nc                 s       | ]}|j |fV  qd S r   id.0ndr   r   r   	<genexpr>W       z State.netdefs.<locals>.<genexpr>dictr   r   r   r   r   netdefsU      zState.netdefsc                 C      t dd t| dD S )Nc                 s   rF   r   rG   rI   r   r   r   rL   [   rM   z"State.ethernets.<locals>.<genexpr>	ethernetsrN   r   r   r   r   rS   Y   rQ   zState.ethernetsc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL   _   rM   zState.modems.<locals>.<genexpr>modemsrN   r   r   r   r   rT   ]   rQ   zState.modemsc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL   c   rM   zState.wifis.<locals>.<genexpr>wifisrN   r   r   r   r   rU   a   rQ   zState.wifisc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL   g   rM   zState.vlans.<locals>.<genexpr>vlansrN   r   r   r   r   rV   e   rQ   zState.vlansc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL   k   rM   z State.bridges.<locals>.<genexpr>bridgesrN   r   r   r   r   rW   i   rQ   zState.bridgesc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL   o   rM   zState.bonds.<locals>.<genexpr>bondsrN   r   r   r   r   rX   m   rQ   zState.bondsc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL   s   rM   z&State.dummy_devices.<locals>.<genexpr>zdummy-devicesrN   r   r   r   r   dummy_devicesq   rQ   zState.dummy_devicesc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL   w   rM   z State.tunnels.<locals>.<genexpr>tunnelsrN   r   r   r   r   rZ   u   rQ   zState.tunnelsc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL   {   rM   z*State.virtual_ethernets.<locals>.<genexpr>zvirtual-ethernetsrN   r   r   r   r   virtual_ethernetsy   rQ   zState.virtual_ethernetsc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL      rM   zState.vrfs.<locals>.<genexpr>vrfsrN   r   r   r   r   r\   }   rQ   z
State.vrfsc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL      rM   z"State.ovs_ports.<locals>.<genexpr>z
_ovs-portsrN   r   r   r   r   	ovs_ports   rQ   zState.ovs_portsc                 C   rR   )Nc                 s   rF   r   rG   rI   r   r   r   rL      rM   z#State.nm_devices.<locals>.<genexpr>z
nm-devicesrN   r   r   r   r   
nm_devices   rQ   zState.nm_devices)NNr   )__name__
__module____qualname__r   r   strr   r!   r	   r$   r+   r.   r   r@   propertyrE   r   rP   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r   r   r   r   r   !   sJ    r   )ior   r2   typingr   _netplan_cffir   r   netdefr   r   r"   r	   _utilsr
   r   r   r   r   r   <module>   s   	