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)
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)
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)
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})
def delete(self, id): abortUser(id) session = dbSession.createSession() user = session.query(User).get(id) session.delete(user) session.commit() return jsonify({'success': 'OK'})
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'})
def departmentsPage(): session = dbSession.createSession() users = session.query(User).all() departments = session.query(Department).all() return render_template('departments.html', users=users, departments=departments)
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})
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')) })
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
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 ] })
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('/')
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'})
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')
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'})
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)
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)
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)
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)
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)
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})
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)
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)
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)
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})
def loadUser(userId): session = dbSession.createSession() return session.query(User).get(userId)
def mainPage(): session = dbSession.createSession() users = session.query(User).all() jobs = session.query(Jobs).all() return render_template('jobs.html', users=users, jobs=jobs)
def post(self): session = dbSession.createSession() device = Device(state=False, count=0) session.add(device) session.commit() return 200