Пример #1
0
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
Пример #2
0
    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)
Пример #3
0
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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
 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)