def validate_label(self, value): if not ContactField.is_valid_label(value): raise serializers.ValidationError("Can only contain letters, numbers and hypens.") key = ContactField.make_key(value) if not ContactField.is_valid_key(key): raise serializers.ValidationError("Generated key \"%s\" is invalid or a reserved name." % key) return value
def validate_label(self, value): if not ContactField.is_valid_label(value): raise serializers.ValidationError("Can only contain letters, numbers and hypens.") key = ContactField.make_key(value) if not ContactField.is_valid_key(key): raise serializers.ValidationError("Generated key \"%s\" is invalid or a reserved name." % key) return value
def save(self): label = self.validated_data.get("label") value_type = self.validated_data.get("value_type") if self.instance: key = self.instance.key else: key = ContactField.make_key(label) return ContactField.get_or_create(self.context["org"], self.context["user"], key, label, value_type=value_type)
def save(self): label = self.validated_data.get('label') value_type = self.validated_data.get('value_type') if self.instance: key = self.instance.key else: key = ContactField.make_key(label) return ContactField.get_or_create(self.context['org'], self.context['user'], key, label, value_type=value_type)
def save(self): label = self.validated_data.get('label') value_type = self.validated_data.get('value_type') if self.instance: key = self.instance.key else: key = ContactField.make_key(label) return ContactField.get_or_create(self.context['org'], self.context['user'], key, label, value_type=value_type)
def save(self): label = self.validated_data.get("label") value_type = self.validated_data.get("value_type") if self.instance: key = self.instance.key else: key = ContactField.make_key(label) return ContactField.get_or_create(self.context["org"], self.context["user"], key, label, value_type=value_type)
def validate(self, data): key = data.get('key') label = data.get('label') if not key: key = ContactField.make_key(label) if not ContactField.is_valid_key(key): raise serializers.ValidationError(_("Generated key for '%s' is invalid or a reserved name") % label) data['key'] = key return data
def form_valid(self, form): try: cleaned_data = form.cleaned_data org = self.request.user.get_org() for key in cleaned_data: if key.startswith('field_'): idx = key[6:] label = cleaned_data["label_%s" % idx] field = cleaned_data[key] show_in_table = cleaned_data["show_%s" % idx] value_type = cleaned_data['type_%s' % idx] if field == '__new_field': if label: analytics.track(self.request.user.username, 'temba.contactfield_created') key = ContactField.make_key(label) ContactField.get_or_create( org, key, label, show_in_table=show_in_table, value_type=value_type) else: if label: ContactField.get_or_create( org, field.key, label, show_in_table=show_in_table, value_type=value_type) else: ContactField.hide_field(org, field.key) if 'HTTP_X_PJAX' not in self.request.META: return HttpResponseRedirect(self.get_success_url()) else: # pragma: no cover return self.render_to_response( self.get_context_data( form=form, success_url=self.get_success_url(), success_script=getattr(self, 'success_script', None))) except IntegrityError as e: # pragma: no cover message = str(e).capitalize() errors = self.form._errors.setdefault( forms.forms.NON_FIELD_ERRORS, forms.util.ErrorList()) errors.append(message) return self.render_to_response( self.get_context_data(form=form))
def restore_object(self, attrs, instance=None): """ Update our contact field """ if instance: # pragma: no cover raise ValidationError("Invalid operation") org = self.user.get_org() key = attrs.get('key', None) label = attrs.get('label') value_type = attrs.get('value_type') if not key: key = ContactField.make_key(label) return ContactField.get_or_create(org, key, label, value_type=value_type)
def restore_object(self, attrs, instance=None): """ Update our contact field """ if instance: # pragma: no cover raise ValidationError("Invalid operation") org = self.user.get_org() key = attrs.get('key', None) label = attrs.get('label') value_type = attrs.get('value_type') if not key: key = ContactField.make_key(label) return ContactField.get_or_create(org, key, label, value_type=value_type)
def from_json(cls, org, json_obj): # they are creating a new field label = json_obj.get(cls.LABEL) field = json_obj.get(cls.FIELD) value = json_obj.get(cls.VALUE) if label and label.startswith("[_NEW_]"): # pragma: no cover label = label[7:] # create our contact field if necessary if not field: # pragma: needs cover field = ContactField.make_key(label) # look up our label label = cls.get_label(org, field, label) return cls(json_obj.get(cls.UUID), label, field, value)
def validate(self, data): key = data.get('key') label = data.get('label') if not key: key = ContactField.make_key(label) if not ContactField.is_valid_key(key): raise serializers.ValidationError(_("Generated key for '%s' is invalid or a reserved name") % label) fields_count = ContactField.objects.filter(org=self.org).count() if not self.instance and fields_count >= ContactField.MAX_ORG_CONTACTFIELDS: raise serializers.ValidationError('This org has %s contact fields and the limit is %s. ' 'You must delete existing ones before ' 'you can create new ones.' % (fields_count, ContactField.MAX_ORG_CONTACTFIELDS)) data['key'] = key return data
def validate(self, data): key = data.get("key") label = data.get("label") if not key: key = ContactField.make_key(label) if not ContactField.is_valid_key(key): raise serializers.ValidationError(_("Generated key for '%s' is invalid or a reserved name") % label) fields_count = ContactField.user_fields.filter(org=self.org).count() if not self.instance and fields_count >= ContactField.MAX_ORG_CONTACTFIELDS: raise serializers.ValidationError( "This org has %s contact fields and the limit is %s. " "You must delete existing ones before " "you can create new ones." % (fields_count, ContactField.MAX_ORG_CONTACTFIELDS) ) data["key"] = key return data
def validate(self, data): key = data.get('key') label = data.get('label') if not key: key = ContactField.make_key(label) if not ContactField.is_valid_key(key): raise serializers.ValidationError( _("Generated key for '%s' is invalid or a reserved name") % label) if not self.instance and ContactField.objects.filter( org=self.org).count() >= ContactField.MAX_ORG_CONTACTFIELDS: raise serializers.ValidationError( 'You have reached %s contact fields, ' 'please remove some contact fields to be able ' 'to create new contact fields' % ContactField.MAX_ORG_CONTACTFIELDS) data['key'] = key return data
def form_valid(self, form): try: cleaned_data = form.cleaned_data org = self.request.user.get_org() for key in cleaned_data: if key.startswith('field_'): idx = key[6:] label = cleaned_data["label_%s" % idx] field = cleaned_data[key] show_in_table = cleaned_data["show_%s" % idx] value_type = cleaned_data['type_%s' % idx] if field == '__new_field': if label: analytics.track(self.request.user.username, 'temba.contactfield_created') key = ContactField.make_key(label) ContactField.get_or_create(org, key, label, show_in_table=show_in_table, value_type=value_type) else: if label: ContactField.get_or_create(org, field.key, label, show_in_table=show_in_table, value_type=value_type) else: ContactField.hide_field(org, field.key) if 'HTTP_X_PJAX' not in self.request.META: return HttpResponseRedirect(self.get_success_url()) else: # pragma: no cover return self.render_to_response(self.get_context_data(form=form, success_url=self.get_success_url(), success_script=getattr(self, 'success_script', None))) except IntegrityError as e: # pragma: no cover message = str(e).capitalize() errors = self.form._errors.setdefault(forms.forms.NON_FIELD_ERRORS, forms.utils.ErrorList()) errors.append(message) return self.render_to_response(self.get_context_data(form=form))
def restore_object(self, attrs, instance=None): """ Create or update our campaign """ if instance: # pragma: no cover raise ValidationError("Invalid operation") org = self.user.get_org() # parse our arguments message = attrs.get('message', None) flow = attrs.get('flow', None) if not message and not flow: raise ValidationError("Must specify either a flow or a message for the event") if message and flow: raise ValidationError("You cannot set both a flow and a message on an event, it must be only one") campaign_id = attrs.get('campaign', None) event_id = attrs.get('event', None) if not campaign_id and not event_id: raise ValidationError("You must specify either a campaign to create a new event, or an event to update") offset = attrs.get('offset') unit = attrs.get('unit') delivery_hour = attrs.get('delivery_hour') relative_to = attrs.get('relative_to') # load our contact field existing_field = ContactField.objects.filter(label=relative_to, org=org, is_active=True) if not existing_field: relative_to_field = ContactField.get_or_create(org, ContactField.make_key(relative_to), relative_to) else: relative_to_field = existing_field[0] if 'event' in attrs: event = CampaignEvent.objects.get(pk=attrs['event'], is_active=True, campaign__org=org) # we are being set to a flow if 'flow' in attrs: flow = Flow.objects.get(pk=attrs['flow'], is_active=True, org=org) event.flow = flow event.event_type = FLOW_EVENT event.message = None # we are being set to a message else: event.message = attrs['message'] # if we aren't currently a message event, we need to create our hidden message flow if event.event_type != MESSAGE_EVENT: event.flow = Flow.create_single_message(org, self.user, event.message) event.event_type = MESSAGE_EVENT # otherwise, we can just update that flow else: # set our single message on our flow event.flow.update_single_message_flow(message=attrs['message']) # update our other attributes event.offset = offset event.unit = unit event.delivery_hour = delivery_hour event.relative_to = relative_to_field event.save() event.update_flow_name() else: campaign = Campaign.objects.get(pk=attrs['campaign'], is_active=True, org=org) event_type = MESSAGE_EVENT if 'flow' in attrs: flow = Flow.objects.get(pk=attrs['flow'], is_active=True, org=org) event_type = FLOW_EVENT else: flow = Flow.create_single_message(org, self.user, message) event = CampaignEvent.objects.create(campaign=campaign, relative_to=relative_to_field, offset=offset, unit=unit, event_type=event_type, flow=flow, message=message, created_by=self.user, modified_by=self.user) event.update_flow_name() return event
def restore_object(self, attrs, instance=None): """ Create or update our campaign """ if instance: # pragma: no cover raise ValidationError("Invalid operation") org = self.user.get_org() # parse our arguments message = attrs.get('message', None) flow = attrs.get('flow', None) if not message and not flow: raise ValidationError("Must specify either a flow or a message for the event") if message and flow: raise ValidationError("You cannot set both a flow and a message on an event, it must be only one") campaign_id = attrs.get('campaign', None) event_id = attrs.get('event', None) if not campaign_id and not event_id: raise ValidationError("You must specify either a campaign to create a new event, or an event to update") offset = attrs.get('offset') unit = attrs.get('unit') delivery_hour = attrs.get('delivery_hour') relative_to = attrs.get('relative_to') # load our contact field existing_field = ContactField.objects.filter(label=relative_to, org=org, is_active=True) if not existing_field: relative_to_field = ContactField.get_or_create(org, ContactField.make_key(relative_to), relative_to) else: relative_to_field = existing_field[0] if 'event' in attrs: event = CampaignEvent.objects.get(pk=attrs['event'], is_active=True, campaign__org=org) # we are being set to a flow if 'flow' in attrs: flow = Flow.objects.get(pk=attrs['flow'], is_active=True, org=org) event.flow = flow event.event_type = FLOW_EVENT event.message = None # we are being set to a message else: event.message = attrs['message'] # if we aren't currently a message event, we need to create our hidden message flow if event.event_type != MESSAGE_EVENT: event.flow = CampaignEvent.create_single_message_flow(org, self.user, event.message) event.event_type = MESSAGE_EVENT # otherwise, we can just update that flow else: # set our single message on our flow event.flow.update_single_message_flow(message=attrs['message']) # update our other attributes event.offset = offset event.unit = unit event.delivery_hour = delivery_hour event.relative_to = relative_to_field event.save() event.update_flow_name() else: campaign = Campaign.objects.get(pk=attrs['campaign'], is_active=True, org=org) event_type = MESSAGE_EVENT if 'flow' in attrs: flow = Flow.objects.get(pk=attrs['flow'], is_active=True, org=org) event_type = FLOW_EVENT else: flow = CampaignEvent.create_single_message_flow(org, self.user, message) event = CampaignEvent.objects.create(campaign=campaign, relative_to=relative_to_field, offset=offset, unit=unit, event_type=event_type, flow=flow, message=message, created_by=self.user, modified_by=self.user) event.update_flow_name() return event