]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blob - search-tags.py
Feat(Python3): Use `mycgi`
[phdru.name/cgi-bin/blog-ru/search-tags.git] / search-tags.py
1 #! /usr/bin/env python3
2 # coding: koi8-r
3 """Search tags CGI"""
4
5 __author__ = "Oleg Broytman <phd@phdru.name>"
6 __copyright__ = "Copyright (C) 2014-2024 PhiloSoft Design"
7 __license__ = "GNU GPL"
8
9 import sys
10
11 from lark import ParseError
12 import mycgi
13
14 from html.response import redirect, response
15 from parser import parser
16
17 form = mycgi.Form()
18 if 'q' not in form:
19     status = "400 Bad request"
20     title = "Error!"
21     body = "Required parameter is missing!"
22
23 else:
24     q = form['q'].value
25     try:
26         tree = parser.parse(q)
27     except ParseError:
28         status = "400 Bad request"
29         title = "Error!"
30         body = "Bad query syntax!"
31     else:
32         if tree[0] == 'NAME':  # Single tag - just do redirect
33             tag = tree[1]
34             assert isinstance(tag, str)
35             from tags import tag_exists
36             if tag_exists(tag):
37                 redirect(
38                     "/Russian/blog/tags/%s.html" % tag, status="301 Moved")
39                 sys.exit()
40             status = "404 Tag not found"
41             title = "Ошибка!"
42             body = "Тег %s не существует!" % tag
43         else:  # Process tree
44             from tags import find_tags
45             posts = find_tags(tree)
46             status = None
47             title = "Записи, найденные для выражения " + mycgi.escape(q)
48             if posts:
49                 _posts = ["""\
50     <p class="head">
51     <ul>
52     """]
53                 for year, month, day, suburl, _title in posts:
54                     _posts.append(
55                         '<li>%s-%s-%s '
56                         '<a href="../../../../Russian/blog/%s">%s</a></li>\n'
57                         % (year, month, day, suburl, _title))
58                 _posts .append("""\
59     </ul>
60     </p>
61     """)
62                 body = ''.join(_posts)
63             else:
64                 body = "Не найдено ни одной записи."
65
66 response(title, body, status)