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 })
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} )
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} )