def extract_signatures(pdfpath, profile): def remove_spaces(string): return "".join(string.rstrip().lstrip()) try: # signatures = [] with pdfplumber.open(pdfpath) as pdf: table1 = pdf.pages[0].extract_tables()[0][1:] schedule = Schedule.objects.create(profile=profile) for val in table1: if 'Local:' in val[1] and 'Tipo:' in val[ 1] and 'MATRICULADO' in val[3]: code = remove_spaces(val[0]).upper() group = remove_spaces(val[2]).title() schedules = val[4].split() about = val[1].split('\n') # Tipo: DISCIPLINA Local: sala de aula virtual classroom_type = about[-1].split('Local:') classroom = remove_spaces(classroom_type[-1]).title() stype = remove_spaces( classroom_type[0].split('Tipo:')[-1]).title() professor = remove_spaces(about[-2]).title() name = remove_spaces((' '.join(about[0:-2]))).title() classroom = Classroom.objects.create(profile=profile, content={ "name": name, "code": code, "type": stype, "professor": professor, "classroom": classroom, "group": group, "schedules": schedules }) schedule.classrooms.add(classroom) # signatures.append({"name": name, "code": code, "type": stype, "professor": professor, "classroom": classroom, "group": group, "schedules": schedules}) return ScheduleSerializer(instance=schedule).data except Exception as ex: print("Signature exception ", str(ex)) return -1
def test_recipients_more_than_500_raises_validation_error(self): data = {} recipients = [{ 'name': 'test', 'email_address': f'test{idx}@test.com' } for idx in range(501)] data = create_schedule_input_data(recipients=recipients) serializer = ScheduleSerializer(data=data) serializer.is_valid() self.assertEqual(serializer.errors['non_field_errors'][0], RECIPIENTS_GREATER_THAN_500_ERROR) with self.assertRaises(ValidationError): serializer.is_valid(raise_exception=True)
def schedule_list(request): """ view to fetch all schedules stored or to add a new schedule """ if request.method == 'GET': schedules = Schedule.objects.all() serializers = ScheduleSerializer(instance=schedules, many=True) return JsonResponse(serializers.data, safe=False) elif request.method == 'POST': data = JSONParser().parse(request) serializer = ScheduleSerializer(data=data) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, status=201) return JsonResponse(serializer.errors, status=400)
def test_recipient_duplication_raises_validation_error(self): recipients = [{ 'name': 'test', 'email_address': '*****@*****.**' }, { 'name': 'test', 'email_address': '*****@*****.**' }] data = create_schedule_input_data(recipients=recipients) serializer = ScheduleSerializer(data=data) serializer.is_valid() self.assertEqual(serializer.errors['non_field_errors'][0], RECIPIENTS_CONTAIN_DUPLICATES_ERROR) with self.assertRaises(ValidationError): serializer.is_valid(raise_exception=True)
def test_update_interval_when_updating_schedule(self): serialize_input_data(recipients=self.recipients) schedule = Schedule.objects.first() interval = Interval.objects.first() self.assertEqual(schedule.frequency, interval.interval) new_data = create_schedule_input_data() new_data['frequency'] = timedelta(days=3) new_data['end_date'] = new_data['start_date'] + timedelta(days=5) serializer = ScheduleSerializer(instance=schedule, data=new_data) self.assertEqual(serializer.is_valid(), True) if serializer.is_valid(): serializer.save() interval = Interval.objects.get(interval=new_data['frequency']) self.assertEqual(Schedule.objects.count(), 1) self.assertEqual(Interval.objects.count(), 2) self.assertEqual(schedule.frequency, new_data['frequency']) self.assertEqual(schedule.frequency, interval.interval)
def test_schedule_unique_together_validation(self): recipients = [{'name': 'test', 'email_address': '*****@*****.**'}] data_1 = create_schedule_input_data(recipients=recipients) serializer_1 = ScheduleSerializer(data=data_1) serializer_1.is_valid() serializer_1.save() data_2 = create_schedule_input_data(recipients=recipients) serializer_2 = ScheduleSerializer(data=data_2) serializer_2.is_valid() self.assertEqual(serializer_2.errors['non_field_errors'][0], FIELDS_NOT_UNIQUE_TOGETHER_ERROR) with self.assertRaises(ValidationError): serializer_2.is_valid(raise_exception=True)