def save(self, **kwargs): rs = RestService() if not self.pk else \ RestService.objects.get(pk=self.pk) rs.name = self.name rs.service_url = self.service_url rs.xform = self.xform try: rs.save() except IntegrityError as e: if str(e).startswith("duplicate key value violates unique " "constraint"): msg = _(u"The service already created for this form.") else: msg = _(str(e)) raise serializers.ValidationError(msg) self.date_created = rs.date_created self.date_modified = rs.date_modified data_value = '{}|{}|{}'.format(self.auth_token, self.flow_uuid, self.contacts) MetaData.textit(self.xform, data_value=data_value) self.pk = rs.pk
def test_update_with_errors(self): rest = self._create_textit_service() data_value = "{}|{}".format("test", "test2") MetaData.textit(self.xform, data_value) request = self.factory.get('/', **self.extra) response = self.view(request, pk=rest.get('id')) self.assertEquals(response.status_code, 400) self.assertEquals(response.data, [u"Error occurred when loading textit service." u"Resolve by updating auth_token, flow_uuid and " u"contacts fields"]) post_data = { "name": "textit", "service_url": "https://textit.io", "xform": self.xform.pk, "auth_token": "sadsdfhsdf", "flow_uuid": "sdfskhfskdjhfs", "contacts": "ksadaskjdajsda" } request = self.factory.put('/', data=post_data, **self.extra) response = self.view(request, pk=rest.get('id')) self.assertEquals(response.status_code, 200)
def save(self): """ Creates and updates RestService and MetaData objects with textit or rapidpro service properties. """ service = RestService() if not self.pk else \ RestService.objects.get(pk=self.pk) service.name = self.name service.service_url = self.service_url service.xform = self.xform try: service.save() except IntegrityError as e: if str(e).startswith("duplicate key value violates unique " "constraint"): msg = _(u"The service already created for this form.") else: msg = _(str(e)) raise serializers.ValidationError(msg) self.pk = service.pk self.date_created = service.date_created self.date_modified = service.date_modified data_value = '{}|{}|{}'.format(self.auth_token, self.flow_uuid, self.contacts) MetaData.textit(self.xform, data_value=data_value) if self.xform.is_merged_dataset: for xform in self.xform.mergedxform.xforms.all(): MetaData.textit(xform, data_value=data_value)
def test_textit_flow_without_parsed_instances(self, mock_http): rest = RestService(name="textit", service_url="https://server.io", xform=self.xform) rest.save() MetaData.textit(self.xform, data_value='{}|{}|{}'.format("sadsdfhsdf", "sdfskhfskdjhfs", "ksadaskjdajsda")) self.assertFalse(mock_http.called) self._make_submissions()
def save(self, **kwargs): rs = RestService() if not self.pk else \ RestService.objects.get(pk=self.pk) rs.name = self.name rs.service_url = self.service_url rs.xform = self.xform rs.save() data_value = '{}|{}|{}'.format(self.auth_token, self.flow_uuid, self.contacts) MetaData.textit(self.xform, data_value=data_value) self.pk = rs.pk
def test_textit_flow(self, mock_http): rest = RestService(name="textit", service_url="https://server.io", xform=self.xform) rest.save() MetaData.textit(self.xform, data_value='{}|{}|{}'.format("sadsdfhsdf", "sdfskhfskdjhfs", "ksadaskjdajsda")) self.assertFalse(mock_http.called) self._make_submissions() self.assertTrue(mock_http.called) self.assertEquals(mock_http.call_count, 4)
def retrieve(self): meta = MetaData.textit(self.xform) try: self.auth_token, self.flow_uuid, self.contacts = \ meta.data_value.split(METADATA_SEPARATOR) except ValueError: raise serializers.ValidationError( _("Error occurred when loading textit service." "Resolve by updating auth_token, flow_uuid and contacts" " fields"))
def save(self): """ Creates and updates RestService and MetaData objects with textit or rapidpro service properties. """ service = RestService() if not self.pk else \ RestService.objects.get(pk=self.pk) service.name = self.name service.service_url = self.service_url service.xform = self.xform try: service.save() except IntegrityError as e: if str(e).startswith("duplicate key value violates unique " "constraint"): msg = _(u"The service already created for this form.") else: msg = _(str(e)) raise serializers.ValidationError(msg) self.pk = service.pk self.date_created = service.date_created self.date_modified = service.date_modified self.active = service.active self.inactive_reason = service.inactive_reason data_value = '{}|{}|{}'.format(self.auth_token, self.flow_uuid, self.contacts) MetaData.textit(self.xform, data_value=data_value) if self.xform.is_merged_dataset: for xform in self.xform.mergedxform.xforms.all(): MetaData.textit(xform, data_value=data_value)
def update(self, instance, validated_data): data_value = MetaData.textit(instance.xform) or '' values = data_value.split(settings.METADATA_SEPARATOR) if len(values) < 3: values = ['', '', ''] xform = validated_data.get('xform', instance.xform) auth_token = validated_data.get('auth_token', values[0]) flow_uuid = validated_data.get('flow_uuid', values[1]) contacts = validated_data.get('contacts', values[2]) name = validated_data.get('name', instance.name) service_url = validated_data.get('service_url', instance.service_url) instance = TextItService(xform, service_url, name, auth_token, flow_uuid, contacts, instance.pk) instance.save() return instance
def restore_object(self, attrs, instance=None): if instance: meta = MetaData.textit(instance.xform) values = meta.data_value.split(settings.METADATA_SEPARATOR) if len(values) < 3: values = ['', '', ''] xform = attrs.get('xform', instance.xform) auth_token = attrs.get('auth_token', values[0]) flow_uuid = attrs.get('flow_uuid', values[1]) contacts = attrs.get('contacts', values[2]) name = attrs.get('name', instance.name) service_url = attrs.get('service_url', instance.service_url) return TextItService(xform, service_url, name, auth_token, flow_uuid, contacts, instance.pk) return TextItService(**attrs)
def retrieve(self): """ Sets the textit or rapidpro properties from the MetaData object. The properties are: - auth_token - flow_uuid - contacts """ data_value = MetaData.textit(self.xform) try: self.auth_token, self.flow_uuid, self.contacts = \ data_value.split(METADATA_SEPARATOR) except ValueError: raise serializers.ValidationError( _("Error occurred when loading textit service." "Resolve by updating auth_token, flow_uuid and contacts" " fields"))
def retrieve(self): meta = MetaData.textit(self.xform) self.auth_token, self.flow_uuid, self.contacts = \ meta.data_value.split(METADATA_SEPARATOR)