forked from retoor/devplacepy
fix: normalize unicode escape sequences and reformat multi-line expressions across codebase
This commit is contained in:
+124
-40
@@ -3,11 +3,32 @@ from typing import Annotated
|
||||
from fastapi import APIRouter, Request, Form
|
||||
from devplacepy.models import GistForm, GistEditForm
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from devplacepy.database import get_table, get_users_by_uids, get_gist_languages, paginate
|
||||
from devplacepy.content import load_detail, edit_content_item, delete_content_item, enrich_items, create_content_item, detail_context, canonical_redirect, first_image_url
|
||||
from devplacepy.database import (
|
||||
get_table,
|
||||
get_users_by_uids,
|
||||
get_gist_languages,
|
||||
paginate,
|
||||
)
|
||||
from devplacepy.content import (
|
||||
load_detail,
|
||||
edit_content_item,
|
||||
delete_content_item,
|
||||
enrich_items,
|
||||
create_content_item,
|
||||
detail_context,
|
||||
canonical_redirect,
|
||||
first_image_url,
|
||||
)
|
||||
from devplacepy.templating import templates
|
||||
from devplacepy.utils import get_current_user, require_user, not_found, XP_GIST
|
||||
from devplacepy.seo import base_seo_context, site_url, website_schema, software_source_code_schema, list_page_seo, next_page_url
|
||||
from devplacepy.seo import (
|
||||
base_seo_context,
|
||||
site_url,
|
||||
website_schema,
|
||||
software_source_code_schema,
|
||||
list_page_seo,
|
||||
next_page_url,
|
||||
)
|
||||
from devplacepy.responses import respond, action_result
|
||||
from devplacepy.schemas import GistsOut, GistDetailOut
|
||||
|
||||
@@ -15,13 +36,33 @@ logger = logging.getLogger(__name__)
|
||||
router = APIRouter()
|
||||
|
||||
LANGUAGES = [
|
||||
("python", "Python"), ("javascript", "JavaScript"), ("typescript", "TypeScript"),
|
||||
("html", "HTML"), ("css", "CSS"), ("c", "C"), ("cpp", "C++"), ("java", "Java"),
|
||||
("go", "Go"), ("rust", "Rust"), ("sql", "SQL"), ("bash", "Bash"),
|
||||
("yaml", "YAML"), ("json", "JSON"), ("markdown", "Markdown"),
|
||||
("swift", "Swift"), ("php", "PHP"), ("ruby", "Ruby"), ("kotlin", "Kotlin"),
|
||||
("lua", "Lua"), ("perl", "Perl"), ("haskell", "Haskell"), ("elixir", "Elixir"),
|
||||
("r", "R"), ("dart", "Dart"), ("scala", "Scala"), ("plaintext", "Plain Text"),
|
||||
("python", "Python"),
|
||||
("javascript", "JavaScript"),
|
||||
("typescript", "TypeScript"),
|
||||
("html", "HTML"),
|
||||
("css", "CSS"),
|
||||
("c", "C"),
|
||||
("cpp", "C++"),
|
||||
("java", "Java"),
|
||||
("go", "Go"),
|
||||
("rust", "Rust"),
|
||||
("sql", "SQL"),
|
||||
("bash", "Bash"),
|
||||
("yaml", "YAML"),
|
||||
("json", "JSON"),
|
||||
("markdown", "Markdown"),
|
||||
("swift", "Swift"),
|
||||
("php", "PHP"),
|
||||
("ruby", "Ruby"),
|
||||
("kotlin", "Kotlin"),
|
||||
("lua", "Lua"),
|
||||
("perl", "Perl"),
|
||||
("haskell", "Haskell"),
|
||||
("elixir", "Elixir"),
|
||||
("r", "R"),
|
||||
("dart", "Dart"),
|
||||
("scala", "Scala"),
|
||||
("plaintext", "Plain Text"),
|
||||
]
|
||||
|
||||
|
||||
@@ -44,9 +85,13 @@ def get_gists_list(user_uid=None, language=None, before=None, viewer=None):
|
||||
|
||||
|
||||
@router.get("", response_class=HTMLResponse)
|
||||
async def gists_page(request: Request, language: str = None, user_uid: str = None, before: str = None):
|
||||
async def gists_page(
|
||||
request: Request, language: str = None, user_uid: str = None, before: str = None
|
||||
):
|
||||
user = get_current_user(request)
|
||||
gists_data, next_cursor, total_count = get_gists_list(user_uid, language, before, viewer=user)
|
||||
gists_data, next_cursor, total_count = get_gists_list(
|
||||
user_uid, language, before, viewer=user
|
||||
)
|
||||
seo_ctx = list_page_seo(
|
||||
request,
|
||||
title="Gists",
|
||||
@@ -57,17 +102,22 @@ async def gists_page(request: Request, language: str = None, user_uid: str = Non
|
||||
],
|
||||
next_url=next_page_url(request, next_cursor),
|
||||
)
|
||||
return respond(request, "gists.html", {
|
||||
**seo_ctx,
|
||||
"request": request,
|
||||
"user": user,
|
||||
"gists": gists_data,
|
||||
"total_count": total_count,
|
||||
"next_cursor": next_cursor,
|
||||
"current_language": language,
|
||||
"languages": LANGUAGES,
|
||||
"gist_language_codes": get_gist_languages(),
|
||||
}, model=GistsOut)
|
||||
return respond(
|
||||
request,
|
||||
"gists.html",
|
||||
{
|
||||
**seo_ctx,
|
||||
"request": request,
|
||||
"user": user,
|
||||
"gists": gists_data,
|
||||
"total_count": total_count,
|
||||
"next_cursor": next_cursor,
|
||||
"current_language": language,
|
||||
"languages": LANGUAGES,
|
||||
"gist_language_codes": get_gist_languages(),
|
||||
},
|
||||
model=GistsOut,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/{gist_slug}", response_class=HTMLResponse)
|
||||
@@ -91,13 +141,28 @@ async def gist_detail(request: Request, gist_slug: str):
|
||||
breadcrumbs=[
|
||||
{"name": "Home", "url": "/feed"},
|
||||
{"name": "Gists", "url": "/gists"},
|
||||
{"name": gist.get("title", "Gist"), "url": f"/gists/{gist['slug'] or gist['uid']}"},
|
||||
{
|
||||
"name": gist.get("title", "Gist"),
|
||||
"url": f"/gists/{gist['slug'] or gist['uid']}",
|
||||
},
|
||||
],
|
||||
schemas=[website_schema(base), software_source_code_schema(gist, base)],
|
||||
)
|
||||
return respond(request, "gist_detail.html", detail_context(request, user, detail, "gist", seo_ctx, {
|
||||
"languages": LANGUAGES,
|
||||
}), model=GistDetailOut)
|
||||
return respond(
|
||||
request,
|
||||
"gist_detail.html",
|
||||
detail_context(
|
||||
request,
|
||||
user,
|
||||
detail,
|
||||
"gist",
|
||||
seo_ctx,
|
||||
{
|
||||
"languages": LANGUAGES,
|
||||
},
|
||||
),
|
||||
model=GistDetailOut,
|
||||
)
|
||||
|
||||
|
||||
@router.post("/create")
|
||||
@@ -112,28 +177,47 @@ async def create_gist(request: Request, data: Annotated[GistForm, Form()]):
|
||||
if language not in valid_languages:
|
||||
language = "plaintext"
|
||||
|
||||
uid, gist_slug = create_content_item("gists", "gist", user, {
|
||||
"title": title,
|
||||
"description": description or None,
|
||||
"source_code": source_code,
|
||||
"language": language,
|
||||
}, title, XP_GIST, "First Gist", description or "", data.attachment_uids)
|
||||
uid, gist_slug = create_content_item(
|
||||
"gists",
|
||||
"gist",
|
||||
user,
|
||||
{
|
||||
"title": title,
|
||||
"description": description or None,
|
||||
"source_code": source_code,
|
||||
"language": language,
|
||||
},
|
||||
title,
|
||||
XP_GIST,
|
||||
"First Gist",
|
||||
description or "",
|
||||
data.attachment_uids,
|
||||
)
|
||||
url = f"/gists/{gist_slug}"
|
||||
return action_result(request, url, data={"uid": uid, "slug": gist_slug, "url": url})
|
||||
|
||||
|
||||
@router.post("/edit/{gist_slug}")
|
||||
async def edit_gist(request: Request, gist_slug: str, data: Annotated[GistEditForm, Form()]):
|
||||
async def edit_gist(
|
||||
request: Request, gist_slug: str, data: Annotated[GistEditForm, Form()]
|
||||
):
|
||||
user = require_user(request)
|
||||
language = data.language
|
||||
if language not in {l[0] for l in LANGUAGES}:
|
||||
language = "plaintext"
|
||||
return edit_content_item(request, "gists", user, gist_slug, {
|
||||
"title": data.title.strip(),
|
||||
"description": data.description.strip() or None,
|
||||
"source_code": data.source_code.strip(),
|
||||
"language": language,
|
||||
}, "/gists")
|
||||
return edit_content_item(
|
||||
request,
|
||||
"gists",
|
||||
user,
|
||||
gist_slug,
|
||||
{
|
||||
"title": data.title.strip(),
|
||||
"description": data.description.strip() or None,
|
||||
"source_code": data.source_code.strip(),
|
||||
"language": language,
|
||||
},
|
||||
"/gists",
|
||||
)
|
||||
|
||||
|
||||
@router.post("/delete/{gist_slug}")
|
||||
|
||||
Reference in New Issue
Block a user