def get(self, request): now = timezone.now() context = { 'courses': ServiceCourse.objects.all(), 'services': Service.get_annotated_list(), 'discounts': Discount.objects.filter( is_published=True, created_at__lt=now).exclude(close_at__lte=now), 'qr_data': 'http://%s%s' % (get_current_site(request), reverse('pages:services')), 'qr_host': 'www.ryabinaclinic.ru' } template = get_template(self.template_name) # return render_to_response(self.template_name, context, context_instance=RequestContext(request)) result = StringIO() pdf = pisa.pisaDocument( StringIO(template.render(context).encode("UTF-8")), result) if not pdf.err: response = HttpResponse(result.getvalue(), content_type='application/pdf') response[ 'Content-Disposition'] = 'attachment; filename=ryabina_price_%s.pdf' % timezone.now( ).strftime('_%Y_%m_%d__%H_%M') return response else: return HttpResponseServerError()
def post(self, request, format=None): """ Creates a new service """ if request.user.is_admin: serializer = self.serializer_class(data=request.data) if serializer.is_valid(): # Getting serialized data request_data = serializer.data if not Service.objects.filter(name=request_data['name']): try: with transaction.atomic(): # Creating service service = Service() service.name = request_data['name'] service.category = Category.objects.get( pk=request_data['category']) service.cost_price = request_data['cost_price'] service.sale_price = request_data['sale_price'] if 'description' in request_data and request_data[ 'description']: service.description = request_data[ 'description'] service.save() return Response({"id": service.id}, status=status.HTTP_201_CREATED) except Exception as e: return Response( { "type": "internal_server_error", "detail": str(e) }, status=status.HTTP_500_INTERNAL_SERVER_ERROR) else: return Response({"type": "service_already_exist"}, status=status.HTTP_409_CONFLICT) else: return Response( { "type": "validation_error", "errors": serializer.errors }, status=status.HTTP_400_BAD_REQUEST) else: return Response({"type": "unauthorized"}, status=status.HTTP_401_UNAUTHORIZED)
def setUp(self): super(TestGetEscalation, self).setUp() self.sp = SchedulePolicy(name=random_string(), repeat_times=1) self.sp.save() self.service = Service(name=random_string(), policy=self.sp) self.service.save() self.cal = Calendar( name=random_string(), slug=random_string(), ) self.cal.save() self.spr = SchedulePolicyRule( schedule_policy=self.sp, position=0, schedule=self.cal, escalate_after=1, ) self.spr.save()
def setUp(self): super(TestAPI, self).setUp() self.sp = SchedulePolicy(name=random_string(), repeat_times=1) self.sp.save() self.service = Service(name=random_string(), policy=self.sp) self.service.save() self.token = Token(key="testtoken") self.token.save() self.servicetoken = ServiceTokens(name="testbinding", service_id=self.service, token_id=self.token) self.servicetoken.save() self.service2 = Service(name=random_string(), policy=self.sp) self.service2.save() self.token2 = Token(key="testtoken2") self.token2.save() self.servicetoken2 = ServiceTokens(name="testbinding", service_id=self.service2, token_id=self.token2) self.servicetoken2.save()
def get(self, request): now = timezone.now() context = { 'courses': ServiceCourse.objects.all(), 'services': Service.get_annotated_list(), 'discounts': Discount.objects.filter(is_published=True, created_at__lt=now).exclude(close_at__lte=now), 'qr_data': 'http://%s%s' % (get_current_site(request), reverse('pages:services')), 'qr_host': 'www.ryabinaclinic.ru' } template = get_template(self.template_name) # return render_to_response(self.template_name, context, context_instance=RequestContext(request)) result = StringIO() pdf = pisa.pisaDocument(StringIO(template.render(context).encode("UTF-8")), result) if not pdf.err: response = HttpResponse(result.getvalue(), content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename=ryabina_price_%s.pdf' % timezone.now().strftime('_%Y_%m_%d__%H_%M') return response else: return HttpResponseServerError()
class TestGetEscalation(BaseTestCase): def setUp(self): super(TestGetEscalation, self).setUp() self.sp = SchedulePolicy(name=random_string(), repeat_times=1) self.sp.save() self.service = Service(name=random_string(), policy=self.sp) self.service.save() self.cal = Calendar( name=random_string(), slug=random_string(), ) self.cal.save() self.spr = SchedulePolicyRule( schedule_policy=self.sp, position=0, schedule=self.cal, escalate_after=1, ) self.spr.save() def tearDown(self): super(TestGetEscalation, self).tearDown() try: self.spr.delete() self.cal.delete() self.service.delete() self.sp.delete() except: pass @pytest.mark.skip(reason="TO Be Fixed") def test_get_escalation_works_with_no_recurrence(self): event = Event( start=timezone.now() - timedelta(days=1), end=timezone.now() + timedelta(days=1), title='{username},{username}'.format(username=self.username), calendar=self.cal, ) event.save() try: events = get_escalation_for_service(self.service) self.assertEqual(2, len(events)) finally: event.delete() def test_get_escalation_fails_with_no_recurrence_after_event_end(self): event = Event( start = timezone.now() - timedelta(days=2), end = timezone.now() - timedelta(days=1), title = '{username},{username}'.format(username=self.username), calendar = self.cal, ) event.save() try: events = get_escalation_for_service(self.service) self.assertEqual(0, len(events)) finally: event.delete() def test_get_escalation_empty_when_recurrance_is_not_now(self): rule = Rule( name=random_string(), description=random_string(), frequency='WEEKLY', ) rule.save() # Active yesterday, and 1 week from now, but not today event = Event( start = timezone.now() - timedelta(days=2), end = timezone.now() - timedelta(days=1), title = '{username},{username}'.format(username=self.username), calendar = self.cal, rule = rule, ) event.save() events = get_escalation_for_service(self.service) self.assertEqual(0, len(events)) @pytest.mark.skip(reason="TO Be Fixed") def test_get_escalation_works_when_recurrance_is_now(self): rule = Rule( name=random_string(), description=random_string(), frequency='WEEKLY', ) rule.save() # Active last week at this time, recurring now event = Event( start = timezone.now() - timedelta(days=7, hours=5), end = timezone.now() + timedelta(hours=4) - timedelta(days=7), title = '{username},{username}'.format(username=self.username), calendar = self.cal, rule = rule, ) event.save() events = get_escalation_for_service(self.service) self.assertEqual(2, len(events)) def test_get_escalation_returns_empty_for_muted_services(self): event = Event( start = timezone.now() - timedelta(days=1), end = timezone.now() + timedelta(days=1), title = '{username},{username}'.format(username=self.username), calendar = self.cal, ) event.save() self.service.notifications_disabled = True try: events = get_escalation_for_service(self.service) self.assertEqual(0, len(events)) finally: event.delete()
def save(request): # Update service fields try: service_id = request.POST.get("id") if service_id != '0': service = Service.objects.get(id=service_id) else: service = Service() except Service.DoesNotExist: service = Service() service.name = request.POST['name'] service.escalate_after = request.POST['escalate_after'] service.retry = request.POST['retry'] service.notifications_disabled = request.POST.get("disable_notification", "off") == "on" service.send_resolve_enabled = request.POST.get( "send_resolve_notification", "off") == "on" if (request.POST['policy']): pol = SchedulePolicy.objects.get(id=request.POST['policy']) else: pol = None service.policy = pol # Save service try: service.save() except IntegrityError: messages.error(request, 'Service validation failed') if len(request.POST['id']) > 0: return HttpResponseRedirect( reverse('openduty.services.edit', None, [str(request.POST['id'])])) else: return HttpResponseRedirect(reverse('openduty.services.new')) return HttpResponseRedirect('/services/')
class TestAPI(BaseTestCase): def setUp(self): super(TestAPI, self).setUp() self.sp = SchedulePolicy(name=random_string(), repeat_times=1) self.sp.save() self.service = Service(name=random_string(), policy=self.sp) self.service.save() self.token = Token(key="testtoken") self.token.save() self.servicetoken = ServiceTokens(name="testbinding", service_id=self.service, token_id=self.token) self.servicetoken.save() self.service2 = Service(name=random_string(), policy=self.sp) self.service2.save() self.token2 = Token(key="testtoken2") self.token2.save() self.servicetoken2 = ServiceTokens(name="testbinding", service_id=self.service2, token_id=self.token2) self.servicetoken2.save() def tearDown(self): super(TestAPI, self).tearDown() try: self.servicetoken.delete() self.servicetoken2.delete() self.token2.delete() self.token.delete() self.service2.delete() self.service.delete() self.sp.delete() except: pass def test_create_event(self): try: client = APIClient() response = client.post( '/api/create_event', data={ "incident_key": "testing", "service_key": self.token.key, "event_type": "trigger", "description": "test", "details": "test" }, ) self.assertEqual(201, response.status_code) new_instance = Incident.objects.get(incident_key='testing') self.assertEqual("testing", new_instance.incident_key) self.assertEqual(Incident.TRIGGER, new_instance.event_type) self.assertEqual(self.service, new_instance.service_key) finally: pass def test_create_event_fails_with_invalid_key(self): try: client = APIClient() response = client.post( '/api/create_event', data={ "incident_key": "testing", "service_key": "invalid", "event_type": "trigger", "description": "test", "details": "test" }, ) self.assertEqual(403, response.status_code) finally: pass def inject_incident(self): incident = Incident() incident.service_key = self.service incident.event_type = Incident.TRIGGER incident.incident_key = "testing" incident.description = "test" incident.details = "test" incident.occurred_at = timezone.now() incident.save() def test_create_event_different_service(self): self.inject_incident() try: client = APIClient() response = client.post( '/api/create_event', data={ "incident_key": "testing", "service_key": self.token2.key, "event_type": "trigger", "description": "test", "details": "test" }, ) self.assertEqual(201, response.status_code) incidents = Incident.objects.all() self.assertEqual(2, incidents.count()) finally: pass def test_incident_recovery(self): self.inject_incident() try: client = APIClient() response = client.post( '/api/create_event', data={ "incident_key": "testing", "service_key": self.token.key, "event_type": "resolve", "description": "test", "details": "test" }, ) self.assertEqual(201, response.status_code) updated = Incident.objects.get(incident_key='testing') self.assertEqual(Incident.RESOLVE, updated.event_type) finally: updated.delete() def test_incident_acknowledge(self): self.inject_incident() try: client = APIClient() response = client.post( '/api/create_event', data={ "incident_key": "testing", "service_key": self.token.key, "event_type": "acknowledge", "description": "test", "details": "test" }, ) self.assertEqual(201, response.status_code) updated = Incident.objects.get(incident_key='testing') self.assertEqual(Incident.ACKNOWLEDGE, updated.event_type) finally: updated.delete()
def get_services_annotated_list(service): return Service.get_annotated_list(parent=service)