X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=tags.py;fp=tags.py;h=35c4634ca53702fe4791bc70237fe13aa6018a2b;hb=9379ed3a21cf6aaacc9c3d3a2f6349aa22b7d3ee;hp=7ff886d544ec0a70bc9f8eb6926633671ab872f4;hpb=5c8f53a810fb2d55ff9381810dd1427ed7201949;p=phdru.name%2Fcgi-bin%2Fblog-ru%2Fsearch-tags.git diff --git a/tags.py b/tags.py index 7ff886d..35c4634 100644 --- a/tags.py +++ b/tags.py @@ -19,7 +19,37 @@ else: def tag_exists(tag): for posts in blog_dict.itervalues(): - for _file, _title, _lead, tags in posts: - if tag in tags: + for _file, _title, _lead, _tags in posts: + if tag in _tags: return True return False + +def _test_post(post, tree): + op = tree[0] + if op == 'NAME': + tag = tree[1] + assert isinstance(tag, str) + _tags = post[3] + return tag in _tags + elif op in ('AND', 'OR'): + value1 = _test_post(post, tree[1]) + value2 = _test_post(post, tree[2]) + if op == 'AND': + return value1 and value2 + if op == 'OR': + return value1 or value2 + elif op == 'NOT': + return not _test_post(post, tree[1]) + else: + raise ValueError("Cannot get there") + +def calc_tree(tree): + _posts = [] + for (year, month, day), posts in blog_dict.iteritems(): + for post in posts: + if _test_post(post, tree): + _posts.append(( + '/'.join((year, month, day, post[0].replace('.tmpl', '.html'))), + post[1])) + _posts.sort() + return _posts