I wanted to create a dynamic portal like function for my wiki, where the front page would include a couple of personal pages belonging to the logged in user that is lookin at the page.. so I created this macro... UserIncludePage.py
""" MoinMoin - UserIncludePage macro version 1.0 JonathanDietrich Allows for dynamic additions based on UserName [[UserIncludePage(page, "heading", level, force)]] page will be added to the end of the the current user's name heading is the standard include heading level is the standard include level force if set to force or 1 will force the page to show, even if it doesn't currently exist [[UserIncludePage(/Notes,'Personal Notes',2, 1)]] this will include UserName/Notes with the heading of Personal Notes down to level 2 with the force set to 1, this page will be included even if it doesn't exist $Id$ """ import re from MoinMoin import config from MoinMoin import wikiutil import MoinMoin.macro.IncludePages from MoinMoin.Page import Page _arg_level = r',\s*(?P<level>\d+)' _arg_force = r',\s*(?P<force>.+?)' _arg_heading = r'(?P<heading>,)\s*(|(?P<hquote>[\'"])(?P<htext>.+?)(?P=hquote))' _args_re_pattern = r'^(?P<pattern>[^,]+)?(%s)?(%s)?(%s)?$' % (_arg_heading, _arg_level, _arg_force ) def execute(macro, text, args_re=re.compile(_args_re_pattern)): # parse and check arguments args = args_re.match(text) if not args: return ('<p><strong class="error">%s</strong></p>' % _('Invalid include calendar page arguments "%s"!')) % (text,) # get the arguments username = macro.request.user.name if args.group('pattern') is None: pattern = username else: pattern = username + args.group('pattern') if args.group('level') is None: level = 1 else: level = int(args.group('level')) if args.group('htext') is None: heading = "" else: heading = args.group('htext') params = '%s, "%s", %d' % (pattern, heading, level) targetpage = Page(pattern) if args.group('force') is None: force = 0 elif args.group('force') == '1' or args.group('force') == 'force' : force = 1 else: force = 0 if (targetpage.exists() or force ) and macro.request.user.valid : return MoinMoin.macro.Include.execute(macro, params) else: return ''