U
    W+dC                     @   s|   d dl mZ d dlm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dS )    )DBSecurityGroup)ParameterGroup)
StatusInfo)DBSubnetGroup)VPCSecurityGroupMembership)	ResultSetc                   @   sx   e Zd ZdZdddZdd Zdd Zd	d
 Zedd Z	edd Z
dd Zdd ZdddZdddZdddZdS )
DBInstancea  
    Represents a RDS DBInstance

    Properties reference available from the AWS documentation at
    http://goo.gl/sC2Kn

    :ivar connection: connection
    :ivar id: The name and identifier of the DBInstance
    :ivar create_time: The date and time of creation
    :ivar engine: The database engine being used
    :ivar status: The status of the database in a string. e.g. "available"
    :ivar allocated_storage: The size of the disk in gigabytes (int).
    :ivar auto_minor_version_upgrade: Indicates that minor version patches 
        are applied automatically.
    :ivar endpoint: A tuple that describes the hostname and port of
        the instance. This is only available when the database is
        in status "available".
    :ivar instance_class: Contains the name of the compute and memory
        capacity class of the DB Instance.
    :ivar master_username: The username that is set as master username
        at creation time.
    :ivar parameter_groups: Provides the list of DB Parameter Groups
        applied to this DB Instance.
    :ivar security_groups: Provides List of DB Security Group elements
        containing only DBSecurityGroup.Name and DBSecurityGroup.Status
        subelements.
    :ivar availability_zone: Specifies the name of the Availability Zone
        the DB Instance is located in.
    :ivar backup_retention_period: Specifies the number of days for
        which automatic DB Snapshots are retained.
    :ivar preferred_backup_window: Specifies the daily time range during
        which automated backups are created if automated backups are
        enabled, as determined by the backup_retention_period.
    :ivar preferred_maintenance_window: Specifies the weekly time
        range (in UTC) during which system maintenance can occur. (string)
    :ivar latest_restorable_time: Specifies the latest time to which
        a database can be restored with point-in-time restore. (string)
    :ivar multi_az: Boolean that specifies if the DB Instance is a
        Multi-AZ deployment.
    :ivar iops: The current number of provisioned IOPS for the DB Instance.
        Can be None if this is a standard instance.
    :ivar vpc_security_groups: List of VPC Security Group Membership elements
        containing only VpcSecurityGroupMembership.VpcSecurityGroupId and
        VpcSecurityGroupMembership.Status subelements.
    :ivar pending_modified_values: Specifies that changes to the
        DB Instance are pending. This element is only included when changes
        are pending. Specific changes are identified by subelements.
    :ivar read_replica_dbinstance_identifiers: List of read replicas
        associated with this DB instance.
    :ivar status_infos: The status of a Read Replica. If the instance is not a
        for a read replica, this will be blank.
    :ivar character_set_name: If present, specifies the name of the character 
        set that this instance is associated with.
    :ivar subnet_group: Specifies information on the subnet group associated 
        with the DB instance, including the name, description, and subnets 
        in the subnet group.
    :ivar engine_version: Indicates the database engine version.
    :ivar license_model: License model information for this DB instance.
    Nc                 C   s   || _ || _d | _d | _d | _d | _d | _d | _d | _d | _	g | _
g | _g | _d | _d | _d | _d | _d | _d| _d | _d | _d | _d| _d | _d | _d | _d | _d | _d | _d | _d S )NF)
connectionidcreate_timeenginestatusallocated_storageauto_minor_version_upgradeendpointinstance_classmaster_usernameparameter_groupssecurity_groups#read_replica_dbinstance_identifiersavailability_zonebackup_retention_periodpreferred_backup_windowpreferred_maintenance_windowlatest_restorable_timemulti_aziopsvpc_security_groupspending_modified_values_in_endpoint_port_addressstatus_infoscharacter_set_namesubnet_groupengine_versionlicense_model)selfr	   r
    r(   7/tmp/pip-unpacked-wheel-dlxw5sjy/boto/rds/dbinstance.py__init__[   s<    zDBInstance.__init__c                 C   s
   d| j  S )NzDBInstance:%s)r
   r'   r(   r(   r)   __repr__{   s    zDBInstance.__repr__c                 C   s   |dkrd| _ n|dkr.tdtfg| _| jS |dkrLtdtfg| _| jS |dkrjtdtfg| _| jS |d	krt | _	| j	S |d
krt
 | _| jS |dkrtdtfg| _| jS |dkrt | _| jS d S )NEndpointTZDBParameterGroupsZDBParameterGroupZDBSecurityGroupsr   ZVpcSecurityGroupsZVpcSecurityGroupMembershipPendingModifiedValues ReadReplicaDBInstanceIdentifiersZStatusInfosZDBInstanceStatusInfor   )r   r   r   r   r   r   r   r   r.   r   r/   r   r   r"   r   r$   r'   nameattrsr	   r(   r(   r)   startElement~   sB    


zDBInstance.startElementc                 C   s  |dkr|| _ n|dkr$|| _n|dkr6|| _n|dkrH|| _n|dkrZ|| _nz|dkrpt|| _nd|dkr| dk| _nJ|dkr|| _n8|d	kr|| _	n&|d
kr| j
rt|| _n
|dkr| j
r|| _n|dkr| j| jf| _d| _
n|dkr|| _n|dkr&t|| _n|dkr8|| _n|dkrJ|| _n|dkr\|| _nx|dkr|| dkrd| _nX|dkrt|| _nB|dkr|| _n0|dkr|| _n|dkr|| _nt| || d S )NZDBInstanceIdentifierZDBInstanceStatusZInstanceCreateTimeZEngineZAllocatedStorageZAutoMinorVersionUpgradetrueZDBInstanceClassZMasterUsernameZPortZAddressr-   FZAvailabilityZoneZBackupRetentionPeriodZLatestRestorableTimeZPreferredMaintenanceWindowZPreferredBackupWindowZMultiAZTZIopsZCharacterSetNameZEngineVersionZLicenseModel)r
   r   r   r   intr   lowerr   r   r   r   r    r!   r   r   r   r   r   r   r   r   r#   r%   r&   setattrr'   r1   valuer	   r(   r(   r)   
endElement   sb    
















zDBInstance.endElementc                 C   s    t | jdkr| jd S dS dS )z_
        Provide backward compatibility for previous security_group
        attribute.
        r   N)lenr   r+   r(   r(   r)   security_group   s    
zDBInstance.security_groupc                 C   s    t | jdkr| jd S dS dS )z`
        Provide backward compatibility for previous parameter_group
        attribute.
        r   r;   N)r<   r   r+   r(   r(   r)   parameter_group   s    
zDBInstance.parameter_groupc                 C   s   | j || jS )a  
        Create a new DB snapshot of this DBInstance.

        :type identifier: string
        :param identifier: The identifier for the DBSnapshot

        :rtype: :class:`boto.rds.dbsnapshot.DBSnapshot`
        :return: The newly created DBSnapshot
        )r	   Zcreate_dbsnapshotr
   )r'   Zsnapshot_idr(   r(   r)   snapshot   s    
zDBInstance.snapshotc                 C   s   | j | jS )z
        Reboot this DBInstance

        :rtype: :class:`boto.rds.dbsnapshot.DBSnapshot`
        :return: The newly created DBSnapshot
        )r	   Zreboot_dbinstancer
   r+   r(   r(   r)   reboot   s    zDBInstance.rebootFc                 C   sX   | j | j}t|dkr@|D ]}|j| jkr| j|j qn|rRtd| j | jS )a  
        Update the DB instance's status information by making a call to fetch
        the current instance attributes from the service.

        :type validate: bool
        :param validate: By default, if EC2 returns no data about the
            instance 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.
        r   z%s is not a valid Instance ID)r	   Zget_all_dbinstancesr
   r<   __dict__update
ValueErrorr   )r'   validatersir(   r(   r)   rB      s    zDBInstance.update c                 C   s   | j | j||S )ad  
        Delete this DBInstance.

        :type skip_final_snapshot: bool
        :param skip_final_snapshot: This parameter determines whether
            a final db snapshot is created before the instance is
            deleted.  If True, no snapshot is created.  If False, a
            snapshot is created before deleting the instance.

        :type final_snapshot_id: str
        :param final_snapshot_id: If a final snapshot is requested, this
            is the identifier used for that snapshot.

        :rtype: :class:`boto.rds.dbinstance.DBInstance`
        :return: The deleted db instance.
        )r	   Zdelete_dbinstancer
   )r'   Zskip_final_snapshotZfinal_snapshot_idr(   r(   r)   stop  s    
zDBInstance.stopc                 C   s(   | j | j|||||||||	||
||S )a  
        Modify this DBInstance.

        :type param_group: str
        :param param_group: Name of DBParameterGroup to associate with
                            this DBInstance.

        :type security_groups: list of str or list of DBSecurityGroup objects
        :param security_groups: List of names of DBSecurityGroup to
            authorize on this DBInstance.

        :type preferred_maintenance_window: str
        :param preferred_maintenance_window: The weekly time range (in
            UTC) during which maintenance can occur.  Default is
            Sun:05:00-Sun:09:00

        :type master_password: str
        :param master_password: Password of master user for the DBInstance.
            Must be 4-15 alphanumeric characters.

        :type allocated_storage: int
        :param allocated_storage: The new allocated storage size, in GBs.
            Valid values are [5-1024]

        :type instance_class: str
        :param instance_class: The compute and memory capacity of the
            DBInstance.  Changes will be applied at next maintenance
            window unless apply_immediately is True.

            Valid values are:

            * db.m1.small
            * db.m1.large
            * db.m1.xlarge
            * db.m2.xlarge
            * db.m2.2xlarge
            * db.m2.4xlarge

        :type apply_immediately: bool
        :param apply_immediately: If true, the modifications will be
            applied as soon as possible rather than waiting for the
            next preferred maintenance window.
            
        :type new_instance_id: str
        :param new_instance_id: The new DB instance identifier.

        :type backup_retention_period: int
        :param backup_retention_period: The number of days for which
            automated backups are retained.  Setting this to zero
            disables automated backups.

        :type preferred_backup_window: str
        :param preferred_backup_window: The daily time range during
            which automated backups are created (if enabled).  Must be
            in h24:mi-hh24:mi format (UTC).

        :type multi_az: bool
        :param multi_az: If True, specifies the DB Instance will be
            deployed in multiple availability zones.

        :type iops: int
        :param iops: The amount of IOPS (input/output operations per
            second) to Provisioned for the DB Instance. Can be
            modified at a later date.

            Must scale linearly. For every 1000 IOPS provision, you
            must allocated 100 GB of storage space. This scales up to
            1 TB / 10 000 IOPS for MySQL and Oracle. MSSQL is limited
            to 700 GB / 7 000 IOPS.

            If you specify a value, it must be at least 1000 IOPS and
            you must allocate 100 GB of storage.

        :type vpc_security_groups: list
        :param vpc_security_groups: List of VPCSecurityGroupMembership
            that this DBInstance is a memberof.

        :rtype: :class:`boto.rds.dbinstance.DBInstance`
        :return: The modified db instance.
        )r	   Zmodify_dbinstancer
   )r'   Zparam_groupr   r   Zmaster_passwordr   r   r   r   r   r   r   Zapply_immediatelyZnew_instance_idr(   r(   r)   modify&  s    [
zDBInstance.modify)NN)F)FrG   )NNNNNNNNFNNFN)__name__
__module____qualname____doc__r*   r,   r3   r:   propertyr=   r>   r?   r@   rB   rH   rI   r(   r(   r(   r)   r      s4   <
  4



	

             r   c                   @   s   e Zd Zdd Zdd ZdS )r.   c                 C   s   d S Nr(   r0   r(   r(   r)   r3     s    z"PendingModifiedValues.startElementc                 C   s   |dkr|| |< d S )Nr.   r(   r8   r(   r(   r)   r:     s    z PendingModifiedValues.endElementNrJ   rK   rL   r3   r:   r(   r(   r(   r)   r.     s   r.   c                   @   s   e Zd Zdd Zdd ZdS )r/   c                 C   s   d S rO   r(   r0   r(   r(   r)   r3     s    z-ReadReplicaDBInstanceIdentifiers.startElementc                 C   s   |dkr|  | d S )NZReadReplicaDBInstanceIdentifier)appendr8   r(   r(   r)   r:     s    z+ReadReplicaDBInstanceIdentifiers.endElementNrP   r(   r(   r(   r)   r/     s   r/   N)Zboto.rds.dbsecuritygroupr   Zboto.rds.parametergroupr   Zboto.rds.statusinfor   Zboto.rds.dbsubnetgroupr   Z#boto.rds.vpcsecuritygroupmembershipr   Zboto.resultsetr   objectr   dictr.   listr/   r(   r(   r(   r)   <module>   s     u	