Пример #1
0
    def test_log_student_updated_added_event(self):
        """Check logging signal for newly created student"""
        # add own root handler to catch student signals output
        out = StringIO()
        handler = logging.StreamHandler(out)
        logging.root.addHandler(handler)

        # now create student, this should raise new message inside
        # our logger output file
        student = Student(first_name='Demo', last_name='Student')
        student.save()

        # check output file content
        out.seek(0)
        self.assertEqual(out.readlines()[-1],
                         'Student added: Demo Student (ID: %d)\n' % student.id)

        # now update existing student and check last line in out
        student.ticket = '12345'
        student.save()
        out.seek(0)
        self.assertEqual(
            out.readlines()[-1],
            'Student updated: Demo Student (ID: %d)\n' % student.id)

        # remove our handler from root logger
        logging.root.removeHandler(handler)
Пример #2
0
def students_add(request):
    if request.method == "POST":
        if request.POST.get('add_button') is not None:
            errors = {}
            data = {'middle_name': request.POST.get('middle_name'), 'notes': request.POST.get('notes')}
            first_name = request.POST.get('first_name', '').strip()
            if not first_name:
                errors['first_name'] = u"Ім'я є обов'язковим"
            else:
                data['first_name'] = first_name
            last_name = request.POST.get('last_name', '').strip()
            if not last_name:
                errors['last_name']=u"Прізвище є обов'язковим"
            else:
                data['last_name']=last_name
            birthday = request.POST.get('birthday', '').strip()
            if not birthday:
                errors['birthday']=u"Дата народження є обов'язковою"
            else:
                data['birthday']=birthday
            ticket = request.POST.get('ticket', '').strip()
            if not birthday:
                errors['ticket']=u"Студентський квиток є обов'язковим"
            else:
                data['ticket']=ticket
            student_group = request.POST.get('student_group', '').strip()
            if not birthday:
                errors['student_group']=u"Група є обов'язковою"
            else:
                data['student_group']=Group.objects.get(pk=student_group)
            photo = request.FILES.get('photo')
            if photo:
                data['photo'] = photo
            if not errors:
                student = Student(**data)
                student.save()
                return HttpResponseRedirect(u'%s?status_message=Студента успішно додано!' %reverse('home'))
            else:
                return render(request, 'students/students_add.html', {'groups': Group.objects.all().order_by('title'), 'errors': errors})
        elif request.POST.get('cancel_button') is not None:
            return HttpResponseRedirect(u'%s?status_message=Додавання студента скасовано!' %reverse('home'))
    else:
        return render(request, 'students/students_add.html', {'groups': Group.objects.all().order_by('title')})
Пример #3
0
    def test_log_student_deleted_event(self):
        """Check logging signals for deleted student"""
        student = Student(first_name='Demo', last_name='Student')
        student.save()

        # now override signal
        # add own root handler to catch student signals output
        out = StringIO()
        handler = logging.StreamHandler(out)
        logging.root.addHandler(handler)

        # delete existing student and check logger output
        sid = student.id
        student.delete()
        out.seek(0)
        self.assertEqual(out.readlines()[-1],
            'Student deleted: Demo Student (ID: %d)\n' % sid)

        # remove our handler from root logger
        logging.root.removeHandler(handler)
Пример #4
0
    def test_log_student_updated_added_event(self):
        """Check logging signal for newly created student"""
        # add own root handler to catch student signals output
        out = StringIO()
        handler = logging.StreamHandler(out)
        logging.root.addHandler(handler)

        # now create student, this should raise new message inside
        # our logger output file
        student = Student(first_name='Demo', last_name='Student')
        student.save()

        # check output file content
        out.seek(0)
        self.assertEqual(out.readlines()[-1],
            'Student added: Demo Student (ID: %d)\n' % student.id)

        # now update existing student and check last line in out
        student.ticket = '12345'
        student.save()
        out.seek(0)
        self.assertEqual(out.readlines()[-1],
            'Student updated: Demo Student (ID: %d)\n' % student.id)

        # remove our handler from root logger
        logging.root.removeHandler(handler)
Пример #5
0
    def test_log_student_updated_added_event(self):
        out = StringIO()
        handler = logging.StreamHandler(out)
        logging.root.addHandler(handler)

        student = Student(first_name='Demo', last_name='Student')
        student.save()

        out.seek(0)
        self.assertEqual(out.readlines()[-1],
                         'Student added: Demo Student (ID: %d)\n' % student.id)

        student.ticker = '12345'
        student.save()
        out.seek(0)
        self.assertEqual(
            out.readlines()[-1],
            'Student updated: Demo Student (ID: %d)\n' % student.id)

        logging.root.removeHandler(handler)
Пример #6
0
    def test_log_student_deleted_event(self):
        #     """Check logging signals for deleted student"""
        student = Student(first_name='Demo', last_name='Student')
        student.save()

        #     # now override signal
        #     # add own root handler to catch student signals output
        out = StringIO()
        handler = logging.StreamHandler(out)
        logging.root.addHandler(handler)

        #     # delete existing student and check logger output
        sid = student.id
        student.delete()
        out.seek(0)
        self.assertEqual(out.readlines()[-1],
                         'Student deleted: Demo Student (ID: %d)\n' % sid)

        #     # remove our handler from root logger
        logging.root.removeHandler(handler)
Пример #7
0
 def test_unicode(self):
     student = Student(first_name='Demo', last_name='Student')
     self.assertEqual(unicode(student), u'Demo Student')
Пример #8
0
def students_add(request):
    # Якщо форма була запощена:
    # was form posted?
    if request.method == "POST":
        # Якщо кнопка Додати була натиснута:
        # was form add button clicked?
        if request.POST.get('add_button') is not None:
            data = {
                'middle_name': request.POST['middle_name'],
                'notes': request.POST['notes']
            }
            # Перевіряємо дані на коректність та збираємо помилки
            # validate input from user
            errors = {}

            first_name = request.POST.get('first_name', '').strip()
            if not first_name:
                errors['first_name'] = "Ім'я є обов'язковим"
            else:
                data['first_name'] = first_name

            last_name = request.POST.get('last_name', '').strip()
            if not last_name:
                errors['last_name'] = "Прізвище є обов'язковим"
            else:
                data['last_name'] = last_name

            ticket = request.POST.get('ticket', '').strip()
            if not ticket:
                errors['ticket'] = "Квиток є обов'язковим"
            else:
                data['ticket'] = ticket

            birthday = request.POST.get('birthday', '').strip()
            if not birthday:
                errors['birthday'] = "Дата народження є обов'язковою"
            else:
                try:
                    datetime.strptime(birthday, '%Y-%m-%d')
                except Exception:
                    errors['birthday'] = \
                        "Введіть коректний формат дати (напр. 1984-12-30)"
                else:
                    data['birthday'] = birthday

            student_group = request.POST['student_group']
            if not student_group:
                errors['student_group'] = "Група є обов'язковою"
            else:
                groups = Group.objects.filter(pk=student_group)
                if len(groups) != 1:
                    errors['student_group'] = "Оберіть коректну групу"
                else:
                    data['student_group'] = groups[0]

            photo = request.FILES.get(
                'photo')  # об*єкт класу InMemoryUploadedFile
            FORMAT_PHOTO = ('jpg', 'jpeg', 'png', 'bmp')
            SIZE_PHOTO = 10  # 10MB - граничний розмір для фото
            SIZE_THUMNAIL = (500, 500)
            # Перевіряю на допустимий розмір файла
            if photo.size > SIZE_PHOTO * 1024 * 1000:
                errors['photo'] = "".join([
                    "Розмір фото не повинен перевищувати ",
                    str(SIZE_PHOTO), " мегабайт"
                ])
                photo = None
            if photo:
                # Користуюся пакетом PIL для відсіювання файлів які не є фото
                try:
                    img = Image.open(photo)
                    img.thumbnail(SIZE_THUMNAIL, Image.ANTIALIAS)
                    thumb_io = BytesIO()
                    _format = photo.content_type.split('/')[1]
                    img.save(thumb_io, _format)
                    # Ініціалізатор для InMemoryUploadedFile, дивись
                    # /data/work/virtualenv3/studentsdb/lib/python3.4/site-packages/django/core/files/uploadedfile.py
                    # __init__(self, file, field_name, name, content_type, size, charset, content_type_extra=None):
                    _file = thumb_io
                    field_name = photo.field_name
                    name = "".join([
                        datetime.now().strftime("%Y-%m-%d %H-%M-%S"), ".",
                        _format
                    ])
                    content_type = photo.content_type
                    im = InMemoryUploadedFile(_file,
                                              field_name,
                                              name,
                                              content_type,
                                              size=None,
                                              charset=None)
                    data['photo'] = im
                    #import pdb; pdb.set_trace();
                except IOError:
                    errors['photo'] = "Це повино бути фото, наприклад файли з розширеням %s" \
                                    % ", ".join(FORMAT_PHOTO)
            #зберігаємо студента
            # Якщо дані були введені коректно:
            if not errors:
                # Створюємо та зберігаємо студента в базу
                #create student object
                student = Student(**data)
                student.save()
                #import pdb; pdb.set_trace();
                # Повертаємо користувача до списку студентів
                # redirect user to students_list
                messages.success(request,
                                 'Студента %s успішно додано!' % student)
                return HttpResponseRedirect(reverse('home'))
            # Якщо дані були введені некоректно:
            else:
                # Віддаємо шаблон форми разом із знайденими помилками
                # render form with errors and previous user input
                return render(
                    request, 'students/forms/students_add.html', {
                        'groups': Group.objects.all().order_by('title'),
                        'errors': errors
                    })
        # Якщо кнопка Скасувати була натиснута:
        elif request.POST.get('cancel_button') is not None:
            #Повертаємо користувача до списку студентів
            #redirect to home page on cancel button
            messages.warning(request, 'Додавання студента скасовано!')
            return HttpResponseRedirect(reverse('home'))
    # Якщо форма не була запощена:
    else:
        # initial form render
        # повертаємо код початкового стану форми
        return render(request, 'students/forms/students_add.html',
                      {'groups': Group.objects.all().order_by('title')})
Пример #9
0
def students_add(request):
    # Якщо форма була запощена:
    # was form posted?
    if request.method == "POST":
        # Якщо кнопка Додати була натиснута:
        # was form add button clicked?
        if request.POST.get('add_button') is not None:
            data = {'middle_name':request.POST['middle_name'], 
                    'notes': request.POST['notes']}
            # Перевіряємо дані на коректність та збираємо помилки
            # validate input from user
            errors = {}

            first_name = request.POST.get('first_name','').strip()
            if not first_name:
                errors['first_name'] = "Ім'я є обов'язковим"
            else: 
                data['first_name'] = first_name

            last_name = request.POST.get('last_name','').strip()
            if not last_name:
                errors['last_name'] = "Прізвище є обов'язковим"
            else: 
                data['last_name'] = last_name

            ticket = request.POST.get('ticket','').strip()
            if not ticket:
                errors['ticket'] = "Квиток є обов'язковим"
            else: 
                data['ticket'] = ticket

            birthday = request.POST.get('birthday','').strip()
            if not birthday:
                errors['birthday'] = "Дата народження є обов'язковою"
            else:
                try:
                    datetime.strptime(birthday,'%Y-%m-%d')
                except Exception:
                    errors['birthday'] = \
                        "Введіть коректний формат дати (напр. 1984-12-30)"
                else:
                    data['birthday'] = birthday

            student_group = request.POST['student_group']
            if not student_group:
                errors['student_group'] = "Група є обов'язковою"
            else: 
                groups = Group.objects.filter(pk=student_group)
                if len(groups) != 1:
                    errors['student_group'] = "Оберіть коректну групу" 
                else:
                    data['student_group'] = groups[0]

            photo = request.FILES.get('photo') # об*єкт класу InMemoryUploadedFile
            FORMAT_PHOTO = ('jpg', 'jpeg', 'png', 'bmp') 
            SIZE_PHOTO = 10 # 10MB - граничний розмір для фото
            SIZE_THUMNAIL = (500, 500)
            # Перевіряю на допустимий розмір файла
            if photo.size >SIZE_PHOTO*1024*1000:
                errors['photo'] = "".join(["Розмір фото не повинен перевищувати ", str(SIZE_PHOTO), " мегабайт"])
                photo = None
            if photo:
                # Користуюся пакетом PIL для відсіювання файлів які не є фото 
                try:          
                    img = Image.open(photo)
                    img.thumbnail(SIZE_THUMNAIL, Image.ANTIALIAS)
                    thumb_io = BytesIO()
                    _format = photo.content_type.split('/')[1]
                    img.save(thumb_io, _format)
                    # Ініціалізатор для InMemoryUploadedFile, дивись 
                    # /data/work/virtualenv3/studentsdb/lib/python3.4/site-packages/django/core/files/uploadedfile.py
                    # __init__(self, file, field_name, name, content_type, size, charset, content_type_extra=None):
                    _file = thumb_io
                    field_name = photo.field_name
                    name = "".join([datetime.now().strftime("%Y-%m-%d %H-%M-%S"),".", _format])
                    content_type = photo.content_type
                    im = InMemoryUploadedFile(_file, field_name, name, content_type, size=None, charset=None)
                    data['photo'] = im
                    #import pdb; pdb.set_trace();
                except IOError:
                    errors['photo'] = "Це повино бути фото, наприклад файли з розширеням %s" \
                                    % ", ".join(FORMAT_PHOTO)
            #зберігаємо студента
            # Якщо дані були введені коректно:
            if not errors:
                # Створюємо та зберігаємо студента в базу
                #create student object
                student = Student(**data)
                student.save()
                #import pdb; pdb.set_trace();
                # Повертаємо користувача до списку студентів
                # redirect user to students_list
                messages.success(request, 'Студента %s успішно додано!' % student)
                return HttpResponseRedirect(reverse('home'))
            # Якщо дані були введені некоректно:
            else:
                # Віддаємо шаблон форми разом із знайденими помилками
                # render form with errors and previous user input
                return render(request,'students/forms/students_add.html',
                                      {'groups':Group.objects.all().order_by('title'),
                                       'errors':errors})
        # Якщо кнопка Скасувати була натиснута:
        elif request.POST.get('cancel_button') is not None:
            #Повертаємо користувача до списку студентів
            #redirect to home page on cancel button
            messages.warning(request, 'Додавання студента скасовано!')
            return HttpResponseRedirect(reverse('home'))
    # Якщо форма не була запощена:       
    else:
        # initial form render
        # повертаємо код початкового стану форми
        return render(request,'students/forms/students_add.html',
                              {'groups':Group.objects.all().order_by('title')})
Пример #10
0
def students_add(request):
    # testa = request.META['SERVER_NAME']
    # print(request.build_absolute_uri('/'))
    '''         Метакод
         Якщо форма була запощена:
    Якщо кнопка Скасувати була натиснута:
        Повертаємо користувача до списку студентів
    Якщо кнопка Додати була натиснута:
        Перевіряємо дані на коректність та збираємо помилки
    Якщо дані були введені некоректно:
        Віддаємо шаблон форми разом із знайденими помилками
    Якщо дані були введені коректно:
        Створюємо та зберігаємо студента в базу
        Повертаємо користувача до списку студентів
     Якщо форма не була запощена:
        повертаємо код початкового стану форми
    '''
    # was form Posted?
    if request.method =='POST':
        # was form add button clicked?
        if request.POST.get('add_button') is not None:

            # TODO: validate input from user
            # error colections
            errors = {}

            # validate student data will go here
            data = {'middle_name': request.POST.get('middle_name'),
                    'notes': request.POST.get('notes')}

            # validate user input
            first_name = request.POST.get('first_name', '').strip()
            if not first_name:
                errors['first_name'] = "Ім'я є обовязковим "
            else:
                data['first_name'] = first_name

            last_name = request.POST.get('last_name', '').strip()
            if not last_name:
                errors['last_name'] = "Прізвище є обовязковим "
            else:
                data['last_name'] = last_name

            birthday = request.POST.get('birthday', '').strip()
            if not birthday:
                errors['birthday'] = "Дата народження є обовязковою "
            else:
                try:
                    datetime.strptime(birthday, '%Y-%m-%d')
                except Exception:
                    errors['birthday'] = 'Введіть коректний формат дати (напр. 1975-10-28)'
                else:
                    data['birthday'] = birthday

            ticket = request.POST.get('ticket', '').strip()
            if not ticket:
                errors['ticket'] = "Номер білета є обовязковим "
            else:
                data['ticket'] = ticket

            student_group = request.POST.get('student_group', '').strip()
            if not student_group:
                errors['student_group'] = 'Оберіть групу для студента'
            else:
                groups = Group.objects.filter(pk = student_group)
                if len(groups) !=1:
                    errors['student_group'] = "Оберіть коректну групу"
                else:
                    data['student_group'] = groups[0]

            photo = request.FILES.get('photo')
            if photo:
                data['photo'] = photo

            # save student
            if not errors:
                student = Student(**data)  # як варіант через перевірку словника errors

                # create Student Object  - вважаєм що всі дані внесенно і вони правильні!
                # student = Student(
                #     first_name = request.POST['first_name'],
                #     last_name = request.POST['last_name'],
                #     middle_name = request.POST['middle_name'],
                #     birthday = request.POST['birthday'],
                #     ticket = request.POST['ticket'],
                #     student_group = Group.objects.get(pk = request.POST['student_group']),
                #     photo = request.FILES['photo'],
                # )

                # save it to database
                student.save()

                # redirect user to student list
                return HttpResponseRedirect('%s?status_message=Студента успішно додано!' % reverse('home'))
            else:
                # render form with errors and previous user input
                return render(request, 'students/students_add.html',
                              {'groups': Group.objects.all().order_by('title'),
                               'errors': errors})
        elif request.POST.get('cancel_button') is not None:
            # redirect to home page on Cansel Button
            return HttpResponseRedirect('%s?status_message=Додавання студента скасовано!' % reverse('home'))
    else:
        # initial form render
        return render(request, 'students/students_add.html',
                     {'groups' : Group.objects.all().order_by('title')})