def configuration_as_dict()

in source/lambda/configuration/scheduler_config_builder.py [0:0]


    def configuration_as_dict(config):
        """
        This method build a dictionary from a configuration instance to be passed safely in the event of a lambda function
        :param config:
        :return:
        """
        result = {}

        for attr in [ATTR_TAGNAME,
                     ATTR_DEFAULT_TIMEZONE,
                     ATTR_TRACE,
                     ATTR_ENABLE_SSM_MAINTENANCE_WINDOWS,
                     ATTR_USE_METRICS,
                     ATTR_SCHEDULE_CLUSTERS,
                     ATTR_CREATE_RDS_SNAPSHOT,
                     ATTR_SCHEDULE_LAMBDA_ACCOUNT,
                     ATTR_STARTED_TAGS,
                     ATTR_STOPPED_TAGS]:
            if attr in config.__dict__ and config.__dict__[attr] is not None:
                result[attr] = config.__dict__[attr]

        for attr in [ATTR_STARTED_TAGS,
                     ATTR_STOPPED_TAGS]:
            if attr in config.__dict__ and config.__dict__[attr] is not None:
                result[attr] = ",".join(["{}={}".format(t["Key"], t["Value"]) for t in config.__dict__[attr]])

        for attr in [ATTR_REGIONS,
                     ATTR_CROSS_ACCOUNT_ROLES,
                     ATTR_SCHEDULED_SERVICES]:
            if len(config.__dict__[attr]) > 0:
                result[attr] = list(config.__dict__[attr])

        result[ATTR_SCHEDULES] = {}
        result[ATTR_PERIODS] = {}

        for schedule_name in config.schedules:
            result[ATTR_SCHEDULES][schedule_name] = {}
            schedule = config.schedules[schedule_name]
            for attr in [ATTR_NAME,
                         ATTR_TIMEZONE,
                         ATTR_OVERRIDE_STATUS,
                         ATTR_STOP_NEW_INSTANCES,
                         ATTR_USE_METRICS,
                         ATTR_ENFORCED,
                         ATTR_HIBERNATE,
                         ATTR_USE_MAINTENANCE_WINDOW,
                         ATTR_SSM_MAINTENANCE_WINDOW,
                         ATTR_RETAIN_RUNNING]:
                if attr in schedule.__dict__ and schedule.__dict__[attr] is not None:
                    result[ATTR_SCHEDULES][schedule_name][attr] = schedule.__dict__[attr]

            for attr in [ATTR_SCHEDULE_DT]:
                dt = schedule.__dict__[attr]
                if dt is not None:
                    result[ATTR_SCHEDULES][schedule.name][attr] = dt.isoformat()

            if schedule.override_status is not None:
                continue

            result[ATTR_SCHEDULES][schedule_name][ATTR_PERIODS] = []

            for p in schedule.periods:
                period = p[ATTR_PERIOD]
                instance_type = p[ATTR_INSTANCE_TYPE]
                result[ATTR_SCHEDULES][schedule_name][ATTR_PERIODS].append(
                    period.name + (("{}{}".format(configuration.INSTANCE_TYPE_SEP, instance_type)) if instance_type else ""))
                if period.name in result[ATTR_PERIODS]:
                    continue

                result[ATTR_PERIODS][period.name] = {}
                for attr in [ATTR_BEGINTIME,
                             ATTR_ENDTIME]:
                    tm = period.__dict__[attr]
                    if tm is not None:
                        result[ATTR_PERIODS][period.name][attr] = "{:0>2d}:{:0>2d}".format(tm.hour, tm.minute)

                for attr in [ATTR_WEEKDAYS,
                             ATTR_MONTHDAYS,
                             ATTR_MONTHS]:
                    s = period.__dict__[attr]
                    if s is None:
                        continue
                    result[ATTR_PERIODS][period.name][attr] = list(s)
        return result