changeset 581:374033c4eb26

support for configuring arnica by wikiconfig enties
author Dirk Alders <d.alders@arcor.de>
date Sat, 10 Mar 2012 17:51:26 +0100
parents 704cc7c29b9b
children 7a22cd126aa4 588965ee2c63
files data/plugin/parser/text_x_arnica.py
diffstat 1 files changed, 31 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/data/plugin/parser/text_x_arnica.py	Thu Mar 08 16:29:53 2012 +0100
+++ b/data/plugin/parser/text_x_arnica.py	Sat Mar 10 17:51:26 2012 +0100
@@ -16,6 +16,7 @@
 """
 
 import os, re
+from inspect import getargspec
 from random import randint
 from MoinMoin import search
 from MoinMoin import wikiutil
@@ -24,19 +25,21 @@
 from MoinMoin.Page import Page
 
 parser_name = __name__.split('.')[-1]
+# is the name of the plugin and also used as prefix for wikiconfig plugin defaults.
+plugin_name = "arnica"
 
 
-def arnica_settings(target_page=u'', columns=4, file_regex=u'.',
-                    image_for_webnail=False,
-                    show_text=True, show_date=True, show_tools=False, show_album_title=True,
-                    sort_by=("name", "date", "alias"),
-                    reverse_sort=False,
-                    only_items=False, template_itemlist=False,
-                    album=False, album_title=unicode, album_image=u'', album_link_page=False,
-                    album_overview=False, album_short_title=False,
-                    renew=False,
-                    thumbnail_width=128,
-                    webnail_width=640):
+def settings(target_page=u'', columns=4, file_regex=u'.',
+             image_for_webnail=False,
+             show_text=True, show_date=True, show_tools=False, show_album_title=True,
+             sort_by=("name", "date", "alias"),
+             reverse_sort=False,
+             only_items=False, template_itemlist=False,
+             album=False, album_title=unicode, album_image=u'', album_link_page=False,
+             album_overview=False, album_short_title=False,
+             renew=False,
+             thumbnail_width=128,
+             webnail_width=640):
     """ dummy function to initialize all default parameters for arnica. The parameters are checked for wrong input.
     @param target_page: page to read attachments from. empty pagename is current page.
                         for album_overview, target_page is now a string for title search. alternatively it is possible to use regex:... or category:... (e.g. regex:title:.* for all pages)
@@ -65,6 +68,20 @@
     """
     return locals()
 
+def update_defaults_by_wikiconfig(cfg, plugin_name, settings_function):
+    """ function to overwrite defaults of settings_function by wikiconfig attributes
+    @param cfg: wiki config instance
+    @param plugin_name: this is the namespace prefix for parameters of the plugin (plugin_name_param has to be defined in wikiconfig).
+    @param settings_function: function whose defaults have to be updated by wikiconfig 
+    """
+    def get_arg_default(cfg, plugin_name, name, settings_function):
+        try:
+            return getattr(cfg, "%s_%s"%(plugin_name, name))
+        except AttributeError:
+            return getargspec(settings_function)[3][getargspec(settings_function)[0].index(name)]
+    settings_function.func_defaults = tuple([get_arg_default(cfg, plugin_name, arg, settings_function) 
+                                             for arg in getargspec(settings_function)[0]])
+
 def _get_files(request, pagename):
     """ get files dependent on isPicture and ignores tmp. files
     @param pagename: name of the page where to get attachments
@@ -90,11 +107,12 @@
         args = kw.get('format_args', '')
         self.init_settings = False
         self.top_image_sorted = None
+        update_defaults_by_wikiconfig(request.cfg, plugin_name, settings)
         # we use a macro definition to initialize the default init parameters
         # if a user enters a wrong parameter the failure is shown by the exception
         try:
-            settings = wikiutil.invoke_extension_function(request, arnica_settings, args)
-            for key, value in settings.items():
+            arnica_settings = wikiutil.invoke_extension_function(request, settings, args)
+            for key, value in arnica_settings.items():
                 setattr(self, key, value)
             # saves the state of valid input
             self.init_settings = True