def create_random_rule():
        smonths = random.sample(range(1, 13), random.randint(1, 12))
        weekday = random.randint(0, 6)
        number = random.randint(1, 5)
        hour = random.randint(0, 23)
        minute = random.randint(0, 59)

        endtype = random.randint(0, 2)

        if endtype == 0:
            rend = None
        else:
            rend = random.randint(1, 360) * 60

        alarmtype = random.randint(0, 2)

        if alarmtype == 0:
            ralarm = None
        else:
            ralarm = random.randint(0, 360) * 60

        stdn = random.randint(0, 1)

        if stdn == 0:
            return organism_basicrules_api.make_occur_monthly_weekday_direct_rule_local(
                smonths, weekday, number, hour, minute, rend, ralarm,
                (None, endtype, alarmtype))
        else:
            return organism_basicrules_api.make_occur_monthly_weekday_direct_rule_UTC(
                smonths, weekday, number, hour, minute, rend, ralarm,
                (None, endtype, alarmtype))
    def create_random_rule():
        smonths = range(1, 13)
        weekday = random.randint(0, 6)
        number = random.randint(1, 5)
        hour = random.randint(0, 23)
        minute = random.randint(0, 59)

        endtype = random.randint(0, 2)

        if endtype == 0:
            rend = None
        else:
            rend = random.randint(1, 360) * 60

        alarmtype = random.randint(0, 2)

        if alarmtype == 0:
            ralarm = None
        else:
            ralarm = random.randint(0, 360) * 60

        stdn = random.randint(0, 1)

        if stdn == 0:
            return organism_basicrules_api.make_occur_monthly_weekday_direct_rule_local(
                        smonths, weekday, number, hour, minute, rend, ralarm,
                        ('1m', endtype, alarmtype))
        else:
            return organism_basicrules_api.make_occur_monthly_weekday_direct_rule_UTC(
                        smonths, weekday, number, hour, minute, rend, ralarm,
                        ('1m', endtype, alarmtype))
    def apply_rule(self, filename, id_):
        values = self.ui.get_values()
        rstartn = values['start_weekday_number']
        rstartA = values['start_weekday']
        weekday = values['start_weekday_index']
        rstartH = values['start_hour']
        rstartM = values['start_minute']
        endtype = values['end_type']
        rend = values['end_relative_time']
        fend = values['end_next_day']
        rendn = values['end_relative_number']
        rendu = values['end_relative_unit']
        rendH = values['end_hour']
        rendM = values['end_minute']
        alarmtype = values['alarm_type']
        ralarm = values['alarm_relative_time']
        palarm = values['alarm_previous_day']
        ralarmn = values['alarm_relative_number']
        ralarmu = values['alarm_relative_unit']
        ralarmH = values['alarm_hour']
        ralarmM = values['alarm_minute']
        standard = values['time_standard']

        smonths = range(1, 13)

        try:
            if standard == 'UTC':
                ruled = organism_basicrules_api.make_occur_monthly_weekday_direct_rule_UTC(
                    smonths, weekday, rstartn, rstartH, rstartM, rend, ralarm,
                    ('1m', endtype, alarmtype))
            else:
                ruled = organism_basicrules_api.make_occur_monthly_weekday_direct_rule_local(
                    smonths, weekday, rstartn, rstartH, rstartM, rend, ralarm,
                    ('1m', endtype, alarmtype))
        except organism_basicrules_api.BadRuleError:
            msgboxes.warn_bad_rule(msgboxes.generic).ShowModal()
        else:
            label = self._make_label(rstartn, rstartA, rstartH, rstartM, rendH,
                                     rendM, ralarmH, ralarmM, rendn, rendu,
                                     ralarmn, ralarmu, endtype, alarmtype,
                                     fend, palarm, standard)
            wxscheduler_api.apply_rule(filename, id_, ruled, label)
    def apply_rule(self, filename, id_):
        values = self.ui.get_values()
        rstartn = values['start_weekday_number']
        rstartA = values['start_weekday']
        weekday = values['start_weekday_index']
        rstartH = values['start_hour']
        rstartM = values['start_minute']
        endtype = values['end_type']
        rend = values['end_relative_time']
        fend = values['end_next_day']
        rendn = values['end_relative_number']
        rendu = values['end_relative_unit']
        rendH = values['end_hour']
        rendM = values['end_minute']
        alarmtype = values['alarm_type']
        ralarm = values['alarm_relative_time']
        palarm = values['alarm_previous_day']
        ralarmn = values['alarm_relative_number']
        ralarmu = values['alarm_relative_unit']
        ralarmH = values['alarm_hour']
        ralarmM = values['alarm_minute']
        standard = values['time_standard']

        smonths = range(1, 13)

        try:
            if standard == 'UTC':
                ruled = organism_basicrules_api.make_occur_monthly_weekday_direct_rule_UTC(
                                smonths, weekday, rstartn, rstartH, rstartM,
                                rend, ralarm, ('1m', endtype, alarmtype))
            else:
                ruled = organism_basicrules_api.make_occur_monthly_weekday_direct_rule_local(
                                smonths, weekday, rstartn, rstartH, rstartM,
                                rend, ralarm, ('1m', endtype, alarmtype))
        except organism_basicrules_api.BadRuleError:
            msgboxes.warn_bad_rule(msgboxes.generic).ShowModal()
        else:
            label = self._make_label(rstartn, rstartA, rstartH, rstartM, rendH,
                    rendM, ralarmH, ralarmM, rendn, rendu, ralarmn, ralarmu,
                    endtype, alarmtype, fend, palarm, standard)
            wxscheduler_api.apply_rule(filename, id_, ruled, label)