def create_issue_alert_rule(self, data): """data format { "project": project "environment": environment "name": "My rule name", "owner": actor id, "conditions": [], "actions": [], "actionMatch": "all" } """ rule = Rule() rule.project = data["project"] if "environment" in data: environment = data["environment"] rule.environment_id = int( environment) if environment else environment if data.get("name"): rule.label = data["name"] if data.get("actionMatch"): rule.data["action_match"] = data["actionMatch"] if data.get("actions") is not None: rule.data["actions"] = data["actions"] if data.get("conditions") is not None: rule.data["conditions"] = data["conditions"] if data.get("frequency"): rule.data["frequency"] = data["frequency"] if data.get("date_added"): rule.date_added = data["date_added"] if data.get("owner"): rule.owner = data["owner"] rule.save() return rule
def create_or_edit_rule(request, organization, project, rule_id=None): if rule_id: try: rule = Rule.objects.get(project=project, id=rule_id) except Rule.DoesNotExist: path = reverse('sentry-project-rules', args=[organization.slug, project.slug]) return HttpResponseRedirect(path) else: rule = Rule(project=project) form_data = { 'label': rule.label, 'action_match': rule.data.get('action_match'), } if request.POST: for key, value in request.POST.iteritems(): form_data[key] = value else: for num, node in enumerate(rule.data.get('conditions', [])): prefix = 'condition[%d]' % (num,) for key, value in node.iteritems(): form_data[prefix + '[' + key + ']'] = value for num, node in enumerate(rule.data.get('actions', [])): prefix = 'action[%d]' % (num,) for key, value in node.iteritems(): form_data[prefix + '[' + key + ']'] = value validator = RuleFormValidator(project, form_data) if request.POST and validator.is_valid(): data = validator.cleaned_data.copy() rule.label = data.pop('label') rule.data = data rule.save() messages.add_message( request, messages.SUCCESS, _('Changes to your rule were saved.')) path = reverse('sentry-project-rules', args=[organization.slug, project.slug]) return HttpResponseRedirect(path) action_list = [] condition_list = [] # TODO: conditions need to be based on actions for rule_type, rule in rules: node = rule(project) context = { 'id': node.id, 'label': node.label, 'html': node.render_form(), } if rule_type.startswith('condition/'): condition_list.append(context) elif rule_type.startswith('action/'): action_list.append(context) context = csrf(request) context.update({ 'rule': rule, 'form_is_valid': (not request.POST or validator.is_valid()), 'form_errors': validator.errors, 'form_data': form_data, 'organization': organization, 'team': project.team, 'page': 'rules', 'action_list': json.dumps(action_list), 'condition_list': json.dumps(condition_list), 'project': project, }) return render_to_response('sentry/projects/rules/new.html', context, request)
def create_or_edit_rule(request, team, project, rule_id=None): if rule_id: try: rule = Rule.objects.get(project=project, id=rule_id) except Rule.DoesNotExist: path = reverse('sentry-project-rules', args=[team.slug, project.slug]) return HttpResponseRedirect(path) else: rule = Rule(project=project) form_data = { 'label': rule.label, 'action_match': rule.data.get('action_match'), } if request.POST: for key, value in request.POST.iteritems(): form_data[key] = value else: for num, node in enumerate(rule.data.get('conditions', [])): prefix = 'condition[%d]' % (num,) for key, value in node.iteritems(): form_data[prefix + '[' + key + ']'] = value for num, node in enumerate(rule.data.get('actions', [])): prefix = 'action[%d]' % (num,) for key, value in node.iteritems(): form_data[prefix + '[' + key + ']'] = value validator = RuleFormValidator(project, form_data) if request.POST and validator.is_valid(): data = validator.cleaned_data.copy() rule.label = data.pop('label') rule.data = data rule.save() messages.add_message( request, messages.SUCCESS, _('Changes to your rule were saved.')) path = reverse('sentry-project-rules', args=[team.slug, project.slug]) return HttpResponseRedirect(path) action_list = [] condition_list = [] # TODO: conditions need to be based on actions for rule_type, rule in rules: node = rule(project) context = { 'id': node.id, 'label': node.label, 'html': node.render_form(), } if rule_type.startswith('condition/'): condition_list.append(context) elif rule_type.startswith('action/'): action_list.append(context) context = csrf(request) context.update({ 'rule': rule, 'form_is_valid': (not request.POST or validator.is_valid()), 'form_errors': validator.errors, 'form_data': form_data, 'team': team, 'page': 'rules', 'action_list': json.dumps(action_list), 'condition_list': json.dumps(condition_list), 'project': project, }) return render_to_response('sentry/projects/rules/new.html', context, request)