o
    ȷe5                     @   s   d 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G dd deZG dd de	ZdS )z-
Represents an EC2 Elastic Network Interface
    )BotoClientError)TaggedEC2Object)	ResultSet)Groupc                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )
Attachmenta`  
    :ivar id: The ID of the attachment.
    :ivar instance_id: The ID of the instance.
    :ivar device_index: The index of this device.
    :ivar status: The status of the device.
    :ivar attach_time: The time the device was attached.
    :ivar delete_on_termination: Whether the device will be deleted
        when the instance is terminated.
    c                 C   s.   d | _ d | _d | _d| _d | _d | _d| _d S )Nr   F)idinstance_idinstance_owner_iddevice_indexstatusattach_timedelete_on_terminationself r   P/var/www/ideatree/venv/lib/python3.10/site-packages/boto/ec2/networkinterface.py__init__+   s   
zAttachment.__init__c                 C   
   d| j  S )NzAttachment:%sr   r   r   r   r   __repr__4      
zAttachment.__repr__c                 C      d S Nr   r   nameattrs
connectionr   r   r   startElement7      zAttachment.startElementc                 C   s   |dkr	|| _ d S |dkr|| _d S |dkrt|| _d S |dkr&|| _d S |dkr/|| _d S |dkr8|| _d S |dkrL| dkrGd	| _d S d
| _d S t	| || d S )NattachmentId
instanceIddeviceIndexinstanceOwnerIdr   
attachTimedeleteOnTerminationtrueTF)
r   r   intr
   r	   r   r   lowerr   setattrr   r   valuer   r   r   r   
endElement:   s"   






zAttachment.endElementN)__name__
__module____qualname____doc__r   r   r   r+   r   r   r   r   r       s    
	r   c                       sn   e Zd ZdZd fdd	Zdd Z fddZd	d
 Zdd ZdddZ	dddZ
dddZdddZ  ZS )NetworkInterfacea  
    An Elastic Network Interface.

    :ivar id: The ID of the ENI.
    :ivar subnet_id: The ID of the VPC subnet.
    :ivar vpc_id: The ID of the VPC.
    :ivar description: The description.
    :ivar owner_id: The ID of the owner of the ENI.
    :ivar requester_managed:
    :ivar status: The interface's status (available|in-use).
    :ivar mac_address: The MAC address of the interface.
    :ivar private_ip_address: The IP address of the interface within
        the subnet.
    :ivar source_dest_check: Flag to indicate whether to validate
        network traffic to or from this network interface.
    :ivar groups: List of security groups associated with the interface.
    :ivar attachment: The attachment object.
    :ivar private_ip_addresses: A list of PrivateIPAddress objects.
    Nc                    sh   t t| | d | _d | _d | _d | _d | _d | _d| _	d | _
d | _d | _d | _g | _d | _g | _d S )NF)superr0   r   r   	subnet_idvpc_idavailability_zonedescriptionowner_idrequester_managedr   mac_addressprivate_ip_addresssource_dest_checkgroups
attachmentprivate_ip_addresses)r   r   	__class__r   r   r   e   s   
zNetworkInterface.__init__c                 C   r   )NzNetworkInterface:%sr   r   r   r   r   r   v   r   zNetworkInterface.__repr__c                    sv   t t| |||}|d ur|S |dkrtdtfg| _| jS |dkr*t | _| jS |dkr9tdtfg| _	| j	S d S )NgroupSetitemr<   privateIpAddressesSet)
r1   r0   r   r   r   r;   r   r<   PrivateIPAddressr=   )r   r   r   r   retvalr>   r   r   r   y   s   zNetworkInterface.startElementc                 C   s  |dkr	|| _ d S |dkr|| _d S |dkr|| _d S |dkr$|| _d S |dkr-|| _d S |dkr6|| _d S |dkrJ| dkrEd	| _d S d
| _d S |dkrS|| _d S |dkr\|| _	d S |dkre|| _
d S |dkry| dkrtd	| _d S d
| _d S t| || d S )NnetworkInterfaceIdsubnetIdvpcIdavailabilityZoner5   ownerIdrequesterManagedr%   TFr   
macAddressprivateIpAddresssourceDestCheck)r   r2   r3   r4   r5   r6   r'   r7   r   r8   r9   r:   r(   r)   r   r   r   r+      s6   












zNetworkInterface.endElementc                 C   s   | j |j  d S r   )__dict__update)r   updatedr   r   r   _update   s   zNetworkInterface._updateFc                 C   sL   | j j| jg|d}t|dkr| |d  | jS |r#td| j | jS )a  
        Update the data associated with this ENI by querying EC2.

        :type validate: bool
        :param validate: By default, if EC2 returns no data about the
                         ENI the update method returns quietly.  If
                         the validate param is True, however, it will
                         raise a ValueError exception if no data is
                         returned from EC2.
        dry_runr   z%s is not a valid ENI ID)r   get_all_network_interfacesr   lenrQ   
ValueErrorr   )r   validaterS   rsr   r   r   rO      s   zNetworkInterface.updatec                 C   s   | j j| j|||dS )ar  
        Attach this ENI to an EC2 instance.

        :type instance_id: str
        :param instance_id: The ID of the EC2 instance to which it will
                            be attached.

        :type device_index: int
        :param device_index: The interface nunber, N, on the instance (eg. ethN)

        :rtype: bool
        :return: True if successful
        rR   )r   attach_network_interfacer   )r   r   r
   rS   r   r   r   attach   s   zNetworkInterface.attachc                 C   s    t | jdd}| jj|||dS )a  
        Detach this ENI from an EC2 instance.

        :type force: bool
        :param force: Forces detachment if the previous detachment
                      attempt did not occur cleanly.

        :rtype: bool
        :return: True if successful
        r   NrR   )getattrr<   r   detach_network_interface)r   forcerS   attachment_idr   r   r   detach   s   zNetworkInterface.detachc                 C   s   | j j| j|dS )NrR   )r   delete_network_interfacer   )r   rS   r   r   r   delete   s   zNetworkInterface.deleter   )FF)F)r,   r-   r.   r/   r   r   r   r+   rQ   rO   rZ   r_   ra   __classcell__r   r   r>   r   r0   P   s     


r0   c                   @   s2   e Zd Z		d
ddZdd Zdd Zdd	 ZdS )rC   Nc                 C   s   || _ || _|| _d S r   )r   r9   primary)r   r   r9   rc   r   r   r   r      s   
zPrivateIPAddress.__init__c                 C   r   r   r   r   r   r   r   r      r   zPrivateIPAddress.startElementc                 C   s8   |dkr	|| _ d S |dkr| dkrdnd| _d S d S )NrL   rc   r%   TF)r9   r'   rc   r)   r   r   r   r+      s
   
zPrivateIPAddress.endElementc                 C   s   d| j | jf S )Nz PrivateIPAddress(%s, primary=%s))r9   rc   r   r   r   r   r      s   zPrivateIPAddress.__repr__)NNN)r,   r-   r.   r   r   r+   r   r   r   r   r   rC      s    
rC   c                   @   s   e Zd Zdd ZdddZdS )NetworkInterfaceCollectionc                 G   s   |  | d S r   )extend)r   
interfacesr   r   r   r     s   z#NetworkInterfaceCollection.__init__ c                 C   s  t | D ]\}}d||f }|jd urt|j||d < |jd ur+t|j||d < nd||d < |jd ur?t|j||d < |jd urMt|j||d < |jd ur]|jrWdnd||d	 < |jd urkt|j||d
 < |jd uryt|j||d < |j	d urt |j	D ]\}}d||f }t|||< q|j
d urt |j
D ]#\}	}
d||	f }t|
j||d < |
jd ur|
jrdnd||d < q|jd ur||d  dvrtdt| dkrtd|d }|jrd||< qd||< qd S )Nz%sNetworkInterface.%s.NetworkInterfaceIdDeviceIndexr   SubnetIdDescriptionr%   falseDeleteOnTerminationSecondaryPrivateIpAddressCountPrivateIpAddressz%sSecurityGroupId.%sz%sPrivateIpAddresses.%sz.PrivateIpAddressz.Primary)r   0zcOnly the interface with device index of 0 can be provided when using 'associate_public_ip_address'.   zLOnly one interface can be provided when using 'associate_public_ip_address'.AssociatePublicIpAddress)	enumeratenetwork_interface_idstrr
   r2   r5   r   "secondary_private_ip_address_countr9   r;   r=   rc   associate_public_ip_addressr   rU   )r   paramsprefixispecfull_prefixjgroup_idquery_param_keykip_addrquery_param_key_prefixkeyr   r   r   build_list_params	  sf   


















z,NetworkInterfaceCollection.build_list_paramsN)rg   )r,   r-   r.   r   r   r   r   r   r   rd     s    rd   c                   @   s"   e Zd Z						dddZdS )NetworkInterfaceSpecificationNc                 C   s@   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	d S r   )
rt   r
   r2   r5   r9   r;   r   r=   rv   rw   )r   rt   r
   r2   r5   r9   r;   r   r=   rv   rw   r   r   r   r   O  s   
z&NetworkInterfaceSpecification.__init__)
NNNNNNNNNN)r,   r-   r.   r   r   r   r   r   r   N  s    r   N)r/   boto.exceptionr   boto.ec2.ec2objectr   boto.resultsetr   boto.ec2.groupr   objectr   r0   rC   listrd   r   r   r   r   r   <module>   s   0 !I