X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=search-tags.py;h=6281a1bc6919f7814bd04b2a86cc7b955ae41dde;hb=HEAD;hp=cbac10c6bbdac3eee8d9b171667938976afdfeeb;hpb=457d8766cac234bb006d4c2aff05e4519f2e58ac;p=phdru.name%2Fcgi-bin%2Fblog-ru%2Fsearch-tags.git diff --git a/search-tags.py b/search-tags.py index cbac10c..228866b 100755 --- a/search-tags.py +++ b/search-tags.py @@ -1,18 +1,70 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 +# coding: koi8-r """Search tags CGI""" __author__ = "Oleg Broytman " -__copyright__ = "Copyright (C) 2014 PhiloSoft Design" +__copyright__ = "Copyright (C) 2014-2024 PhiloSoft Design" __license__ = "GNU GPL" -import cgi -from parse_query import parser -from html.response import response +from html import escape +from urllib.parse import parse_qs +import os +import sys -form = cgi.FieldStorage() -if not form.has_key('q'): +from lark import ParseError + +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 = qs_dict['q'][0] + try: + 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 + tag = tree[1] + assert isinstance(tag, str) + from tags import real_tag + rtag = real_tag(tag) + if rtag: + redirect( + "/Russian/blog/tags/%s.html" % rtag.replace(' ', '_'), + status="301 Moved") + sys.exit() + status = "404 Tag not found" + title = "ïÛÉÂËÁ!" + body = "ôÅÇ %s ÎÅ ÓÕÝÅÓÔ×ÕÅÔ!" % tag + else: # Process tree + from tags import find_tags + posts = find_tags(tree) + status = None + title = "úÁÐÉÓÉ, ÎÁÊÄÅÎÎÙÅ ÄÌÑ ×ÙÒÁÖÅÎÉÑ " + escape(q) + if posts: + _posts = ["""\ +

+

+

+ """) + body = ''.join(_posts) + else: + body = "îÅ ÎÁÊÄÅÎÏ ÎÉ ÏÄÎÏÊ ÚÁÐÉÓÉ." + response(title, body, status)