async def blog_count(request): blog = get_entry_service(BLOG_ENTRY_DB_NAME) entries_count = await blog.get_entries_count() pages = entries_count // 10 return json({ 'first': '/?page=0', 'last': '/?page=' + str(pages), 'pages': pages + 1, 'entries_count': entries_count, 'per_page': 10, })
async def blog_signal(request): blog = get_entry_service(BLOG_ENTRY_DB_NAME) entries_count = await blog.get_entries_count() count = request.args.get('count', "no") count = int(count) if count.isdigit() else entries_count + 1 if count <= entries_count: return await blog_count(request) elif entries_count + 10 < count: return json({'error': 'you try to see so far into the future!'}, status=400) await notify[count] return await blog_count(request)
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 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 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 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)