コード例 #1
0
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,
    })
コード例 #2
0
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)
コード例 #3
0
ファイル: main.py プロジェクト: t2kien/ructfe-2016
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()
コード例 #4
0
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,
            }))
コード例 #5
0
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,
            }))
コード例 #6
0
ファイル: files.py プロジェクト: t2kien/ructfe-2016
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)