Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
from zerver.lib.cache import (
|
|
cache_with_key,
|
|
realm_rendered_description_cache_key,
|
|
realm_text_description_cache_key,
|
|
)
|
|
from zerver.lib.html_to_text import html_to_text
|
|
from zerver.lib.markdown import markdown_convert
|
|
from zerver.lib.markdown import version as markdown_version
|
|
from zerver.models import Realm
|
|
|
|
|
|
def render_realm_description(description: str, realm: Realm | None = None) -> tuple[str, int]:
|
|
if not description:
|
|
return ("", markdown_version)
|
|
|
|
rendered_description = markdown_convert(
|
|
description,
|
|
message_realm=realm,
|
|
no_previews=True,
|
|
).rendered_content
|
|
|
|
return (rendered_description, markdown_version)
|
|
|
|
|
|
@cache_with_key(realm_rendered_description_cache_key, timeout=3600 * 24 * 7)
|
|
def get_realm_rendered_description(realm: Realm) -> str:
|
|
if (
|
|
realm.rendered_description is None
|
|
or realm.rendered_description_version is None
|
|
or realm.rendered_description_version < markdown_version
|
|
):
|
|
rendered_description, version = render_realm_description(realm.description, realm)
|
|
realm.rendered_description = rendered_description
|
|
realm.rendered_description_version = version
|
|
realm.save(update_fields=["rendered_description", "rendered_description_version"])
|
|
|
|
if realm.rendered_description == "":
|
|
return "<p>The coolest place in the universe.</p>"
|
|
return realm.rendered_description
|
|
|
|
|
|
@cache_with_key(realm_text_description_cache_key, timeout=3600 * 24 * 7)
|
|
def get_realm_text_description(realm: Realm) -> str:
|
|
html_description = get_realm_rendered_description(realm)
|
|
return html_to_text(html_description, {"p": " | ", "li": " * "})
|