async def login(request): form = LoginForm(request.form) if request.method == 'POST' else \ LoginForm() if request.method == 'POST' and form.validate(): service = get_user_service(USER_DB_NAME) username = form.username.data password = form.password.data try: user = await service.validate_credentials_and_get_user( username, password) response = redirect(request, REDIRECT_AFTER_LOGIN) await service.set_request_user(request, response, user) return response except service.UserServiceError as e: form.username.errors.append(str(e)) return html(bp.view.render('login', {'form': form}))
async def blog(request): form = BlogEntryForm(request.form) if request.method == 'POST' else \ BlogEntryForm() blog = get_entry_service(BLOG_ENTRY_DB_NAME) entries_count = await blog.get_entries_count() user_service = get_user_service(USER_DB_NAME) user = await user_service.get_request_user(request) if request.method == 'POST' and form.validate(): text = form.text.data title = form.title.data attachments = _clean_attachments(form.attachments.data) try: slug = blog.slugify(title) + '-' + str(time()).replace('.', '') await blog.create_entry(title, content=text, slug=slug, meta={ 'user': user.username, 'attachments': attachments, }) notify[entries_count + 1].set_result(True) for key, value in list(notify.items()): if key < entries_count: value.cancel() del notify[key] return redirect(request, '/') except Exception as e: form.text.errors.append(str(e)) pages = entries_count // 10 page = request.args.get('page', "0") page = int(page) if page.isdigit() else 0 offset = page * 10 if 0 < page <= pages else 0 next_page = page + 1 if page + 1 <= pages else None entries = await blog.get_entries(limit=10, offset=offset, order_by='-created') return html( bp.view.render( 'blog', { 'form': form, 'entries': entries, 'entries_count': entries_count, 'user': user, 'next_page': next_page, }))
async def registration(request): form = RegistrationForm(request.form) if request.method == 'POST' else \ RegistrationForm() if request.method == 'POST' and form.validate(): service = get_user_service(USER_DB_NAME) username = form.username.data password = form.password.data email = form.email.data try: user = await service.create_user(username, password, meta={ 'email': email, }) response = redirect(request, REDIRECT_AFTER_LOGIN) await service.set_request_user(request, response, user) return response except service.UserServiceError as e: form.username.errors.append(str(e)) return html(bp.view.render('registration', {'form': form}))
def recreatedb(loop=None): # loop if not loop: loop = async_loop.new_event_loop() asyncio.set_event_loop(loop) # init db service = get_user_service() service.dropdb() service.initdb() service = get_session_service() service.dropdb() service.initdb() service = get_entry_service(BLOG_ENTRY_DB_NAME) service.dropdb() service.initdb() service = get_entry_service(COMMENT_ENTRY_DB_NAME) service.dropdb() service.initdb() service = get_entry_service(FILES_ENTRY_DB_NAME) service.dropdb() service.initdb()
async def upload(request): files = get_entry_service(FILES_ENTRY_DB_NAME) errors = [] if request.method == 'POST': user = get_user_service(USER_DB_NAME) data = request.body or b'' name = request.headers.get('X-File-Name') if name: try: url = _save_file_on_localhost_filesystem(name, data) entry = await files.create_entry( name, content=url, slug=url, meta={ 'user': (await user.get_request_user(request)).username }) return json({'status': 'ok', 'url': url, 'entry': entry.slug}) except Exception as e: errors.append(str(e)) else: errors.append('No filename header!') return json({'status': 'error', 'errors': errors}, status=400)
async def comment(request, name): blog = get_entry_service(BLOG_ENTRY_DB_NAME) comments = get_entry_service(COMMENT_ENTRY_DB_NAME) user_service = get_user_service(USER_DB_NAME) user = await user_service.get_request_user(request) try: entry = await blog.get_entries(limit=1, slug=name) entry = entry[0] except IndexError: return redirect(request, '/') comment_entries = await comments.get_entries(limit=100, slug__startswith=name) form = BlogCommentForm(request.form) if request.method == 'POST' else \ BlogCommentForm() if request.method == 'POST' and form.validate(): text = form.text.data attachments = _clean_attachments(form.attachments.data) try: slug = name + '-' + str(time()).replace('.', '') await comments.create_entry("", content=text, slug=slug, meta={ 'user': user.username, 'attachments': attachments, }) return redirect(request, '/' + name) except Exception as e: form.text.errors.append(str(e)) return html( bp.view.render( 'entry', { 'form': form, 'entry': entry, 'comments': comment_entries, 'user': user, }))
async def logout(request): response = redirect(request, REDIRECT_AFTER_LOGOUT) service = get_user_service(USER_DB_NAME) await service.set_request_user(request, response, user=None) return response