示例#1
0
def editTask(id):
    form = JobsForm()
    if request.method == 'GET':
        session = dbSession.createSession()
        job = session.query(Jobs).filter(Jobs.id == id,
                                         (Jobs.user == current_user) |
                                         (current_user.id == 1)).first()
        if job:
            form.teamLeader.data = job.teamLeader
            form.job.data = job.job
            form.workSize.data = job.workSize
            form.collaborators.data = job.collaborators
            form.startDate.data = job.startDate
            form.endDate.data = job.endDate
            form.isFinished.data = job.isFinished
        else:
            abort(404)
    if form.validate_on_submit():
        session = dbSession.createSession()
        job = session.query(Jobs).filter(Jobs.id == id,
                                         (Jobs.user == current_user) |
                                         (current_user.id == 1)).first()
        if job:
            job.teamLeader = form.teamLeader.data
            job.job = form.job.data
            job.workSize = form.workSize.data
            job.collaborators = form.collaborators.data
            job.startDate = form.startDate.data
            job.endDate = form.endDate.data
            job.isFinished = form.isFinished.data
            session.commit()
            return redirect('/')
        else:
            abort(404)
    return render_template('task.html', title='Task Edition', form=form)
示例#2
0
def editDepartment(id):
    form = DepartmentForm()
    if request.method == 'GET':
        session = dbSession.createSession()
        department = session.query(Department).filter(
            Department.id == id, (Department.user == current_user)
            | (current_user.id == 1)).first()
        if department:
            form.title.data = department.title
            form.chief.data = department.chief
            form.members.data = department.members
            form.email.data = department.email
        else:
            abort(404)
    if form.validate_on_submit():
        session = dbSession.createSession()
        department = session.query(Department).filter(
            Department.id == id, (Department.user == current_user)
            | (current_user.id == 1)).first()
        if department:
            department.title = form.title.data
            department.chief = form.chief.data
            department.members = form.members.data
            department.email = form.email.data
            session.commit()
            return redirect('/departments')
    return render_template('department.html',
                           title='Department edition',
                           form=form)
示例#3
0
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        if form.password.data != form.passwordRepeat.data:
            return render_template('register.html',
                                   title='Register',
                                   form=form,
                                   message='Different passwords')
        session = dbSession.createSession()
        if session.query(User).filter(User.email == form.email.data).first():
            return render_template('register.html',
                                   title='Register',
                                   form=form,
                                   message='User already exists')
        user = User(email=form.email.data,
                    surname=form.surname.data,
                    name=form.name.data,
                    age=form.age.data,
                    position=form.position.data,
                    speciality=form.speciality.data,
                    address=form.address.data)
        user.setPassword(form.password.data)
        session.add(user)
        session.commit()
        return redirect('/')
    return render_template('register.html', title='Register', form=form)
示例#4
0
 def get(self):
     args = parser.parse_args()
     session = dbSession.createSession()
     device = session.query(Device).get(args['id'])
     if not device:
         abort(404, message='Wrong id')
     return jsonify({'state': device.state})
示例#5
0
 def delete(self, id):
     abortUser(id)
     session = dbSession.createSession()
     user = session.query(User).get(id)
     session.delete(user)
     session.commit()
     return jsonify({'success': 'OK'})
示例#6
0
def localStats():
    ''' Страница локальной статистики для зарегестрированный пользователей '''
    session = dbSession.createSession()
    user = session.query(User).get(current_user.id)
    tablelist = []
    for association in user.mistakes:
        mistake = session.query(Mistake).get(association.mistake)
        language = session.query(Language).get(mistake.language)
        tablelist.append({'name': mistake.name,
                          'count': association.count,
                          'lang': language.acronym})
    # Круговая диаграмма частоты ошибок в словах
    popularityChart = PieChart('local_popularity', options={'title': 'Mistakes popularity',
                                                            'height': 400})
    popularityChart.add_column('string', 'Word')
    popularityChart.add_column('number', 'Count')
    popularityChart.add_rows([[item['name'], item['count']] for item in tablelist])
    charts.register(popularityChart)
    # Круговая диаграмма количества ошибок в зависимости от языка
    languageChart = PieChart('local_language', options={'title': 'Mistakes by language',
                                                        'height': 400})
    langs = defaultdict(int)
    for item in tablelist:
        langs[item['lang']] += item['count']
    languageChart.add_column('string', 'Language')
    languageChart.add_column('number', 'Count')
    languageChart.add_rows([[item[0], item[1]] for item in langs.items()])
    charts.register(languageChart)
    return render_template('local_stats.html', title='Local stats', mistakes=tablelist)
 def delete(self, id):
     abortJob(id)
     session = dbSession.createSession()
     job = session.query(Jobs).get(id)
     session.delete(job)
     session.commit()
     return jsonify({'success': 'OK'})
示例#8
0
def departmentsPage():
    session = dbSession.createSession()
    users = session.query(User).all()
    departments = session.query(Department).all()
    return render_template('departments.html',
                           users=users,
                           departments=departments)
示例#9
0
 def get(self):
     args = parser.parse_args()
     session = dbSession.createSession()
     tablelist = []
     if args['token']:
         user = session.query(User).filter(
             User.token == args['token']).first()
         if not user:
             abort(404, message='Wrong token')
         for association in user.mistakes:
             mistake = session.query(Mistake).get(association.mistake)
             lang = session.query(Language).get(mistake.language)
             tablelist.append({
                 'name': mistake.name,
                 'count': association.count,
                 'lang': lang.acronym
             })
     else:
         for mistake in session.query(Mistake).all():
             lang = session.query(Language).get(mistake.language)
             tablelist.append({
                 'name': mistake.name,
                 'count': mistake.count,
                 'lang': lang.acronym
             })
     return jsonify({'mistakes': tablelist})
示例#10
0
 def get(self, id):
     abortUser(id)
     session = dbSession.createSession()
     user = session.query(User).get(id)
     return jsonify({
         'users':
         user.to_dict(only=('surname', 'name', 'age', 'position',
                            'speciality', 'address', 'email'))
     })
示例#11
0
 def put(self):
     args = parser.parse_args()
     session = dbSession.createSession()
     device = session.query(Device).get(args['id'])
     if not device:
         abort(404, message='Wrong id')
     device.state = False
     session.commit()
     return 200
示例#12
0
 def get(self):
     session = dbSession.createSession()
     users = session.query(User).all()
     return jsonify({
         'users': [
             item.to_dict(only=('surname', 'name', 'age', 'position',
                                'speciality', 'address', 'email'))
             for item in users
         ]
     })
示例#13
0
def removeTask(id):
    session = dbSession.createSession()
    job = session.query(Jobs).filter(Jobs.id == id, (Jobs.user == current_user)
                                     | (current_user.id == 1)).first()
    if job:
        session.delete(job)
        session.commit()
    else:
        abort(404)
    return redirect('/')
示例#14
0
def login():
    ''' Страница входа пользователя '''
    form = LoginForm()
    if form.validate_on_submit():
        session = dbSession.createSession()
        user = session.query(User).filter(User.email == form.email.data).first()
        if user and user.checkPassword(form.password.data):
            login_user(user, remember=form.remember.data)
            return redirect('/')
        return render_template('login.html', form=form, title='Login', message='Wrong email or password')
    return render_template('login.html', form=form, title='Login')
 def post(self):
     args = parser.parse_args()
     session = dbSession.createSession()
     job = Jobs(teamLeader=args['teamLeader'],
                job=args['job'],
                workSize=args['workSize'],
                collaborators=args['collaborators'],
                isFinished=args['isFinished'])
     session.add(job)
     session.commit()
     return jsonify({'success': 'OK'})
示例#16
0
def removeDepartment(id):
    session = dbSession.createSession()
    department = session.query(Department).filter(
        Department.id == id, (Department.user == current_user)
        | (current_user.id == 1)).first()
    if department:
        session.delete(department)
        session.commit()
    else:
        abort(404)
    return redirect('/departments')
示例#17
0
 def post(self):
     args = parser.parse_args()
     session = dbSession.createSession()
     user = User(surname=args['surname'],
                 name=args['name'],
                 age=args['age'],
                 position=args['position'],
                 speciality=args['speciality'],
                 address=args['address'],
                 email=args['email'])
     session.add(user)
     session.commit()
     return jsonify({'success': 'OK'})
示例#18
0
def login():
    form = LoginForm()
    if form.validate_on_submit():
        session = dbSession.createSession()
        user = session.query(User).filter(
            User.email == form.email.data).first()
        if user and user.checkPassword(form.password.data):
            login_user(user, remember=form.remember.data)
            return redirect('/')
        return render_template('login.html',
                               title='Вход',
                               form=form,
                               message='Неверный логин или пароль')
    return render_template('login.html', title='Вход', form=form)
示例#19
0
def addDepartment():
    form = DepartmentForm()
    if form.validate_on_submit():
        session = dbSession.createSession()
        department = Department(title=form.title.data,
                                chief=form.chief.data,
                                members=form.members.data,
                                email=form.email.data)
        current_user.departments.append(department)
        session.merge(current_user)
        session.commit()
        return redirect('/departments')
    return render_template('department.html',
                           title='Department addition',
                           form=form)
示例#20
0
def addTask():
    form = JobsForm()
    if form.validate_on_submit():
        session = dbSession.createSession()
        job = Jobs(teamLeader=form.teamLeader.data,
                   job=form.job.data,
                   workSize=form.workSize.data,
                   collaborators=form.collaborators.data,
                   startDate=form.startDate.data,
                   endDate=form.endDate.data,
                   isFinished=form.isFinished.data)
        current_user.jobs.append(job)
        session.merge(current_user)
        session.commit()
        return redirect('/')
    return render_template('task.html', title='Task addition', form=form)
示例#21
0
def result():
    ''' Страница отображения результатов проверки текста '''
    data = json.loads(request.args['data'])  # Данные, переданные корректором
    mistakes = data['mistakes']
    text = data['text']
    corrected = copy.copy(text)
    delta = 0
    tablelist = []
    for m in mistakes:
        correct = m['s'][0]  # Исправленное слово
        wrong = text[m['pos']:m['pos'] + m['len']]  # Ошибочное слово
        normal = morph.parse(correct)[0].normal_form  # Исправленное слово в начальной форме
        # Язык слова. Определяется API Яндекс.Переводчика
        langAcronym = translator.getLanguage(correct)
        corrected = corrected[:m['pos'] + delta] + correct + \
            corrected[m['pos'] + m['len'] + delta:]  # Исправление начального текста
        # Эта переменная хранит в себе изменение длины текста для правильного корректирования
        delta += len(correct) - len(wrong)
        session = dbSession.createSession()
        language = session.query(Language).filter(Language.acronym == langAcronym).first()
        if not language:
            # Если язык незнакомый, добавим его в БД
            language = Language(acronym=langAcronym)
            session.add(language)
        mistake = session.query(Mistake).filter(Mistake.name == normal).first()
        if not mistake:
            # Если ошибка незнакомая, добавим ее в БД
            mistake = Mistake(name=normal, count=0, language=language.id)
            session.add(mistake)
        mistake.count += 1
        if current_user.is_authenticated:
            # Если пользователь аутентифицирован, то запишем эту ошибку в ассоциативную БД
            association = session.query(Association).filter(
                Association.mistake == mistake.id, Association.user == current_user.id).first()
            if not association:
                association = Association(mistake=mistake.id, count=0)
                user = session.query(User).get(current_user.id)
                user.mistakes.append(association)
            association.count += 1
        session.commit()
        tablelist.append({'wrong': wrong.lower(),
                          'correct': correct.lower(),
                          'pos': m['pos'],
                          'lang': langAcronym})
    return render_template('result.html', title='Result', text=corrected, tablelist=tablelist)
示例#22
0
def register():
    ''' Страница регистрации пользователя'''
    form = RegisterForm()
    if form.validate_on_submit():
        if form.password.data != form.passwordRepeat.data:
            return render_template('register.html', title='Register', form=form, message='Different passwords')
        session = dbSession.createSession()
        if session.query(User).filter(User.email == form.email.data).first():
            return render_template('register.html', title='Register', form=form, message='User already exists')
        user = User(email=form.email.data,
                    surname=form.surname.data,
                    name=form.name.data,
                    age=form.age.data,
                    token=token_urlsafe(16))
        user.setPassword(form.password.data)
        session.add(user)
        session.commit()
        return redirect('/')
    return render_template('register.html', title='Register', form=form)
示例#23
0
 def get(self):
     args = parser.parse_args()
     session = dbSession.createSession()
     tablelist = []
     if args['type'] == 'age':
         ages = defaultdict(int)
         for user in session.query(User).all():
             for mistake in user.mistakes:
                 ages[user.age] += mistake.count
         for item in ages.items():
             tablelist.append({item[0]: item[1]})
     elif args['type'] == 'lang':
         langs = defaultdict(int)
         for mistake in session.query(Mistake).all():
             language = session.query(Language).get(mistake.language)
             langs[language.acronym] += mistake.count
         for item in langs.items():
             tablelist.append({item[0]: item[1]})
     return jsonify({'statistics': tablelist})
示例#24
0
def globalStats():
    ''' Страница с глобальной статистикой использования сайта '''
    session = dbSession.createSession()
    mistakes = session.query(Mistake).all()
    tablelist = []
    for mistake in mistakes:
        language = session.query(Language).get(mistake.language)
        tablelist.append({'name': mistake.name,
                          'count': mistake.count,
                          'lang': language.acronym})
    # Круговая диаграмма частоты ошибок в словах
    popularityChart = PieChart('popularity', options={'title': 'Mistakes popularity',
                                                      'height': 400})
    popularityChart.add_column('string', 'Word')
    popularityChart.add_column('number', 'Count')
    popularityChart.add_rows([[item['name'], item['count']] for item in tablelist])
    charts.register(popularityChart)
    # Столбчатая диаграмма количества ошибок в зависимости от возраста в диапозоне 10 лет
    ageChart = ColumnChart('age', options={'title': 'Mistakes by age',
                                           'height': 400})
    ages = defaultdict(int)
    for user in session.query(User).all():
        for mistake in user.mistakes:
            ages[user.age // 10] += mistake.count
    ageChart.add_column('string', 'Age range')
    ageChart.add_column('number', 'Count')
    ageChart.add_rows([[f'{item[0] * 10} - {item[0] * 10 + 9}', item[1]]
                       for item in sorted(ages.items(), key=lambda x: x[0])])
    charts.register(ageChart)
    # Круговая диаграмма количества ошибок в зависимости от языка
    languageChart = PieChart('language', options={'title': 'Mistakes by language',
                                                  'height': 400})
    langs = defaultdict(int)
    for item in tablelist:
        langs[item['lang']] += item['count']
    languageChart.add_column('string', 'Language')
    languageChart.add_column('number', 'Count')
    languageChart.add_rows([[item[0], item[1]] for item in langs.items()])
    charts.register(languageChart)
    return render_template('global_stats.html', title='Stats', mistakes=tablelist)
示例#25
0
def rent():
    form = DeviceForm()
    if form.validate_on_submit():
        session = dbSession.createSession()
        user = session.query(User).get(current_user.id)
        if user.onRent:
            return render_template(
                'rent.html',
                title='Прокат',
                form=form,
                message='Вы не можете взять в аренду более одного зонта!')
        device = session.query(Device).get(form.number.data)
        if not device:
            return render_template(
                'rent.html',
                title='Прокат',
                form=form,
                message='Вы ввели неправильный номер устройства!')
        device.state = True
        user.onRent = True
        session.commit()
        return redirect('/')
    return render_template('rent.html', title='Прокат', form=form)
示例#26
0
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        if form.password.data != form.passwordRepeat.data:
            return render_template('register.html',
                                   title='Регистрация',
                                   form=form,
                                   message='Пароли не совпадают')
        session = dbSession.createSession()
        if session.query(User).filter(User.email == form.email.data).first():
            return render_template('register.html',
                                   title='Регистрация',
                                   form=form,
                                   message='Пользователь уже существует')
        user = User(email=form.email.data,
                    surname=form.surname.data,
                    name=form.name.data,
                    onRent=False)
        user.setPassword(form.password.data)
        session.add(user)
        session.commit()
        return redirect('/')
    return render_template('register.html', title='Регистрация', form=form)
示例#27
0
 def get(self):
     morph = pymorphy2.MorphAnalyzer()
     args = parser.parse_args()
     text = args['text']
     mistakes = speller.getMistakes(text)
     corrected = copy.copy(text)
     delta = 0
     tablelist = []
     for m in mistakes:
         correct = m['s'][0]
         wrong = text[m['pos']:m['pos'] + m['len']]
         normal = morph.parse(correct)[0].normal_form
         langAcronym = translator.getLanguage(correct)
         corrected = corrected[:m['pos'] + delta] + \
             correct + corrected[m['pos'] + m['len'] + delta:]
         delta += len(correct) - len(wrong)
         session = dbSession.createSession()
         language = session.query(Language).filter(
             Language.acronym == langAcronym).first()
         if not language:
             language = Language(acronym=langAcronym)
             session.add(language)
         mistake = session.query(Mistake).filter(
             Mistake.name == normal).first()
         if not mistake:
             mistake = Mistake(name=normal, count=0, language=language.id)
             session.add(mistake)
         mistake.count += 1
         session.commit()
         tablelist.append({
             'wrong': wrong.lower(),
             'correct': correct.lower(),
             'pos': m['pos'],
             'lang': langAcronym
         })
     return jsonify({'corrected_text': corrected, 'mistakes': tablelist})
示例#28
0
def loadUser(userId):
    session = dbSession.createSession()
    return session.query(User).get(userId)
示例#29
0
def mainPage():
    session = dbSession.createSession()
    users = session.query(User).all()
    jobs = session.query(Jobs).all()
    return render_template('jobs.html', users=users, jobs=jobs)
示例#30
0
 def post(self):
     session = dbSession.createSession()
     device = Device(state=False, count=0)
     session.add(device)
     session.commit()
     return 200