Exemple #1
0
async def blog_index(request: HTTPConnection):
    latest = await Blog.query.order_by(sa.desc(Blog.creation_date)).limit(20).gino.all()

    rendered = [
        (w, shorten(plaintext_markdown(w.content), width=800, placeholder="..."))
        for w in latest
    ]

    grouped_blogs = await blogs_grouped()

    return templates.TemplateResponse(
        "blog/index.j2", {"request": request, "blog": rendered, "grouped_blogs": grouped_blogs}
    )
async def writeups_search(request: HTTPConnection):
    s_query = request.query_params.get("search", "")

    # sorry about this
    query = pg_search(sa.select([Writeup.join(User)]), s_query, sort=True)
    query = query.column(
        sa.func.ts_headline(
            search_manager.options["regconfig"],
            Writeup.content,
            sa.func.tsq_parse(search_manager.options["regconfig"], s_query),
            f"StartSel=**,StopSel=**,MaxWords=70,MinWords=30,MaxFragments=3",
        ).label("headline"))

    writeups = await query.as_scalar().gino.all()

    def build_writeup(r):
        """we get back a RowProxy so manually construct the writeup from it."""

        author = User(discord_id=r.discord_id,
                      username=r.username,
                      email=r.email)

        writeup = Writeup(
            id=r.id,
            author_id=r.author_id,
            title=r.title,
            slug=r.slug,
            tags=r.tags,
            content=r.content,
            creation_date=r.creation_date,
            edit_date=r.edit_date,
        )

        writeup.author = author
        return writeup

    writeups = [(build_writeup(r), r.headline) for r in writeups]

    rendered = [(w,
                 shorten(plaintext_markdown(headline),
                         width=300,
                         placeholder="...")) for (w, headline) in writeups]

    return templates.TemplateResponse(
        "writeups/index.j2",
        {
            "request": request,
            "writeups": rendered,
            "query": s_query
        },
    )
async def writeups_index(request: HTTPConnection):
    latest = (await
              Writeup.load(author=User).order_by(sa.desc(Writeup.creation_date)
                                                 ).limit(20).gino.all())

    rendered = [(w,
                 shorten(plaintext_markdown(w.content),
                         width=300,
                         placeholder="...")) for w in latest]

    return templates.TemplateResponse("writeups/index.j2", {
        "request": request,
        "writeups": rendered
    })
async def writeups_by_tag(request: HTTPConnection):
    tag = request.path_params["tag"]

    writeups = (await Writeup.load(author=User).where(
        Writeup.tags.contains([tag])).order_by(sa.desc(Writeup.creation_date)
                                               ).gino.all())

    rendered = [(w,
                 shorten(plaintext_markdown(w.content),
                         width=300,
                         placeholder="...")) for w in writeups]

    return templates.TemplateResponse("writeups/index.j2", {
        "request": request,
        "writeups": rendered
    })
Exemple #5
0
async def blog_by_tag(request: HTTPConnection):
    tag = request.path_params["tag"]

    blog = (
        await Blog.query.where(Blog.tags.contains([tag]))
        .order_by(sa.desc(Blog.creation_date))
        .gino.all()
    )

    rendered = [
        (w, shorten(plaintext_markdown(w.content), width=800, placeholder="..."))
        for w in blog
    ]

    grouped_blogs = await blogs_grouped()

    return templates.TemplateResponse(
        "blog/index.j2", {"request": request, "blog": rendered, "grouped_blogs": grouped_blogs}
    )
Exemple #6
0
async def blog_search(request: HTTPConnection):
    s_query = request.query_params.get("search", "")

    # sorry about this
    query = pg_search(sa.select([Blog]), s_query, sort=True)
    query = query.column(
        sa.func.ts_headline(
            search_manager.options["regconfig"],
            Blog.content,
            sa.func.tsq_parse(search_manager.options["regconfig"], s_query),
            f"StartSel=**,StopSel=**,MaxWords=70,MinWords=30,MaxFragments=3",
        ).label("headline")
    )

    blog = await query.as_scalar().gino.all()

    def build_blog(r):
        """we get back a RowProxy so manually construct the blog from it."""

        blog = Blog(
            id=r.id,
            title=r.title,
            slug=r.slug,
            tags=r.tags,
            content=r.content,
            creation_date=r.creation_date,
            edit_date=r.edit_date,
        )

        return blog

    blog = [(build_blog(r), r.headline) for r in blog]

    rendered = [
        (w, shorten(plaintext_markdown(headline), width=800, placeholder="..."))
        for (w, headline) in blog
    ]

    grouped_blogs = await blogs_grouped()

    return templates.TemplateResponse(
        "blog/index.j2", {"request": request, "blog": rendered, "query": s_query, "grouped_blogs": grouped_blogs}
    )