U
    d/e;                     @   s.  d Z ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z
mZmZmZmZ G dd dZG d	d
 d
eZG dd dZG dd deZG dd deZG dd dZG dd deZG dd dZG dd deZG dd dZG dd dZG dd dZG dd  d ZG d!d" d"eZG d#d$ d$Zd%S )&zGRequest/response of PutBucketReplication and GetBucketReplication APIs.    )absolute_import)ABCMeta   )DISABLEDBaseRulecheck_status)Element
SubElementfindfindallfindtextc                   @   s<   e Zd ZdZeZdd Zedd Ze	dd Z
dd	 Zd
S )StatuszStatus.c                 C   s   t | || _d S N)r   _statusselfstatus r   ;/tmp/pip-unpacked-wheel-xery97c7/minio/replicationconfig.py__init__   s    zStatus.__init__c                 C   s   | j S zGet status.r   r   r   r   r   r   #   s    zStatus.statusc                 C   s   t || j}| t|ddS )/Create new object with values from XML element.r   T)r
   __name__r   clselementr   r   r   fromxml(   s    zStatus.fromxmlc                 C   s    t || jj}t |d| j |S )Convert to XML.r   )r	   	__class__r   r   r   r   r   r   r   toxml.   s    zStatus.toxmlN)r   
__module____qualname____doc__r   __metaclass__r   propertyr   classmethodr   r"   r   r   r   r   r      s   

r   c                   @   s   e Zd ZdZdS )SseKmsEncryptedObjectszSSE KMS encrypted objects.Nr   r#   r$   r%   r   r   r   r   r)   5   s   r)   c                   @   s:   e Zd ZdZdddZedd Zedd Zd	d
 Z	dS )SourceSelectionCriteriazSource selection criteria.Nc                 C   s
   || _ d S r   _sse_kms_encrypted_objects)r   sse_kms_encrypted_objectsr   r   r   r   <   s    z SourceSelectionCriteria.__init__c                 C   s   | j S )zGet SSE KMS encrypted objects.r,   r   r   r   r   r.   ?   s    z1SourceSelectionCriteria.sse_kms_encrypted_objectsc                 C   s*   t |d}| t |ddkrdnt|S )r   r+   r)   N)r
   r)   r   r   r   r   r   r   D   s
    
zSourceSelectionCriteria.fromxmlc                 C   s    t |d}| jr| j| |S )r   r+   )r	   r-   r"   r!   r   r   r   r"   M   s    
zSourceSelectionCriteria.toxml)N)
r   r#   r$   r%   r   r'   r.   r(   r   r"   r   r   r   r   r+   9   s   


r+   c                   @   s   e Zd ZdZdS )ExistingObjectReplicationzExisting object replication.Nr*   r   r   r   r   r/   U   s   r/   c                       s$   e Zd ZdZef fdd	Z  ZS )DeleteMarkerReplicationzDelete marker replication.c                    s   t  | d S r   )superr   r   r    r   r   r   \   s    z DeleteMarkerReplication.__init__)r   r#   r$   r%   r   r   __classcell__r   r   r2   r   r0   Y   s   r0   c                   @   s>   e Zd ZdZeZdddZedd Ze	dd Z
d	d
 ZdS )ReplicationTimeValuezReplication time value.   c                 C   s
   || _ d S r   _minutes)r   minutesr   r   r   r   d   s    zReplicationTimeValue.__init__c                 C   s   | j S )zGet minutes.r6   r   r   r   r   r8   g   s    zReplicationTimeValue.minutesc                 C   s.   t || j}t|d}|dk	r&t|}| |S )r   MinutesN)r
   r   r   int)r   r   r8   r   r   r   r   l   s
    
zReplicationTimeValue.fromxmlc                 C   s.   t || jj}| jdk	r*t |dt| j |S )r   Nr9   )r	   r    r   r7   strr!   r   r   r   r"   u   s    
zReplicationTimeValue.toxmlN)r5   )r   r#   r$   r%   r   r&   r   r'   r8   r(   r   r"   r   r   r   r   r4   `   s   


r4   c                   @   s   e Zd ZdZdS )TimezTime.Nr*   r   r   r   r   r<   }   s   r<   c                   @   sD   e Zd ZdZdd Zedd Zedd Zedd	 Z	d
d Z
dS )ReplicationTimezReplication time.c                 C   s$   |st dt| || _|| _d S )Nztime must be provided)
ValueErrorr   _timer   )r   timer   r   r   r   r      s
    zReplicationTime.__init__c                 C   s   | j S )zGet time value.)r?   r   r   r   r   r@      s    zReplicationTime.timec                 C   s   | j S r   r   r   r   r   r   r      s    zReplicationTime.statusc                 C   s*   t |d}t|}t|dd}| ||S )r   r=   r   T)r
   r<   r   r   )r   r   r@   r   r   r   r   r      s    

zReplicationTime.fromxmlc                 C   s(   t |d}| j| t |d| j |S )r   r=   r   )r	   r?   r"   r   r!   r   r   r   r"      s    
zReplicationTime.toxmlN)r   r#   r$   r%   r   r'   r@   r   r(   r   r"   r   r   r   r   r=      s   


r=   c                   @   s   e Zd ZdZdS )EventThresholdzEvent threshold.Nr*   r   r   r   r   rA      s   rA   c                   @   sD   e Zd ZdZdd Zedd Zedd Zedd	 Z	d
d Z
dS )MetricszMetrics.c                 C   s$   |st dt| || _|| _d S )Nz event threshold must be provided)r>   r   _event_thresholdr   )r   event_thresholdr   r   r   r   r      s
    zMetrics.__init__c                 C   s   | j S )zGet event threshold.)rC   r   r   r   r   rD      s    zMetrics.event_thresholdc                 C   s   | j S r   r   r   r   r   r   r      s    zMetrics.statusc                 C   s*   t |d}t|}t|dd}| ||S )r   rB   r   T)r
   rA   r   r   )r   r   rD   r   r   r   r   r      s    

zMetrics.fromxmlc                 C   s(   t |d}| j| t |d| j |S )r   rB   r   )r	   rC   r"   r   r!   r   r   r   r"      s    
zMetrics.toxmlN)r   r#   r$   r%   r   r'   rD   r   r(   r   r"   r   r   r   r   rB      s   


rB   c                   @   s:   e Zd ZdZdddZedd Zedd Zd	d
 Z	dS )EncryptionConfigzEncryption configuration.Nc                 C   s
   || _ d S r   _replica_kms_key_id)r   replica_kms_key_idr   r   r   r      s    zEncryptionConfig.__init__c                 C   s   | j S )zGet replica KMS key ID.rF   r   r   r   r   rH      s    z#EncryptionConfig.replica_kms_key_idc                 C   s   t |d}| t|dS )r   EncryptionConfigurationReplicaKmsKeyIDr
   r   r   r   r   r   r      s    
zEncryptionConfig.fromxmlc                 C   s   t |d}t |d| j |S )r   rI   rJ   )r	   rG   r!   r   r   r   r"      s    
zEncryptionConfig.toxml)N)
r   r#   r$   r%   r   r'   rH   r(   r   r"   r   r   r   r   rE      s   


rE   c                   @   s:   e Zd ZdZdddZedd Zedd Zd	d
 Z	dS )AccessControlTranslationzAccess control translation.Destinationc                 C   s   |st d|| _d S )Nzowner must be provided)r>   _owner)r   ownerr   r   r   r      s    z!AccessControlTranslation.__init__c                 C   s   | j S )z
Get owner.)rN   r   r   r   r   rO      s    zAccessControlTranslation.ownerc                 C   s   t |d}| t|dS )r   rL   OwnerrK   r   r   r   r   r      s    
z AccessControlTranslation.fromxmlc                 C   s   t |d}t |d| j |S )r   rL   rP   )r	   rN   r!   r   r   r   r"      s    
zAccessControlTranslation.toxmlN)rM   )
r   r#   r$   r%   r   r'   rO   r(   r   r"   r   r   r   r   rL      s   


rL   c                   @   s   e Zd ZdZ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S )rM   zReplication destination.Nc                 C   s:   |st d|| _|| _|| _|| _|| _|| _|| _d S )Nzbucket ARN must be provided)r>   _bucket_arn_access_control_translation_account_encryption_config_metrics_replication_time_storage_class)r   
bucket_arnaccess_control_translationaccountencryption_configmetricsreplication_timestorage_classr   r   r   r     s    zDestination.__init__c                 C   s   | j S )zGet bucket ARN.)rQ   r   r   r   r   rX     s    zDestination.bucket_arnc                 C   s   | j S )z Get access control translation. )rR   r   r   r   r   rY     s    z&Destination.access_control_translationc                 C   s   | j S )zGet account.)rS   r   r   r   r   rZ     s    zDestination.accountc                 C   s   | j S )zGet encryption configuration.)rT   r   r   r   r   r[     s    zDestination.encryption_configc                 C   s   | j S )zGet metrics.)rU   r   r   r   r   r\   $  s    zDestination.metricsc                 C   s   | j S )zGet replication time.)rV   r   r   r   r   r]   )  s    zDestination.replication_timec                 C   s   | j S )zGet storage class.)rW   r   r   r   r   r^   .  s    zDestination.storage_classc           	      C   s   t |d}t |ddkrdnt|}t|d}t|dd}t |ddkrNdnt|}t |ddkrjdnt|}t |d	dkrdnt|}t|d
}| |||||||S )r   rM   rL   NAccountBucketTrI   rB   r=   StorageClass)r
   rL   r   r   rE   rB   r=   )	r   r   rY   rZ   rX   r[   r\   r]   r^   r   r   r   r   3  s,    


   zDestination.fromxmlc                 C   s   t |d}| jr| j| | jdk	r4t |d| j t |d| j | jrT| j| | jrf| j| | jrx| j| | jrt |d| j |S )r   rM   Nr_   r`   ra   )	r	   rR   r"   rS   rQ   rT   rU   rV   rW   r!   r   r   r   r"   M  s    

zDestination.toxml)NNNNNN)r   r#   r$   r%   r   r'   rX   rY   rZ   r[   r\   r]   r^   r(   r   r"   r   r   r   r   rM      s2            








rM   c                       s   e Zd ZdZd f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 fddZ  ZS )RulezReplication rule. Nc
           
         s^   |st dt| t || || _|| _|r<|s<t }|| _|| _|| _	|| _
|	| _d S )Nzdestination must be provided)r>   r   r1   r   _destinationr   r0   _delete_marker_replication_existing_object_replication_prefix	_priority_source_selection_criteria)
r   destinationr   delete_marker_replicationexisting_object_replicationrule_filterrule_idprefixprioritysource_selection_criteriar2   r   r   r   c  s    zRule.__init__c                 C   s   | j S )zGet destination.)rc   r   r   r   r   ri   y  s    zRule.destinationc                 C   s   | j S r   r   r   r   r   r   r   ~  s    zRule.statusc                 C   s   | j S )zGet delete marker replication.)rd   r   r   r   r   rj     s    zRule.delete_marker_replicationc                 C   s   | j S )z Get existing object replication.)re   r   r   r   r   rk     s    z Rule.existing_object_replicationc                 C   s   | j S )zGet prefix.)rf   r   r   r   r   rn     s    zRule.prefixc                 C   s   | j S )zGet priority.)rg   r   r   r   r   ro     s    zRule.priorityc                 C   s   | j S )zGet source selection criteria.)rh   r   r   r   r   rp     s    zRule.source_selection_criteriac              
   C   s   t |ddkrdnt|}t|}t |ddkr8dnt|}| |\}}t|d}t|d}|rpt|}t |ddkrdnt|}	t|dd}
| ||
|||||||		S )	r   r0   Nr/   PrefixPriorityr+   r   T)	r
   r0   r   rM   r/   Zparsexmlr   r:   r+   )r   r   rj   ri   rk   rl   rm   rn   ro   rp   r   r   r   r   r     s0    


    zRule.fromxmlc                    s   t |d}| jr| j| | j| | jr:| j| t | | jdk	r^t |d| j | jdk	rzt |dt| j | j	r| j	| t |d| j
 |S )r   rb   Nrq   rr   r   )r	   rd   r"   rc   re   r1   rf   rg   r;   rh   r   r!   r2   r   r   r"     s    


z
Rule.toxml)NNNNNNN)r   r#   r$   r%   r   r'   ri   r   rj   rk   rn   ro   rp   r(   r   r"   r3   r   r   r2   r   rb   `  s4             







rb   c                   @   sD   e Zd ZdZdd Zedd Zedd Zedd	 Z	d
d Z
dS )ReplicationConfigzReplication configuration.c                 C   s0   |st dt|dkr t d|| _|| _d S )Nzrules must be providedi  z&more than 1000 rules are not supported)r>   len_role_rules)r   rolerulesr   r   r   r     s    zReplicationConfig.__init__c                 C   s   | j S )z	Get role.)ru   r   r   r   r   rw     s    zReplicationConfig.rolec                 C   s   | j S )z
Get rules.)rv   r   r   r   r   rx     s    zReplicationConfig.rulesc                 C   s>   t |dd}t|d}g }|D ]}|t| q| ||S )r   RoleTrb   )r   r   appendrb   r   )r   r   rw   elementsrx   tagr   r   r   r     s    
zReplicationConfig.fromxmlc                 C   s0   t d}t|d| j | jD ]}|| q|S )r   ZReplicationConfigurationry   )r   r	   ru   rv   r"   )r   r   Zruler   r   r   r"     s
    
zReplicationConfig.toxmlN)r   r#   r$   r%   r   r'   rw   rx   r(   r   r"   r   r   r   r   rs     s   


	rs   N)r%   
__future__r   abcr   Zcommonconfigr   r   r   xmlr   r	   r
   r   r   r   r)   r+   r/   r0   r4   r<   r=   rA   rB   rE   rL   rM   rb   rs   r   r   r   r   <module>   s&   $$aj