U
    dª/eÝ1  ã                   @   sÒ   d Z ddlm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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ƒZG dd„ deƒZG dd„ dƒZG dd„ deƒZG dd„ dƒZdS )z_
Request/response of PutBucketLifecycleConfiguration and
GetBucketLifecycleConfiguration APIs.
é    )Úabsolute_import)ÚABCMetaé   )ÚBaseRuleÚcheck_status)Úfrom_iso8601utcÚto_iso8601utc)ÚElementÚ
SubElementÚfindÚfindallÚfindtextc                   @   sJ   e Zd ZdZeZddd„Zedd„ ƒZedd„ ƒZ	e
d	d
„ ƒZdd„ ZdS )ÚDateDaysz<Base class holds date and days of Transition and Expiration.Nc                 C   s   || _ || _d S ©N)Ú_dateÚ_days)ÚselfÚdateÚdays© r   ú9/tmp/pip-unpacked-wheel-xery97c7/minio/lifecycleconfig.pyÚ__init__$   s    zDateDays.__init__c                 C   s   | j S )z	Get date.)r   ©r   r   r   r   r   (   s    zDateDays.datec                 C   s   | j S )z	Get days.)r   r   r   r   r   r   -   s    zDateDays.daysc                 C   s0   t t| dƒƒ}t| dƒ}|dk	r(t|ƒ}||fS )zParse XML to date and days.ÚDateÚDaysN)r   r   Úint)Úelementr   r   r   r   r   Úparsexml2   s
    
zDateDays.parsexmlc                 C   s8   | j dk	rt|dt| j ƒƒ | jr4t|dt| jƒƒ |S )úConvert to XML.Nr   r   )r   r
   r   r   Ústr©r   r   r   r   r   Útoxml;   s    
  ÿzDateDays.toxml)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__metaclass__r   Úpropertyr   r   Ústaticmethodr   r!   r   r   r   r   r       s   



r   c                       sF   e Zd ZdZd‡ fdd„	Zedd„ ƒZedd„ ƒZ‡ fd	d
„Z	‡  Z
S )Ú
TransitionzTransition.Nc                    s   t ƒ  ||¡ || _d S r   )Úsuperr   Ú_storage_class)r   r   r   Ústorage_class©Ú	__class__r   r   r   I   s    zTransition.__init__c                 C   s   | j S ©zGet storage class.©r+   r   r   r   r   r,   M   s    zTransition.storage_classc                 C   s*   t |dƒ}|  |¡\}}| ||t|dƒƒS )ú/Create new object with values from XML element.r)   ÚStorageClass)r   r   r   )Úclsr   r   r   r   r   r   ÚfromxmlR   s    
zTransition.fromxmlc                    s.   t |dƒ}tƒ  |¡ | jr*t |d| jƒ |S )r   r)   r2   )r
   r*   r!   r+   r    r-   r   r   r!   Y   s
    
zTransition.toxml)NNN)r"   r#   r$   r%   r   r'   r,   Úclassmethodr4   r!   Ú__classcell__r   r   r-   r   r)   F   s   

r)   c                   @   sF   e Zd ZdZddd„Zedd„ ƒZedd„ ƒZed	d
„ ƒZ	dd„ Z
dS )ÚNoncurrentVersionTransitionzNoncurrent version transition.Nc                 C   s   || _ || _d S r   )Ú_noncurrent_daysr+   )r   Únoncurrent_daysr,   r   r   r   r   e   s    z$NoncurrentVersionTransition.__init__c                 C   s   | j S ©zGet Noncurrent days.©r8   r   r   r   r   r9   i   s    z+NoncurrentVersionTransition.noncurrent_daysc                 C   s   | j S r/   r0   r   r   r   r   r,   n   s    z)NoncurrentVersionTransition.storage_classc                 C   s4   t |dƒ}t|dƒ}|dk	r$t|ƒ}| |t|dƒƒS )r1   r7   ÚNoncurrentDaysNr2   ©r   r   r   ©r3   r   r9   r   r   r   r4   s   s
    

z#NoncurrentVersionTransition.fromxmlc                 C   s:   t |dƒ}| jr"t |dt| jƒƒ | jr6t |d| jƒ |S )r   r7   r<   r2   )r
   r8   r   r+   r    r   r   r   r!   |   s    
z!NoncurrentVersionTransition.toxml)NN)r"   r#   r$   r%   r   r'   r9   r,   r5   r4   r!   r   r   r   r   r7   b   s   



r7   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 )ÚNoncurrentVersionExpirationzNoncurrent version expiration.Nc                 C   s
   || _ d S r   r;   )r   r9   r   r   r   r   ‰   s    z$NoncurrentVersionExpiration.__init__c                 C   s   | j S r:   r;   r   r   r   r   r9   Œ   s    z+NoncurrentVersionExpiration.noncurrent_daysc                 C   s,   t |dƒ}t|dƒ}|dk	r$t|ƒ}| |ƒS )r1   r?   r<   Nr=   r>   r   r   r   r4   ‘   s
    

z#NoncurrentVersionExpiration.fromxmlc                 C   s&   t |dƒ}| jr"t |dt| jƒƒ |S )r   r?   r<   )r
   r8   r   r    r   r   r   r!   š   s    
z!NoncurrentVersionExpiration.toxml)N)
r"   r#   r$   r%   r   r'   r9   r5   r4   r!   r   r   r   r   r?   †   s   


r?   c                       sF   e Zd ZdZd‡ fdd„	Zedd„ ƒZedd„ ƒZ‡ fd	d
„Z	‡  Z
S )Ú
ExpirationzExpiration.Nc                    s   t ƒ  ||¡ || _d S r   )r*   r   Ú_expired_object_delete_marker)r   r   r   Úexpired_object_delete_markerr-   r   r   r   ¥   s    zExpiration.__init__c                 C   s   | j S )z!Get expired object delete marker.)rA   r   r   r   r   rB   ª   s    z'Expiration.expired_object_delete_markerc                 C   sV   t |dƒ}|  |¡\}}t|dƒ}|dk	rJ| ¡ dkr>tdƒ‚| ¡ dk}| |||ƒS )r1   r@   ÚExpiredObjectDeleteMarkerN)ÚFalseÚTruez<value of ExpiredObjectDeleteMarker must be 'True' or 'False'rE   )r   r   r   ÚtitleÚ
ValueError)r3   r   r   r   rB   r   r   r   r4   ¯   s    
 ÿÿ
ÿzExpiration.fromxmlc                    s:   t |dƒ}tƒ  |¡ | jdk	r6t |dt| jƒ ¡ ƒ |S )r   r@   NrC   )r
   r*   r!   rA   r   Úlowerr    r-   r   r   r!   Ã   s    

ýzExpiration.toxml)NNN)r"   r#   r$   r%   r   r'   rB   r5   r4   r!   r6   r   r   r-   r   r@   ¢   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 )ÚAbortIncompleteMultipartUploadz"Abort incomplete multipart upload.Nc                 C   s
   || _ d S r   ©Ú_days_after_initiation)r   Údays_after_initiationr   r   r   r   Ó   s    z'AbortIncompleteMultipartUpload.__init__c                 C   s   | j S )zGet days after initiation.rJ   r   r   r   r   rL   Ö   s    z4AbortIncompleteMultipartUpload.days_after_initiationc                 C   s,   t |dƒ}t|dƒ}|dk	r$t|ƒ}| |ƒS )r1   rI   ÚDaysAfterInitiationNr=   )r3   r   rL   r   r   r   r4   Û   s
    

z&AbortIncompleteMultipartUpload.fromxmlc                 C   s&   t |dƒ}| jr"t |dt| jƒƒ |S )r   rI   rM   )r
   rK   r   r    r   r   r   r!   ä   s    
ýz$AbortIncompleteMultipartUpload.toxml)N)
r"   r#   r$   r%   r   r'   rL   r5   r4   r!   r   r   r   r   rI   Ð   s   


rI   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‡ fdd„Z‡  ZS )ÚRulezLifecycle rule. Nc	           	         sf   t |ƒ |s$|s$|s$|s$|s$tdƒ‚|s0tdƒ‚tƒ  ||¡ || _|| _|| _|| _|| _|| _	d S )Nz§at least one of action (AbortIncompleteMultipartUpload, Expiration, NoncurrentVersionExpiration, NoncurrentVersionTransition or Transition) must be specified in a rulezRule filter must be provided)
r   rG   r*   r   Ú_statusÚ"_abort_incomplete_multipart_uploadÚ_expirationÚ_noncurrent_version_expirationÚ_noncurrent_version_transitionÚ_transition)	r   ÚstatusÚ!abort_incomplete_multipart_uploadÚ
expirationÚrule_filterÚrule_idÚnoncurrent_version_expirationÚnoncurrent_version_transitionÚ
transitionr-   r   r   r   ó   s*    ÿþýÿÿzRule.__init__c                 C   s   | j S )zGet status.)rO   r   r   r   r   rU     s    zRule.statusc                 C   s   | j S )z&Get abort incomplete multipart upload.)rP   r   r   r   r   rV     s    z&Rule.abort_incomplete_multipart_uploadc                 C   s   | j S )zGet expiration.)rQ   r   r   r   r   rW     s    zRule.expirationc                 C   s   | j S )z"Get noncurrent version expiration.)rR   r   r   r   r   rZ     s    z"Rule.noncurrent_version_expirationc                 C   s   | j S )z"Get noncurrent version transition.)rS   r   r   r   r   r[   $  s    z"Rule.noncurrent_version_transitionc                 C   s   | j S )zGet transition.)rT   r   r   r   r   r\   )  s    zRule.transitionc           
   
   C   s¾   t |ddƒ}t|dƒdkrdnt |¡}t|dƒdkr:dnt |¡}|  |¡\}}t|dƒdkrddnt |¡}t|dƒdkr€dnt |¡}t|dƒdkrœdnt |¡}	| ||||||||	d	S )
r1   ÚStatusTrI   Nr@   r?   r7   r)   )rV   rW   rX   rY   rZ   r[   r\   )	r   r   rI   r4   r@   r   r?   r7   r)   )
r3   r   rU   rV   rW   rX   rY   rZ   r[   r\   r   r   r   r4   .  s6    þþþþþözRule.fromxmlc                    s‚   t |dƒ}t |d| jƒ | jr*| j |¡ | jr<| j |¡ tƒ  |¡ | jrZ| j |¡ | jrl| j |¡ | jr~| j |¡ |S )r   rN   r]   )	r
   rO   rP   r!   rQ   r*   rR   rS   rT   r    r-   r   r   r!   U  s    
z
Rule.toxml)NNNNNNN)r"   r#   r$   r%   r   r'   rU   rV   rW   rZ   r[   r\   r5   r4   r!   r6   r   r   r-   r   rN   ð   s0            ü






&rN   c                   @   s8   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZdd	„ Z	d
S )ÚLifecycleConfigzLifecycle configuration.c                 C   s   |st dƒ‚|| _d S )Nzrules must be provided)rG   Ú_rules)r   Úrulesr   r   r   r   j  s    zLifecycleConfig.__init__c                 C   s   | j S )z
Get rules.)r_   r   r   r   r   r`   o  s    zLifecycleConfig.rulesc                 C   s0   t |dƒ}g }|D ]}| t |¡¡ q| |ƒS )r1   rN   )r   ÚappendrN   r4   )r3   r   Úelementsr`   Útagr   r   r   r4   t  s
    
zLifecycleConfig.fromxmlc                 C   s"   t dƒ}| jD ]}| |¡ q|S )r   ZLifecycleConfiguration)r	   r_   r!   )r   r   Zruler   r   r   r!   }  s    
zLifecycleConfig.toxmlN)
r"   r#   r$   r%   r   r'   r`   r5   r4   r!   r   r   r   r   r^   g  s   

r^   N)r%   Ú
__future__r   Úabcr   Zcommonconfigr   r   Útimer   r   Úxmlr	   r
   r   r   r   r   r)   r7   r?   r@   rI   rN   r^   r   r   r   r   Ú<module>   s   &$. w