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
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 _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
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 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 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 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_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")
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_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)
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()
def _create_rest_service(self): rs = RestService(service_url=self.service_url, xform=self.xform, name=self.service_name) rs.save() self.restservice = rs