Update
Some checks failed
DevPlace CI / test (push) Failing after 5m16s

This commit is contained in:
retoor 2026-05-23 09:00:52 +02:00
parent ccc0ee4d61
commit cc703e3a5d
3 changed files with 23 additions and 2 deletions

View File

@ -57,6 +57,7 @@ def init_db():
_index(db, "follows", "idx_follows_following", ["following_uid"]) _index(db, "follows", "idx_follows_following", ["following_uid"])
_index(db, "password_resets", "idx_password_resets_token", ["token"]) _index(db, "password_resets", "idx_password_resets_token", ["token"])
_index(db, "gists", "idx_gists_user_uid", ["user_uid"]) _index(db, "gists", "idx_gists_user_uid", ["user_uid"])
_index(db, "gists", "idx_gists_language", ["language"])
_index(db, "attachments", "idx_attachments_resource", ["resource_type", "resource_uid"]) _index(db, "attachments", "idx_attachments_resource", ["resource_type", "resource_uid"])
_index(db, "attachments", "idx_attachments_target", ["target_type", "target_uid"]) _index(db, "attachments", "idx_attachments_target", ["target_type", "target_uid"])
@ -319,6 +320,23 @@ def get_site_stats() -> dict:
return stats return stats
_gist_languages_cache = TTLCache(ttl=60)
def get_gist_languages() -> set[str]:
cached = _gist_languages_cache.get("codes")
if cached is not None:
return cached
codes: set[str] = set()
if "gists" in db.tables:
for row in db.query("SELECT DISTINCT language FROM gists"):
language = row.get("language")
if language:
codes.add(language)
_gist_languages_cache.set("codes", codes)
return codes
def resolve_by_slug(table, slug): def resolve_by_slug(table, slug):
entry = table.find_one(slug=slug) entry = table.find_one(slug=slug)
if not entry: if not entry:

View File

@ -4,7 +4,7 @@ from datetime import datetime, timezone
from fastapi import APIRouter, Request, HTTPException, Form from fastapi import APIRouter, Request, HTTPException, Form
from devplacepy.models import GistForm, GistEditForm from devplacepy.models import GistForm, GistEditForm
from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.responses import HTMLResponse, RedirectResponse
from devplacepy.database import get_table, get_users_by_uids from devplacepy.database import get_table, get_users_by_uids, get_gist_languages
from devplacepy.content import load_detail, edit_content_item, delete_content_item, enrich_items from devplacepy.content import load_detail, edit_content_item, delete_content_item, enrich_items
from devplacepy.templating import templates from devplacepy.templating import templates
from devplacepy.utils import generate_uid, get_current_user, require_user, make_combined_slug, create_mention_notifications from devplacepy.utils import generate_uid, get_current_user, require_user, make_combined_slug, create_mention_notifications
@ -65,6 +65,7 @@ async def gists_page(request: Request, language: str = None, user_uid: str = Non
"total_count": total_count, "total_count": total_count,
"current_language": language, "current_language": language,
"languages": LANGUAGES, "languages": LANGUAGES,
"gist_language_codes": get_gist_languages(),
}) })

View File

@ -15,15 +15,17 @@
<span class="icon">&#x1F4CB;</span>All <span class="icon">&#x1F4CB;</span>All
</a> </a>
{% for code, name in languages %} {% for code, name in languages %}
{% if code != 'plaintext' %} {% if code != 'plaintext' and code in gist_language_codes %}
<a href="/gists?language={{ code }}" class="sidebar-link {% if current_language == code %}active{% endif %}"> <a href="/gists?language={{ code }}" class="sidebar-link {% if current_language == code %}active{% endif %}">
<span class="icon">&#x1F4DD;</span>{{ name }} <span class="icon">&#x1F4DD;</span>{{ name }}
</a> </a>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% if 'plaintext' in gist_language_codes %}
<a href="/gists?language=plaintext" class="sidebar-link {% if current_language == 'plaintext' %}active{% endif %}"> <a href="/gists?language=plaintext" class="sidebar-link {% if current_language == 'plaintext' %}active{% endif %}">
<span class="icon">&#x1F4DD;</span>Plain Text <span class="icon">&#x1F4DD;</span>Plain Text
</a> </a>
{% endif %}
</div> </div>
{% if user %} {% if user %}