# -*- coding: utf-8 -*-
# Copyright 2021 Cohesity Inc.
import cohesity_management_sdk.models.app_entity_backup_status_info
import cohesity_management_sdk.models.snapshot_info
import cohesity_management_sdk.models.protection_source
import cohesity_management_sdk.models.backup_source_stats
[docs]class SourceBackupStatus(object):
    """Implementation of the 'SourceBackupStatus' model.
    Specifies the source object to protect and the current backup status.
    Attributes:
        apps_backup_status (list of AppEntityBackupStatusInfo): Specifies the
            backup status at app/DB level.
        current_snapshot_info (SnapshotInfo): Specifies details about the
            snapshot task created to backup or copy one source object like a
            VM.
        error (string): Specifies if an error occurred (if any) while running
            this task. This field is populated when the status is equal to
            'kFailure'.
        is_full_backup (bool): Specifies whether this is a 'kFull' or
            'kRegular' backup of the Run. This may be true even if the
            scheduled backup type is 'kRegular'. This will happen when this
            run corresponds to the first backup run of the Job or if no
            previous snapshot information is found.
        num_restarts (int): Specifies the number of times the the task was
            restarted because of the changes on the backup source host.
        parent_source_id (long|int): Specifies the id of the registered
            Protection Source that is the parent of the Objects that are
            protected by this Job Run.
        progress_monitor_task_path (string): Specifies the yoda progress
            monitor task path which is used to get pulse information about the
            source that is being backed up.
        quiesced (bool): Specifies if app-consistent snapshot was captured.
            This field is set to true, if an app-consistent snapshot was taken
            by quiescing applications and the file system before taking a
            backup.
        sla_violated (bool): Specifies if the SLA was violated for the Job
            Run. This field is set to true, if time to complete the Job Run is
            longer than the SLA specified. This field is populated when the
            status is set to 'kSuccess' or 'kFailure'.
        source (ProtectionSource): Specifies a generic structure that
            represents a node in the Protection Source tree. Node details will
            depend on the environment of the Protection Source.
        stats (BackupSourceStats): Specifies statistics about a Backup task in
            a Protection Job Run. Specifies statistics for one backup task.
            One backup task is used to backup on Protection Source. This
            structure is also used to aggregate stats of a Backup tasks in a
            Protection Job Run.
        status (StatusSourceBackupStatusEnum): Specifies the status of the
            source object being protected. 'kAccepted' indicates the task is
            queued to run but not yet running. 'kRunning' indicates the task
            is running. 'kCanceling' indicates a request to cancel the task
            has occurred but the task is not yet canceled. 'kCanceled'
            indicates the task has been canceled. 'kSuccess' indicates the
            task was successful. 'kFailure' indicates the task failed.
            'kWarning' indicates the task has finished with warning.
            'kOnHold' indicates the task is kept onHold.
            'kMissed' indicates the task is missed.
        warnings (list of string): Array of Warnings.  Specifies the warnings
            that occurred (if any) while running this task.
    """
    # Create a mapping from Model property names to API property names
    _names = {
        "apps_backup_status":'appsBackupStatus',
        "current_snapshot_info":'currentSnapshotInfo',
        "error":'error',
        "is_full_backup":'isFullBackup',
        "num_restarts":'numRestarts',
        "parent_source_id":'parentSourceId',
        "progress_monitor_task_path":'progressMonitorTaskPath',
        "quiesced":'quiesced',
        "sla_violated":'slaViolated',
        "source":'source',
        "stats":'stats',
        "status":'status',
        "warnings":'warnings'
    }
    def __init__(self,
                 apps_backup_status=None,
                 current_snapshot_info=None,
                 error=None,
                 is_full_backup=None,
                 num_restarts=None,
                 parent_source_id=None,
                 progress_monitor_task_path=None,
                 quiesced=None,
                 sla_violated=None,
                 source=None,
                 stats=None,
                 status=None,
                 warnings=None):
        """Constructor for the SourceBackupStatus class"""
        # Initialize members of the class
        self.apps_backup_status = apps_backup_status
        self.current_snapshot_info = current_snapshot_info
        self.error = error
        self.is_full_backup = is_full_backup
        self.num_restarts = num_restarts
        self.parent_source_id = parent_source_id
        self.progress_monitor_task_path = progress_monitor_task_path
        self.quiesced = quiesced
        self.sla_violated = sla_violated
        self.source = source
        self.stats = stats
        self.status = status
        self.warnings = warnings
[docs]    @classmethod
    def from_dictionary(cls,
                        dictionary):
        """Creates an instance of this model from a dictionary
        Args:
            dictionary (dictionary): A dictionary representation of the object as
            obtained from the deserialization of the server's response. The keys
            MUST match property names in the API description.
        Returns:
            object: An instance of this structure class.
        """
        if dictionary is None:
            return None
        # Extract variables from the dictionary
        apps_backup_status = None
        if dictionary.get('appsBackupStatus') != None:
            apps_backup_status = list()
            for structure in dictionary.get('appsBackupStatus'):
                apps_backup_status.append(cohesity_management_sdk.models.app_entity_backup_status_info.AppEntityBackupStatusInfo.from_dictionary(structure))
        current_snapshot_info = cohesity_management_sdk.models.snapshot_info.SnapshotInfo.from_dictionary(dictionary.get('currentSnapshotInfo')) if dictionary.get('currentSnapshotInfo') else None
        error = dictionary.get('error')
        is_full_backup = dictionary.get('isFullBackup')
        num_restarts = dictionary.get('numRestarts')
        parent_source_id = dictionary.get('parentSourceId')
        progress_monitor_task_path = dictionary.get('progressMonitorTaskPath')
        quiesced = dictionary.get('quiesced')
        sla_violated = dictionary.get('slaViolated')
        source = cohesity_management_sdk.models.protection_source.ProtectionSource.from_dictionary(dictionary.get('source')) if dictionary.get('source') else None
        stats = cohesity_management_sdk.models.backup_source_stats.BackupSourceStats.from_dictionary(dictionary.get('stats')) if dictionary.get('stats') else None
        status = dictionary.get('status')
        warnings = dictionary.get('warnings')
        # Return an object of this model
        return cls(apps_backup_status,
                   current_snapshot_info,
                   error,
                   is_full_backup,
                   num_restarts,
                   parent_source_id,
                   progress_monitor_task_path,
                   quiesced,
                   sla_violated,
                   source,
                   stats,
                   status,
                   warnings)