Ejemplo n.º 1
0
    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)
Ejemplo n.º 3
0
    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()
Ejemplo n.º 5
0
    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)
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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"))
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
    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"))
Ejemplo n.º 14
0
    def retrieve(self):
        meta = MetaData.textit(self.xform)

        self.auth_token, self.flow_uuid, self.contacts = \
            meta.data_value.split(METADATA_SEPARATOR)
Ejemplo n.º 15
0
    def retrieve(self):
        meta = MetaData.textit(self.xform)

        self.auth_token, self.flow_uuid, self.contacts = \
            meta.data_value.split(METADATA_SEPARATOR)