From ed552696f81f160ff233a268cbc9b506e76edce9 Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Tue, 20 May 2014 07:29:24 +0400 Subject: [PATCH] Process single tag Verify the tag exists and do a redirect to its static page. --- search-tags.py | 14 ++++++++++++-- tags.py | 25 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 tags.py diff --git a/search-tags.py b/search-tags.py index 9bdfc8b..8d322d1 100755 --- a/search-tags.py +++ b/search-tags.py @@ -5,10 +5,10 @@ __author__ = "Oleg Broytman " __copyright__ = "Copyright (C) 2014 PhiloSoft Design" __license__ = "GNU GPL" -import cgi +import cgi, sys from ply.lex import LexError -from html.response import response +from html.response import redirect, response from parser.parser import parser form = cgi.FieldStorage() @@ -27,5 +27,15 @@ else: status = "400 Bad request" title = "Error!" body = "Bad query syntax!" + elif 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") + sys.exit() + status = "404 Tag not found" + title = "Error!" + body = "Tag does not exist!" response(title, body, status) diff --git a/tags.py b/tags.py new file mode 100644 index 0000000..7ff886d --- /dev/null +++ b/tags.py @@ -0,0 +1,25 @@ +blog_filename = "blog_dict.pickle" + +try: + import cPickle as pickle +except ImportError: + import pickle + +try: + blog_file = open(blog_filename, "rb") +except IOError: + blog_dict = {} +else: + blog_dict = pickle.load(blog_file) + blog_file.close() + + +# blog_dict is a mapping +# (year, month, day) => [list of (file, title, lead, tags)] + +def tag_exists(tag): + for posts in blog_dict.itervalues(): + for _file, _title, _lead, tags in posts: + if tag in tags: + return True + return False -- 2.39.2