-#! /usr/bin/env python
+#! /usr/bin/env python3
# coding: koi8-r
"""Search tags CGI"""
__author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2014-2016 PhiloSoft Design"
+__copyright__ = "Copyright (C) 2014-2024 PhiloSoft Design"
__license__ = "GNU GPL"
-import cgi, sys
-from grako.exceptions import FailedParse
+from html import escape
+from urllib.parse import parse_qs
+import os
+import sys
-from html.response import redirect, response
+from lark import ParseError
-form = cgi.FieldStorage()
-if not form.has_key('q'):
+from html_output.response import redirect, response
+from parser import parser
+
+qs_dict = parse_qs(os.environ['QUERY_STRING'], encoding='koi8-r')
+if 'q' not in qs_dict or len(qs_dict['q']) > 1:
status = "400 Bad request"
title = "Error!"
body = "Required parameter is missing!"
else:
- q = form['q'].value
+ q = qs_dict['q'][0]
try:
- from parser.parser import TagsParser
- from parser.build_ast import TagsSemantics
- parser = TagsParser(parseinfo=False)
- tree = parser.parse(q, semantics=TagsSemantics())
- except FailedParse:
+ tree = parser.parse(q)
+ except ParseError:
status = "400 Bad request"
title = "Error!"
body = "Bad query syntax!"
else:
- if tree[0] == 'NAME': # Single tag - just do redirect
+ if tree[0] == 'NAME': # Single tag - just do redirect
tag = tree[1]
assert isinstance(tag, str)
from tags import tag_exists
if tag_exists(tag):
- redirect("/Russian/blog/tags/%s.html" % tag, status="301 Moved")
+ redirect(
+ "/Russian/blog/tags/%s.html" % tag, status="301 Moved")
sys.exit()
status = "404 Tag not found"
title = "Ошибка!"
body = "Тег %s не существует!" % tag
- else: # Process tree
+ else: # Process tree
from tags import find_tags
posts = find_tags(tree)
status = None
- title = "Записи, найденные для выражения " + cgi.escape(q)
+ title = "Записи, найденные для выражения " + escape(q)
if posts:
_posts = ["""\
<p class="head">
<ul>
"""]
for year, month, day, suburl, _title in posts:
- _posts.append('<li>%s-%s-%s <a href="../../../../Russian/blog/%s">%s</a></li>\n' % (year, month, day, suburl, _title))
+ _posts.append(
+ '<li>%s-%s-%s '
+ '<a href="../../../../Russian/blog/%s">%s</a></li>\n'
+ % (year, month, day, suburl, _title))
_posts .append("""\
</ul>
</p>