Esempio n. 1
0
 def _create_rest_service(self):
     rs = RestService(service_url=settings.KPI_HOOK_ENDPOINT_PATTERN.format(
         asset_uid='aAAAAAAAAAAA'),
                      xform=XForm.objects.all().reverse()[0],
                      name='kpi_hook')
     rs.save()
     self.restservice = rs
Esempio n. 2
0
 def _create_rest_service(self):
     rs = RestService(
         service_url='/api/v2/assets/aAAAAAAAAAAA/hook-signal/',
         xform=XForm.objects.all().reverse()[0],
         name='kpi_hook')
     rs.save()
     self.restservice = rs
Esempio n. 3
0
def add_service(request, username, id_string):
    data = {}
    form = RestServiceForm()
    xform_kwargs = {
        'id_string__iexact': id_string,
        'user__username__iexact': username
    }

    xform = get_form(xform_kwargs)
    if request.method == 'POST':
        form = RestServiceForm(request.POST)
        restservice = None
        if form.is_valid():
            service_name = form.cleaned_data['service_name']
            service_url = form.cleaned_data['service_url']
            try:
                rs = RestService(service_url=service_url,
                                 name=service_name,
                                 xform=xform)
                rs.save()
            except IntegrityError:
                message = _(u"Service already defined.")
                status = 'fail'
            else:
                status = 'success'
                message = (_(u"Successfully added service %(name)s.") % {
                    'name': service_name
                })
                service_tpl = render_to_string(
                    "service.html", {
                        "sv": rs,
                        "username": xform.user.username,
                        "id_string": xform.id_string
                    })
                restservice = service_tpl
        else:
            status = 'fail'
            message = _(u"Please fill in all required fields")

            if form.errors:
                for field in form:
                    message += Template(u"{{ field.errors }}")\
                        .render(Context({'field': field}))
        if request.is_ajax():
            response = {'status': status, 'message': message}
            if restservice:
                response["restservice"] = u"%s" % restservice

            return HttpResponse(json.dumps(response))

        data['status'] = status
        data['message'] = message

    data['list_services'] = RestService.objects.filter(xform=xform)
    data['form'] = form
    data['username'] = username
    data['id_string'] = id_string

    return render(request, "add-service.html", data)
Esempio n. 4
0
def add_service(request, username, id_string):
    data = {}
    form = RestServiceForm()
    xform_kwargs = {
        'id_string__iexact': id_string,
        'user__username__iexact': username
    }

    xform = get_form(xform_kwargs)
    if request.method == 'POST':
        form = RestServiceForm(request.POST)
        restservice = None
        if form.is_valid():
            service_name = form.cleaned_data['service_name']
            service_url = form.cleaned_data['service_url']
            try:
                rs = RestService(service_url=service_url,
                                 name=service_name, xform=xform)
                rs.save()
            except IntegrityError:
                message = _(u"Service already defined.")
                status = 'fail'
            else:
                status = 'success'
                message = (_(u"Successfully added service %(name)s.")
                           % {'name': service_name})
                service_tpl = render_to_string("service.html", {
                    "sv": rs, "username": xform.user.username,
                    "id_string": xform.id_string})
                restservice = service_tpl
        else:
            status = 'fail'
            message = _(u"Please fill in all required fields")

            if form.errors:
                for field in form:
                    message += Template(u"{{ field.errors }}")\
                        .render(Context({'field': field}))
        if request.is_ajax():
            response = {'status': status, 'message': message}
            if restservice:
                response["restservice"] = u"%s" % restservice

            return HttpResponse(json.dumps(response))

        data['status'] = status
        data['message'] = message

    data['list_services'] = RestService.objects.filter(xform=xform)
    data['form'] = form
    data['username'] = username
    data['id_string'] = id_string

    return render(request, "add-service.html", data)
    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 test_delete(self):
        rest = RestService(name="testservice",
                           service_url="http://serviec.io",
                           xform=self.xform)
        rest.save()

        count = RestService.objects.all().count()

        request = self.factory.delete('/', **self.extra)
        response = self.view(request, pk=rest.pk)

        self.assertEquals(response.status_code, 204)
        self.assertEquals(count - 1, RestService.objects.all().count())
    def test_delete(self):
        rest = RestService(name="testservice",
                           service_url="http://serviec.io",
                           xform=self.xform)
        rest.save()

        count = RestService.objects.all().count()

        request = self.factory.delete('/', **self.extra)
        response = self.view(request, pk=rest.pk)

        self.assertEquals(response.status_code, 204)
        self.assertEquals(count-1, RestService.objects.all().count())
Esempio n. 8
0
def add_service(request, username, id_string):
    context = RequestContext(request)
    form = RestServiceForm()
    xform = get_object_or_404(XForm,
                              user__username=username,
                              id_string=id_string)
    if request.method == 'POST':
        form = RestServiceForm(request.POST)
        context.restservice = None
        if form.is_valid():
            service_name = form.cleaned_data['service_name']
            service_url = form.cleaned_data['service_url']
            try:
                rs = RestService(service_url=service_url,
                                 name=service_name,
                                 xform=xform)
                rs.save()
            except IntegrityError:
                context.message = _(u"Service already defined.")
                context.status = 'fail'
            else:
                context.status = 'success'
                context.message = (_(u"Successfully added service %(name)s.") %
                                   {
                                       'name': service_name
                                   })
                service_tpl = render_to_string(
                    "service.html", {
                        "sv": rs,
                        "username": xform.user.username,
                        "id_string": xform.id_string
                    })
                context.restservice = service_tpl
        else:
            context.status = 'fail'
            context.message = _(u"Please fill in all required fields")
            if form.errors:
                for field in form:
                    context.message += Template(u"{{ field.errors }}")\
                        .render(Context({'field': field}))
        if request.is_ajax():
            response = {'status': context.status, 'message': context.message}
            if context.restservice:
                response["restservice"] = u"%s" % context.restservice
            return HttpResponse(json.dumps(response))
    context.list_services = RestService.objects.filter(xform=xform)
    context.form = form
    context.username = username
    context.id_string = id_string
    return render_to_response("add-service.html", context_instance=context)
    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)
Esempio n. 10
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)
Esempio n. 11
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
Esempio n. 12
0
    def test_retrieve(self):
        rest = RestService(name="testservice",
                           service_url="http://serviec.io",
                           xform=self.xform)
        rest.save()

        request = self.factory.get('/', **self.extra)
        response = self.view(request, pk=rest.pk)

        data = {
            'id': rest.pk,
            'xform': self.xform.pk,
            'name': u'testservice',
            'service_url': u'http://serviec.io'
        }
        self.assertEquals(response.status_code, 200)

        self.assertEquals(response.data, data)
    def test_retrieve(self):
        rest = RestService(name="testservice",
                           service_url="http://serviec.io",
                           xform=self.xform)
        rest.save()

        request = self.factory.get('/', **self.extra)
        response = self.view(request, pk=rest.pk)

        data = {
            'id': rest.pk,
            'xform': self.xform.pk,
            'name': u'testservice',
            'service_url': u'http://serviec.io'
        }
        self.assertEquals(response.status_code, 200)

        self.assertEquals(response.data, data)
    def test_update(self):
        rest = RestService(name="testservice",
                           service_url="http://serviec.io",
                           xform=self.xform)
        rest.save()

        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.pk)

        self.assertEquals(response.status_code, 200)
        self.assertEquals(response.data['name'], "textit")
Esempio n. 15
0
def save_kpi_hook_service(sender, instance, **kwargs):
    """
    Creates/Deletes Kpi hook Rest service related to XForm instance
    :param sender: XForm class
    :param instance: XForm instance
    :param kwargs: dict
    """
    kpi_hook_service = instance.kpi_hook_service
    if instance.has_kpi_hooks:
        # Only register the service if it hasn't been created yet.
        if kpi_hook_service is None:
            kpi_hook_service = RestService(
                service_url="/assets/{}/submissions/".format(instance.id_string),
                xform=instance,
                name=SERVICE_KPI_HOOK[0]
            )
            kpi_hook_service.save()
    elif kpi_hook_service is not None:
        # Only delete the service if it already exists.
        kpi_hook_service.delete()
    def test_update(self):
        rest = RestService(name="testservice",
                           service_url="http://serviec.io",
                           xform=self.xform)
        rest.save()

        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.pk)

        self.assertEquals(response.status_code, 200)
        self.assertEquals(response.data['name'], "textit")
    def test_retrieve(self):
        rest = RestService(name="testservice",
                           service_url="http://serviec.io",
                           xform=self.xform)
        rest.save()

        request = self.factory.get('/', **self.extra)
        response = self.view(request, pk=rest.pk)

        data = {
            'id': rest.pk,
            'xform': self.xform.pk,
            'name': u'testservice',
            'service_url': u'http://serviec.io',
            'active': True,
            'inactive_reason': ''
        }
        response.data.pop('date_modified')
        response.data.pop('date_created')
        self.assertEquals(response.status_code, 200)

        self.assertEquals(response.data, data)
Esempio n. 18
0
def add_service(request, username, id_string):
    context = RequestContext(request)
    form = RestServiceForm()
    xform = get_object_or_404(XForm, user__username=username, id_string=id_string)
    if request.method == "POST":
        form = RestServiceForm(request.POST)
        context.restservice = None
        if form.is_valid():
            service_name = form.cleaned_data["service_name"]
            service_url = form.cleaned_data["service_url"]
            try:
                rs = RestService(service_url=service_url, name=service_name, xform=xform)
                rs.save()
            except IntegrityError:
                context.message = _(u"Service already defined.")
                context.status = "fail"
            else:
                context.status = "success"
                context.message = _(u"Successfully added service %(name)s.") % {"name": service_name}
                service_tpl = render_to_string(
                    "service.html", {"sv": rs, "username": xform.user.username, "id_string": xform.id_string}
                )
                context.restservice = service_tpl
        else:
            context.status = "fail"
            context.message = _(u"Please fill in all required fields")
            if form.errors:
                for field in form:
                    context.message += Template(u"{{ field.errors }}").render(Context({"field": field}))
        if request.is_ajax():
            response = {"status": context.status, "message": context.message}
            if context.restservice:
                response["restservice"] = u"%s" % context.restservice
            return HttpResponse(json.dumps(response))
    context.list_services = RestService.objects.filter(xform=xform)
    context.form = form
    context.username = username
    context.id_string = id_string
    return render_to_response("add-service.html", context_instance=context)
Esempio n. 19
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
Esempio n. 20
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
Esempio n. 21
0
def save_kpi_hook_service(sender, instance, **kwargs):
    """
    Creates/Deletes Kpi hook Rest service related to XForm instance
    :param sender: XForm class
    :param instance: XForm instance
    :param kwargs: dict
    """
    kpi_hook_service = instance.kpi_hook_service
    if instance.has_kpi_hooks:
        # Only register the service if it hasn't been created yet.
        if kpi_hook_service is None:
            kpi_hook_service = RestService(
                service_url="/assets/{}/submissions/".format(
                    instance.id_string),
                xform=instance,
                name=SERVICE_KPI_HOOK[0])
            kpi_hook_service.save()
    elif kpi_hook_service is not None:
        # Only delete the service if it already exists.
        kpi_hook_service.delete()
Esempio n. 22
0
def save_kpi_hook_service(sender, instance, **kwargs):
    """
    Creates/Deletes Kpi hook Rest service related to XForm instance
    :param sender: XForm class
    :param instance: XForm instance
    :param kwargs: dict
    """
    kpi_hook_service = instance.kpi_hook_service
    if instance.has_kpi_hooks:
        # Only register the service if it hasn't been created yet.
        if kpi_hook_service is None:
            # For retro-compatibility, if `asset_uid` is null, fallback on
            # `id_string`
            asset_uid = instance.kpi_asset_uid if instance.kpi_asset_uid \
                else instance.id_string
            kpi_hook_service = RestService(
                service_url=settings.KPI_HOOK_ENDPOINT_PATTERN.format(
                    asset_uid=asset_uid),
                xform=instance,
                name=SERVICE_KPI_HOOK[0])
            kpi_hook_service.save()
    elif kpi_hook_service is not None:
        # Only delete the service if it already exists.
        kpi_hook_service.delete()
Esempio n. 23
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)
Esempio n. 24
0
 def _create_rest_service(self):
     rs = RestService(service_url=self.service_url,
                      xform=self.xform,
                      name=self.service_name)
     rs.save()
     self.restservice = rs
Esempio n. 25
0
 def _create_rest_service(self):
     rs = RestService(service_url=self.service_url,
                      xform=self.xform, name=self.service_name)
     rs.save()
     self.restservice = rs