summaryrefslogtreecommitdiffstats
path: root/nlwikinfo.py
diff options
context:
space:
mode:
authorroot <root@7322e99d-02ea-0310-aa39-e9a107903beb>2005-09-29 11:02:33 +0000
committerroot <root@7322e99d-02ea-0310-aa39-e9a107903beb>2005-09-29 11:02:33 +0000
commit14239715b6284f1f91df697fcc35162971acfc33 (patch)
tree90bb9db552ea9a0a8e51d3d11dbb061bb251e0ca /nlwikinfo.py
downloadwikinfo-14239715b6284f1f91df697fcc35162971acfc33.tar.gz
wikinfo-14239715b6284f1f91df697fcc35162971acfc33.tar.xz
wikinfo-14239715b6284f1f91df697fcc35162971acfc33.zip
* Renamed */trunk to */0.9 and */stable to */0.8 for future proofing.
Diffstat (limited to 'nlwikinfo.py')
-rw-r--r--nlwikinfo.py127
1 files changed, 127 insertions, 0 deletions
diff --git a/nlwikinfo.py b/nlwikinfo.py
new file mode 100644
index 0000000..167f24c
--- /dev/null
+++ b/nlwikinfo.py
@@ -0,0 +1,127 @@
+# -*- coding: iso8859-1 -*-
+#
+# Copyright (C) 2005 Jani Tiainen
+#
+# Trac is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# NlWikinfo is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# Author: Jani Tiainen <redetin@luukku.com>
+
+from __future__ import generators
+import imp
+import inspect
+import os.path
+import time
+import shutil
+import re
+
+try:
+ from cStringIO import StringIO
+except ImportError:
+ from StringIO import StringIO
+
+from trac.core import *
+from trac.wiki.api import IWikiMacroProvider, WikiSystem
+
+class NLWikinfoMacro(Component):
+ """
+ Output different information by keyword.
+
+ Currently supported infos:
+
+ author - Author of first version
+ version - Latest version of page
+ changed_by - Page last changed by
+ comment - Latest comment of changed by
+ changed_ts - Page last changed timestamp
+ """
+ implements(IWikiMacroProvider)
+
+ # IWikiMacroProvider methods
+ def get_macros(self):
+ yield 'NlWikinfo'
+
+ def get_macro_description(self, name):
+ return inspect.getdoc(NLWikinfoMacro)
+
+ def render_macro(self, req, name, content):
+ if content:
+ keywords = [arg.strip() for arg in content.split(',')]
+
+ buf = StringIO()
+
+ for nfo in keywords:
+ try:
+ getattr(self, '_do_%s' % nfo)(req, name, content, buf)
+ except AttributeError:
+ buf.write('INVALID: %s' % nfo)
+
+ return buf.getvalue()
+
+ # Private methods
+ def _do_author(self, req, name, content, buf):
+ db = self.env.get_db_cnx()
+ cursor = db.cursor()
+
+ sql = "SELECT author, version FROM wiki where name = '%s' order by version limit 1" % req.hdf['wiki.page_name']
+ cursor.execute(sql)
+
+ row = cursor.fetchone()
+
+ buf.write(row[0])
+
+ def _do_version(self, req, name, content, buf):
+ db = self.env.get_db_cnx()
+ cursor = db.cursor()
+
+ sql = "SELECT max(version) FROM wiki where name = '%s'" % req.hdf['wiki.page_name']
+ cursor.execute(sql)
+
+ row = cursor.fetchone()
+
+ buf.write(str(row[0]))
+
+ def _do_changed_by(self, req, name, content, buf):
+ db = self.env.get_db_cnx()
+ cursor = db.cursor()
+
+ sql = "SELECT author, version FROM wiki where name = '%s' order by version desc limit 1" % req.hdf['wiki.page_name']
+ cursor.execute(sql)
+
+ row = cursor.fetchone()
+
+ buf.write(row[0])
+
+ def _do_changed_ts(self, req, name, content, buf):
+ db = self.env.get_db_cnx()
+ cursor = db.cursor()
+
+ sql = "SELECT time, version FROM wiki where name = '%s' order by version desc limit 1" % req.hdf['wiki.page_name']
+ cursor.execute(sql)
+
+ row = cursor.fetchone()
+
+ buf.write(time.strftime('%x', time.localtime(row[0])))
+
+ def _do_comment(self, req, name, content, buf):
+ db = self.env.get_db_cnx()
+ cursor = db.cursor()
+
+ sql = "SELECT comment, version FROM wiki where name = '%s' order by version desc limit 1" % req.hdf['wiki.page_name']
+ cursor.execute(sql)
+
+ row = cursor.fetchone()
+
+ buf.write(row[0])
+