def delete(self, id):
     content = session.query(Address).filter(Address.id == id).first()
     if not content:
         abort(404, message="Content {} doesn't exist".format(id))
     session.delete(content)
     session.commit()
     return {}, 204
示例#2
0
def subject_create():
    teachers = Teacher.query.all()
    teacher_list = dict()
    if teachers:
        teacher_list = [{
            'id': teacher.id,
            'fio': teacher.name
        } for teacher in teachers]

    if request.method == 'POST':
        data = parser.parse(subects_create_post, request)
        subject = Subject()

        if data:
            for item in data.items():
                if item[0] == 'name':
                    subject.name = item[1]
                if item[0] == 'desc':
                    subject.desc = item[1]
                if item[0] == 'teacher_id':
                    teacher = Teacher.query.get(item[1])
                    if not teacher:
                        return redirect(url_for('bp_web.subjects'))
                    subject.teacher = teacher

            session.add(subject)
            session.commit()
            return redirect(url_for('bp_web.subjects'))
    return render_template('subjects_edit.html', teacher_list=teacher_list)
示例#3
0
def course_theme_edit(course_theme_id):
    course_theme = CourseTheme.query.get(course_theme_id)
    if not course_theme:
        return redirect(url_for('bp_web.course_themes'))

    if request.method == 'POST':
        data = parser.parse(course_theme_create_post, request)

        if data:
            for item in data.items():
                if item[0] == 'name':
                    course_theme.name = item[1]

            session.commit()
            return redirect(url_for('bp_web.course_themes'))

    course_theme_data = {
        'id': course_theme.id,
        'name': course_theme.name,
        'course_numbers_list': dict()
    }
    if course_theme.course_number:
        course_theme_data['course_numbers_list'] = [{
            'id':
            course_number.id,
            'number':
            course_number.number
        } for course_number in course_theme.course_number]

    return render_template('course_themes_edit.html',
                           course_theme_data=course_theme_data)
示例#4
0
def course_number_delete(course_theme_id, course_number_id):
    course_theme = CourseTheme.query.get(course_theme_id)
    if not course_theme:
        return redirect(
            url_for('bp_web.course_theme_edit',
                    course_theme_id=course_theme_id))

    course_number = course_theme.course_number_lazy.filter_by(
        id=course_number_id).first()
    if not course_number:
        return redirect(
            url_for('bp_web.course_theme_edit',
                    course_theme_id=course_theme_id))

    if course_number.course_group.__len__(
    ) > 0 or course_number.subjects.count() > 0:
        flash(
            'Вы не можете удалить этот номер курса, пока у него есть используемые группы или курс привязан к предметам!'
        )
        return redirect(
            url_for('bp_web.course_theme_edit',
                    course_theme_id=course_theme_id))

    session.delete(course_theme)
    session.commit()

    return redirect(url_for('bp_web.course_themes'))
 def delete(self, id):
     address = session.query(Address).filter(Address.id == id).first()
     if not address:
         abort(404, message="Address {} doesn't exist".format(id))
     session.delete(address)
     session.commit()
     return {}, 204
示例#6
0
def course_group_create(course_theme_id, course_number_id):
    course_theme = CourseTheme.query.get(course_theme_id)
    if not course_theme:
        return redirect(
            url_for('bp_web.course_theme_edit',
                    course_theme_id=course_theme_id))

    course_number = course_theme.course_number_lazy.filter_by(
        id=course_number_id).first()
    if not course_number:
        return redirect(
            url_for('bp_web.course_theme_edit',
                    course_theme_id=course_theme_id))

    course_group = CourseGroup()
    data = parser.parse(course_group_create_post, request)

    if data:
        for item in data.items():
            if item[0] == 'gid':
                course_group.gid = int(item[1])

        course_group.course_number = course_number
        session.add(course_group)
        session.commit()

    return redirect(
        url_for('bp_web.course_number_edit',
                course_theme_id=course_theme_id,
                course_number_id=course_number_id))
 def delete(self, id):
     box = session.query(Box).filter(Box.id == id).first()
     if not box:
         abort(404, message="Box {} doesn't exist".format(id))
     session.delete(box)
     session.commit()
     return {}, 204
示例#8
0
def pytest_sessionstart():
    mock_users = 150  # Fixing the DB to 150 mock users
    users = UserFactory.build_batch(mock_users)
    for user in users:
        session.add(user)

    session.commit()
    print("Test DB initialized")
    def put(self, id):
        box = session.query(Box).filter(Box.id == id).first()
        if not box:
            abort(404, message="Box {} doesn't exist".format(id))
        parsed_args = parser.parse_args()
        BOX_ARGS = valid_request_arguments['Box']
        for box_arg in BOX_ARGS:
            if box_arg in parsed_args and parsed_args[box_arg]:
                setattr(box, box_arg, parsed_args[box_arg])

        session.commit()
        return box, 201
示例#10
0
    def put(self, id):
        content = session.query(Content).filter(Content.id == id).first()
        if not content:
            abort(404, message="Address {} doesn't exist".format(id))
        CONTENT_ARGS = valid_request_arguments['Content']
        parsed_args = parser.parse_args()
        for addr_arg in CONTENT_ARGS:
            if addr_arg in parsed_args and parsed_args[addr_arg]:
                setattr(content, addr_arg, parsed_args[addr_arg])

        session.commit()
        return content, 201
示例#11
0
    def put(self, id):
        address = session.query(Address).filter(Address.id == id).first()
        if not address:
            abort(404, message="Address {} doesn't exist".format(id))
        ADDRESS_ARGS = valid_request_arguments['Address']
        parsed_args = parser.parse_args()
        for addr_arg in ADDRESS_ARGS:
            if addr_arg in parsed_args and parsed_args[addr_arg]:
                setattr(address, addr_arg, parsed_args[addr_arg])

        session.commit()
        return address, 201
示例#12
0
def teacher_delete(teacher_id):
    teacher = Teacher.query.get(teacher_id)
    if not teacher:
        return redirect(url_for('bp_web.teachers'))
    if teacher.subjects.__len__() > 0:
        flash('Вы не можете удалить преподавателя, пока он закреплен за предметами!')
        return redirect(url_for('bp_web.teacher_edit', teacher_id=teacher_id))

    session.delete(teacher)
    session.commit()

    return redirect(url_for('bp_web.teachers'))
示例#13
0
def subject_delete(subject_id):
    subject = Subject.query.get(subject_id)
    if not subject:
        return redirect(url_for('bp_web.subjects'))
    if subject.lessons.__len__() > 0 or subject.course_subscribed.count() > 0:
        flash(
            'Вы не можете удалить предмет, пока на него подписаны курсы или он присутствует в расписании!'
        )
        return redirect(url_for('bp_web.subject_edit', subject_id=subject_id))

    session.delete(subject)
    session.commit()

    return redirect(url_for('bp_web.subjects'))
示例#14
0
def course_theme_create():
    if request.method == 'POST':
        data = parser.parse(course_theme_create_post, request)
        course_theme = CourseTheme()

        if data:
            for item in data.items():
                if item[0] == 'name':
                    course_theme.name = item[1]

            session.add(course_theme)
            session.commit()
            return redirect(url_for('bp_web.course_themes'))

    return render_template('course_themes_edit.html')
示例#15
0
def subscribe(cg_id, tid):
    user = User.query.filter_by(tid=tid).first()
    cg = CourseGroup.query.get(cg_id)
    if user and cg:
        user.course_group = cg
        session.commit()

    markup = telebot.types.ReplyKeyboardMarkup(True, False)
    markup.row(telebot.types.KeyboardButton('\U0001F4DA Мои предметы'))
    markup.row(telebot.types.KeyboardButton('\U0001F558 Расписание'))
    markup.row(telebot.types.KeyboardButton('\u26F3 Переподписаться'))

    tbot.send_message(chat_id=tid,
                      text='\u2705 Вы успешно подписались на группу ' +
                      str(cg.gid) + '!',
                      reply_markup=markup)
示例#16
0
def teacher_create():
    if request.method == 'POST':
        data = parser.parse(teacher_create_post, request)
        teacher = Teacher()

        if data:
            for item in data.items():
                if item[0] == 'name':
                    teacher.name = item[1]
                if item[0] == 'email':
                    teacher.email = item[1]

            session.add(teacher)
            session.commit()
            return redirect(url_for('bp_web.teachers'))
    return render_template('teachers_edit.html')
示例#17
0
def course_theme_delete(course_theme_id):
    course_theme = CourseTheme.query.get(course_theme_id)
    if not course_theme:
        return redirect(url_for('bp_web.course_themes'))

    if course_theme.course_number.__len__() > 0:
        flash(
            'Вы не можете удалить это направление подготовки пока у него есть активные курсы подготовки!'
        )
        return redirect(
            url_for('bp_web.course_theme_edit',
                    course_theme_id=course_theme_id))

    session.delete(course_theme)
    session.commit()

    return redirect(url_for('bp_web.course_themes'))
示例#18
0
def course_number_create(course_theme_id):
    course_theme = CourseTheme.query.get(course_theme_id)
    if not course_theme:
        return redirect(
            url_for('bp_web.course_theme_edit',
                    course_theme_id=course_theme_id))

    reserved_courses = list()
    if course_theme.course_number:
        for course_number in course_theme.course_number:
            reserved_courses.append(course_number.number)

    subjects = Subject.query.all()
    subjects_list = dict()
    if subjects:
        subjects_list = [{
            'id': subject.id,
            'name': subject.name
        } for subject in subjects]

    if request.method == 'POST':
        data = parser.parse(course_number_create_post, request)
        course_number = CourseNumber()

        if data:
            for item in data.items():
                if item[0] == 'number':
                    course_number.number = int(item[1])
                if item[0] == 'subjects[]':
                    for subj in item[1]:
                        course_number_subject = Subject.query.get(subj)
                        if course_number_subject:
                            course_number.subjects.append(
                                course_number_subject)
            course_number.course_theme = course_theme
            session.add(course_number)
            session.commit()

            return redirect(
                url_for('bp_web.course_theme_edit',
                        course_theme_id=course_theme_id))

    return render_template('course_numbers_edit.html',
                           reserved_courses=reserved_courses,
                           subjects_list=subjects_list)
示例#19
0
def send_welcome(message):
    user = User.query.filter_by(tid=message.from_user.id).first()
    if not user:
        user = User(tid=message.from_user.id, is_admin=False)
        session.add(user)
        session.commit()

    course_themes = CourseTheme.query.all()
    markup = telebot.types.InlineKeyboardMarkup(row_width=6)
    for ct in course_themes:
        markup.row(
            telebot.types.InlineKeyboardButton(text=ct.name,
                                               callback_data=':'.join(
                                                   ['get_cn',
                                                    str(ct.id)])))
    tbot.send_message(chat_id=message.from_user.id,
                      text='\U0001F680 Выберите Ваше направление подготовки',
                      reply_markup=markup)
示例#20
0
def class_schedule_edit():
    data = request.form.to_dict()
    if data:
        if data.get('course_group_id'):
            course_group_id = data.pop('course_group_id')
            course_group = CourseGroup.query.get(course_group_id)
            if course_group:
                parsed_data = dict()
                for key, value in data.items():
                    if value:
                        keys = key.split('_')

                        if not keys[0] + keys[1] in parsed_data.keys():
                            parsed_data[keys[0] + keys[1]] = dict()

                        parsed_data[keys[0] + keys[1]]['dow'] = keys[0]
                        parsed_data[keys[0] + keys[1]]['seq'] = keys[1]
                        parsed_data[keys[0] + keys[1]][keys[2]] = value

                class_schedules = course_group.class_schedule.all()
                if class_schedules:
                    for class_schedule in class_schedules:
                        session.delete(class_schedule)

                for row in parsed_data.values():
                    if row['subj']:
                        subj = Subject.query.get(row['subj'])
                        if subj:
                            class_lesson = ClassSchedule()
                            class_lesson.subject = subj
                            class_lesson.course_group = course_group

                            for item in row.items():
                                if item[0] == 'class':
                                    class_lesson.classroom = item[1]
                                if item[0] == 'seq':
                                    class_lesson.seq = int(item[1])
                                if item[0] == 'dow':
                                    class_lesson.dow = item[1]
                            session.add(class_lesson)

                session.commit()

                return redirect(url_for('bp_web.class_schedule'))
示例#21
0
def get_schedule_file(msg):
    person = session.query(Person).filter(
        func.lower(Person.fullname) == func.lower(msg.text)).first()

    if not person:
        return tb.send_message(
            msg.chat.id,
            f"Такого ПІБ немає у базі, зв'яжіться з [адміністратором](https://t.me/Regis322)",
            parse_mode='Markdown')

    if person.telegram_id:
        return tb.send_message(
            msg.chat.id,
            "Людина за цим ПІБ вже зареэстрована, зв'яжіться з [адміністратором](https://t.me/Regis322)",
            parse_mode='Markdown')

    person.telegram_id = msg.chat.id
    session.add(person)
    session.commit()

    tb.send_message(msg.chat.id,
                    "Ваш ПІБ знайдено у базі, ваш телеграм під'єднано")
示例#22
0
def get_person_fullname(msg):
    person = session.query(Person).filter(
        Person.telegram_id == msg.chat.id).first()

    if not msg.text.isdigit():
        return tb.send_message(
            msg.chat.id,
            "Введіть порядковий номер місця практики зі списку доступних місць"
        )

    place = session.query(PlaceOfPractice).filter(
        PlaceOfPractice.id == int(msg.text)).first()

    if not place:
        return tb.send_message(
            msg.chat.id, "Не знайдено жодного місця практики за цим номером")

    person.student.place_of_practice = place
    session.commit()

    tb.send_message(msg.chat.id,
                    f"Ви успішно вибрали _{place.name}_ місцем практики",
                    parse_mode='Markdown')
示例#23
0
def teacher_edit(teacher_id):
    teacher = Teacher.query.get(teacher_id)
    if not teacher:
        return redirect(url_for('bp_web.teachers'))

    if request.method == 'POST':
        data = parser.parse(teacher_create_post, request)

        if data:
            for item in data.items():
                if item[0] == 'name':
                    teacher.name = item[1]
                if item[0] == 'email':
                    teacher.email = item[1]

            session.commit()
            return redirect(url_for('bp_web.teachers'))

    teacher = {
        'id': teacher_id,
        'fio': teacher.name,
        'email': teacher.email
    }
    return render_template('teachers_edit.html', teacher=teacher)
示例#24
0
def course_group_delete(course_theme_id, course_number_id, course_group_id):
    course_group = CourseGroup.query.get(course_group_id)
    if not course_group:
        return redirect(
            url_for('bp_web.course_number_edit',
                    course_theme_id=course_theme_id,
                    course_number_id=course_number_id))

    if course_group.class_schedule.count() > 0:
        flash(
            'Вы не можете удалить эту группу пока у она числиться в расписании!'
        )
        return redirect(
            url_for('bp_web.course_number_edit',
                    course_theme_id=course_theme_id,
                    course_number_id=course_number_id))

    session.delete(course_group)
    session.commit()

    return redirect(
        url_for('bp_web.course_number_edit',
                course_theme_id=course_theme_id,
                course_number_id=course_number_id))
示例#25
0
def get_schedule_file(msg):
    person = session.query(Person).filter(Person.telegram_id == msg.chat.id).first()

    # FILE SIZE CHECK
    if msg.document.file_size > 500000:
        return tb.send_message(msg.chat.id, "Файл великого розміру (0.5mb max)")

    # DOWNLOADING THE FILE
    tg_cloud_file = tb.get_file(msg.document.file_id)
    binary_data = tb.download_file(tg_cloud_file.file_path)

    # CREATING TEMPORARY FILE WRAPPER
    schedule_file = TemporaryFile()
    schedule_file.write(binary_data)

    # DELETING CURRENT SCHEDULE FROM DB
    if person.head.faculty.schedule:
        session.delete(person.head.faculty.schedule)
        session.commit()

    # PARSING TABLE WITH DAYS OF PRACTICE
    schedule = Schedule(faculty=person.head.faculty)
    try:
        schedule_sheet = openpyxl.load_workbook(schedule_file).active
        for row_idx in range(2, schedule_sheet.max_row + 1):
            schedule.schedule_meetings.append(
                ScheduleMeeting(
                    schedule=schedule,
                    meeting=Meeting(
                        date=schedule_sheet.cell(row_idx, 1).value.strftime("%Y-%m-%d"),
                        start_time=schedule_sheet.cell(row_idx, 2).value.strftime("%H:%M"),
                        end_time=schedule_sheet.cell(row_idx, 3).value.strftime("%H:%M"),
                        place=schedule_sheet.cell(row_idx, 4).value,
                    )
                )
            )
    except (ValueError, TypeError):
        tb.reply_to(msg, "Помилка у парсингу файла")
        schedule_file.close()
        return

    # INSERTING NEW SCHEDULE TO DB
    person.head.faculty.schedule = schedule
    session.commit()

    # NOTIFYING FOR SUCCESS AND CLEANING UP
    tb.reply_to(msg, "Успішно завантажено новий розклад!")
    schedule_file.close()

    # INFORMING THE STUDENTS WITH NEW SCHEDULE BY SENDING THE FILE
    not_informed_students = []
    informed_students = []
    for group in person.head.faculty.groups:
        for student in group.students:
            if not student.person.telegram_id:
                not_informed_students.append(student)
                continue

            tb.send_document(
                student.person.telegram_id,
                msg.document.file_id,
                caption="Шановний студент! Розклад консультацій змінено, лови актуальний"
            )
            informed_students.append(student)

    # NOTIFYING ABOUT THE RESULTS ABOUT STUDENTS INFORMATION
    tb.send_message(
        msg.chat.id,
        f"Інформованих студентів: {len(informed_students)}\n"
        "Не отримали повідомленя: \n"
        f"{os.linesep.join((f'{i + 1}. {student.person.fullname}' for (i, student) in enumerate(not_informed_students)))}",
        parse_mode='Markdown'
    )
示例#26
0
 def delete(self):
     try:
         session.delete(self)
         session.commit()
     except Exception as e:
         session.rollback();
示例#27
0
 def save(self):
     try:
         session.add(self)
         session.commit()
     except Exception as e:
         session.rollback();
示例#28
0
 def post(self):
     parsed_args = parser.parse_args()
     content = Address(**parsed_args)
     session.add(content)
     session.commit()
     return content, 201
def init_database():

    engine = create_engine(DB_URI)
    Base.metadata.drop_all(engine)
    Base.metadata.create_all(engine)

    # create 10 initial boxes
    for x in range(0, 10):

        # create some shoes as demo content
        box_content_1 = Content(name='Nike Air Zoom Pegasus 35',
                                style='Sneaker',
                                color='white',
                                size='US 9',
                                price='85.00 $',
                                condition='new')
        box_content_2 = Content(name='Nike Air Max 270',
                                style='Sneaker',
                                color='black',
                                size='US 9',
                                price='85.00 $',
                                condition='new')
        box_contents = [box_content_1, box_content_2]

        # create 10 current addresses with a rising value at the end
        new_current_address = Address(
            name='Buffer Location 221' + str(x),
            str_name='Haven Avenue',
            str_no='3645',
            city='Menlo Park',
            post_code='94025',
            state='California',
            country='United States of America',
        )

        session.add(new_current_address)

        # create 10 destination addresses with a rising value at the end
        new_destination_address = Address(
            name='Paul Happy',
            str_name='Target road',
            str_no='42' + str(x),
            city='Happyplace',
            post_code='94025',
            state='California',
            country='Germany',
        )
        session.add(new_destination_address)

        # create 10 boxes with a current address, a destination address and a content
        new_box = Box(id=10100 + x,
                      name='new box ' + str(x),
                      addr_c=new_current_address,
                      addr_d=new_destination_address,
                      box_contents=box_contents,
                      status='Delivery in Progress',
                      customerStatus='Delivered',
                      weight='2kg',
                      size='M')
        session.add(new_box)
        session.commit()
示例#30
0
def course_number_edit(course_theme_id, course_number_id):
    course_theme = CourseTheme.query.get(course_theme_id)
    if not course_theme:
        return redirect(
            url_for('bp_web.course_theme_edit',
                    course_theme_id=course_theme_id))

    course_number = course_theme.course_number_lazy.filter_by(
        id=course_number_id).first()
    if not course_number:
        return redirect(
            url_for('bp_web.course_theme_edit',
                    course_theme_id=course_theme_id))

    course_number_data = {
        'id': course_number.id,
        'course_theme_id': course_theme.id,
        'number': course_number.number,
        'reserved_subjects': list(),
        'reserved_groups': dict()
    }

    if course_number.subjects:
        reserved_subjects = course_number.subjects.all()
        if reserved_subjects:
            for reserved_subject in reserved_subjects:
                course_number_data['reserved_subjects'].append(
                    reserved_subject.id)

    if course_number.course_group:
        course_number_data['reserved_groups'] = [{
            'id': reserved_group.id,
            'gid': reserved_group.gid
        } for reserved_group in course_number.course_group]

    reserved_courses = list()
    if course_theme.course_number:
        for course_number in course_theme.course_number:
            reserved_courses.append(course_number.number)

    subjects = Subject.query.all()
    subjects_list = dict()
    if subjects:
        subjects_list = [{
            'id': subject.id,
            'name': subject.name
        } for subject in subjects]

    if request.method == 'POST':
        data = parser.parse(course_number_create_post, request)

        if data:
            for item in data.items():
                if item[0] == 'number':
                    course_number.number = int(item[1])
                if item[0] == 'subjects[]':
                    reserved_subjects = course_number.subjects.all()
                    if reserved_subjects:
                        for reserved_subject in reserved_subjects:
                            course_number.subjects.remove(reserved_subject)
                    for subj in item[1]:
                        course_number_subject = Subject.query.get(subj)
                        if course_number_subject:
                            course_number.subjects.append(
                                course_number_subject)

            session.commit()

            return redirect(
                url_for('bp_web.course_theme_edit',
                        course_theme_id=course_theme_id))

    return render_template('course_numbers_edit.html',
                           course_number_data=course_number_data,
                           reserved_courses=reserved_courses,
                           subjects_list=subjects_list)