Coverage for an_website / quotes / share.py: 91.667%
12 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-24 17:35 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-24 17:35 +0000
1# This program is free software: you can redistribute it and/or modify
2# it under the terms of the GNU Affero General Public License as
3# published by the Free Software Foundation, either version 3 of the
4# License, or (at your option) any later version.
5#
6# This program is distributed in the hope that it will be useful,
7# but WITHOUT ANY WARRANTY; without even the implied warranty of
8# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9# GNU Affero General Public License for more details.
10#
11# You should have received a copy of the GNU Affero General Public License
12# along with this program. If not, see <https://www.gnu.org/licenses/>.
14"""Share page to share quotes on multiple services."""
16from urllib.parse import quote
18from tornado.web import HTTPError
20from .utils import QuoteReadyCheckHandler, get_wrong_quote
23class ShareQuote(QuoteReadyCheckHandler):
24 """Request handler for the share page."""
26 async def get(
27 self, quote_id: str, author_id: str, *, head: bool = False
28 ) -> None:
29 """Handle GET requests to the share page."""
30 wrong_quote = await get_wrong_quote(int(quote_id), int(author_id))
31 if not wrong_quote:
32 raise HTTPError(404, reason="Falsches Zitat nicht gefunden")
33 if head:
34 return
35 text = f"»{wrong_quote.quote.quote}«\n- {wrong_quote.author.name}"
36 await self.render(
37 "pages/quotes/share.html",
38 text=quote(text, safe=""),
39 u_text=text,
40 u_url=(
41 url := self.fix_url(
42 f"/zitate/{quote_id}-{author_id}",
43 include_protocol_and_host=True,
44 )
45 ),
46 quote_url=quote(url, safe=""),
47 wrong_quote=str(wrong_quote),
48 )