[Checkins] SVN: Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/util. Fix keyword digger.

Uli Fouquet uli at gnufix.de
Tue Feb 12 11:22:55 EST 2008


Log message for revision 83765:
  Fix keyword digger.

Changed:
  U   Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/util.py
  U   Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/util.txt

-=-
Modified: Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/util.py
===================================================================
--- Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/util.py	2008-02-12 14:51:34 UTC (rev 83764)
+++ Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/util.py	2008-02-12 16:22:54 UTC (rev 83765)
@@ -48,4 +48,6 @@
         args, varargs, varkw, defaults = getargspec(init)
         defaultlen = len(defaults)
         result.update(args[-defaultlen:])
+        if varkw is None:
+            break
     return list(result)

Modified: Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/util.txt
===================================================================
--- Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/util.txt	2008-02-12 14:51:34 UTC (rev 83764)
+++ Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/util.txt	2008-02-12 16:22:54 UTC (rev 83765)
@@ -49,28 +49,59 @@
 --------------------------------------
 
 The ``get_keyword_params()`` function tries to extract all keyword
-parameters of a given method of a class. If, for example, we want to
-know, which keyword parameters are supported by the constructor of the
-``DocTestSetup`` class, we can do this like so::
+parameters of a given method of a class. We want to know, which
+keyword parameters are supported by the constructor of the following
+class::
 
-   >>> from z3c.testsetup.doctesting import DocTestSetup
+   >>> class Club(object):
+   ...     def __init__(self, weight, num_of_spikes=0):
+   ...         pass
+
+This can be done by::
+
    >>> from z3c.testsetup.util import get_keyword_params
-   >>> kw_list = get_keyword_params(DocTestSetup, '__init__')
+   >>> kw_list = get_keyword_params(Club, '__init__')
    >>> kw_list.sort()
    >>> kw_list
-   ['encoding', 'extensions', 'filter_func', 'globs', 'optionflags',
-   'regexp_list', 'setup', 'teardown']
+   ['num_of_spikes']
 
-The FunctionalDocTestSetup class supports some more keywords in its
-constructor::
+Okay. Note, that we only get the keyword parameters, i.e. parameters,
+that have a default value.
 
-   >>> from z3c.testsetup.doctesting import FunctionalDocTestSetup
-   >>> kw_list2 = get_keyword_params(FunctionalDocTestSetup, '__init__')
-   >>> kw_list2.sort()
-   >>> kw_list2
-   ['checker', 'encoding', 'extensions', 'filter_func', 'globs',
-    'layer', 'layer_name', 'optionflags', 'regexp_list', 'setup',
-    'teardown', 'zcml_config']
+What now, if the class was derived and supports more parameters
+than actually shown in the class definition itself? First, let us
+create such a class::
 
+   >>> class ColouredClub(Club):
+   ...     def __init__(self, weight, color='pink', **kw):
+   ...         pass
 
+A coloured club can therefore have a number of spikes and a
+color. Will both be found by our helper function?::
+
+   >>> kw_list = get_keyword_params(ColouredClub, '__init__')
+   >>> kw_list.sort()
+   >>> kw_list
+   ['color', 'num_of_spikes']
+
+Fine.
+
+Now we check, wether only really accepted parameters are found. What,
+if a derived class does not accept various keywords using ``**kw`` or
+similar? We define such a class::
+
+   >>> class ClubSoda(Club):
+   ...    def __init__(self, temperature=12, sparkles=True, *args):
+   ...        pass
+
+This time, the ``num_of_spikes`` parameter should not appear. The
+``weight`` parameter, which is derived from the base class, should
+neighter appear::
+
+   >>> kw_list = get_keyword_params(ClubSoda, '__init__')
+   >>> kw_list.sort()
+   >>> kw_list
+   ['sparkles', 'temperature']
+
+
 """



More information about the Checkins mailing list