# -*- coding: utf-8 -*-
# Copyright 2021 Cohesity Inc.
import cohesity_management_sdk.models.backup_policy_proto_continuous_schedule
import cohesity_management_sdk.models.backup_policy_proto_daily_schedule
import cohesity_management_sdk.models.backup_policy_proto_monthly_schedule
import cohesity_management_sdk.models.backup_policy_proto_one_off_schedule
import cohesity_management_sdk.models.backup_policy_proto_schedule_end
[docs]class BackupPolicyProto(object):
    """Implementation of the 'BackupPolicyProto' model.
    If a backup does not get a chance to when it's due (either due to the
    system
    being busy or a conflict with another instance of the same job), the
    backup
    will still be run when the conflicts go away. But, if there are multiple
    instances of the same job that are due to be run, only the latest
    instance
    would be run.
    Attributes:
        continuous_schedule (BackupPolicyProtoContinuousSchedule): TODO: type
            description here.
        daily_schedule (BackupPolicyProtoDailySchedule): The daily schedule
            encompasses weekly schedules as well. This has been done so there
            is only one way of specifying a schedule (backing up daily is the
            same as backing up weekly, but on all days of the week).
        monthly_schedule (BackupPolicyProtoMonthlySchedule): TODO: type
            description here.
        name (string): A backup schedule can have an optional name.
        num_days_to_keep (long|int): Specifies how to determine the expiration
            time for snapshots created by a backup run. The snapshots will be
            marked as expiring (i.e., eligible to be garbage collected) in
            'num_days_to_keep' days from when the snapshots were created.
        num_retries (int): The number of retries to perform (for retryable
            errors) before giving up.
        one_off_schedule (BackupPolicyProtoOneOffSchedule): TODO: type
            description here.
        periodicity (int): Determines how often the job should be run.
        retry_delay_mins (int): The number of minutes to wait before retrying
            a failed job.
        schedule_end (BackupPolicyProtoScheduleEnd): TODO: type description
            here.
        start_window_interval_mins (int): This field determines the amount of
            time (in minutes) after which a scheduled job will not be started.
            For example, if a job is scheduled to be run every Sunday at 5am,
            and this field is set to 30 minutes, but the job was unable to
            start by 5:30am on a Sunday due to other conflicts (say too many
            other jobs were already running), Magneto will not attempt to
            start the job until the next scheduled time (on the following
            Sunday). If this field is not set, the interval will be determined
            by the Magneto flag
            --magneto_master_default_start_window_interval_mins.
        truncate_logs (bool): Whether to truncate logs after a backup run.
            This is currently only relevant for full or incremental backups in
            a SQL environment.
    """
    # Create a mapping from Model property names to API property names
    _names = {
        "continuous_schedule":'continuousSchedule',
        "daily_schedule":'dailySchedule',
        "monthly_schedule":'monthlySchedule',
        "name":'name',
        "num_days_to_keep":'numDaysToKeep',
        "num_retries":'numRetries',
        "one_off_schedule":'oneOffSchedule',
        "periodicity":'periodicity',
        "retry_delay_mins":'retryDelayMins',
        "schedule_end":'scheduleEnd',
        "start_window_interval_mins":'startWindowIntervalMins',
        "truncate_logs":'truncateLogs'
    }
    def __init__(self,
                 continuous_schedule=None,
                 daily_schedule=None,
                 monthly_schedule=None,
                 name=None,
                 num_days_to_keep=None,
                 num_retries=None,
                 one_off_schedule=None,
                 periodicity=None,
                 retry_delay_mins=None,
                 schedule_end=None,
                 start_window_interval_mins=None,
                 truncate_logs=None):
        """Constructor for the BackupPolicyProto class"""
        # Initialize members of the class
        self.continuous_schedule = continuous_schedule
        self.daily_schedule = daily_schedule
        self.monthly_schedule = monthly_schedule
        self.name = name
        self.num_days_to_keep = num_days_to_keep
        self.num_retries = num_retries
        self.one_off_schedule = one_off_schedule
        self.periodicity = periodicity
        self.retry_delay_mins = retry_delay_mins
        self.schedule_end = schedule_end
        self.start_window_interval_mins = start_window_interval_mins
        self.truncate_logs = truncate_logs
[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
        continuous_schedule = cohesity_management_sdk.models.backup_policy_proto_continuous_schedule.BackupPolicyProtoContinuousSchedule.from_dictionary(dictionary.get('continuousSchedule')) if dictionary.get('continuousSchedule') else None
        daily_schedule = cohesity_management_sdk.models.backup_policy_proto_daily_schedule.BackupPolicyProtoDailySchedule.from_dictionary(dictionary.get('dailySchedule')) if dictionary.get('dailySchedule') else None
        monthly_schedule = cohesity_management_sdk.models.backup_policy_proto_monthly_schedule.BackupPolicyProtoMonthlySchedule.from_dictionary(dictionary.get('monthlySchedule')) if dictionary.get('monthlySchedule') else None
        name = dictionary.get('name')
        num_days_to_keep = dictionary.get('numDaysToKeep')
        num_retries = dictionary.get('numRetries')
        one_off_schedule = cohesity_management_sdk.models.backup_policy_proto_one_off_schedule.BackupPolicyProtoOneOffSchedule.from_dictionary(dictionary.get('oneOffSchedule')) if dictionary.get('oneOffSchedule') else None
        periodicity = dictionary.get('periodicity')
        retry_delay_mins = dictionary.get('retryDelayMins')
        schedule_end = cohesity_management_sdk.models.backup_policy_proto_schedule_end.BackupPolicyProtoScheduleEnd.from_dictionary(dictionary.get('scheduleEnd')) if dictionary.get('scheduleEnd') else None
        start_window_interval_mins = dictionary.get('startWindowIntervalMins')
        truncate_logs = dictionary.get('truncateLogs')
        # Return an object of this model
        return cls(continuous_schedule,
                   daily_schedule,
                   monthly_schedule,
                   name,
                   num_days_to_keep,
                   num_retries,
                   one_off_schedule,
                   periodicity,
                   retry_delay_mins,
                   schedule_end,
                   start_window_interval_mins,
                   truncate_logs)