[Checkins] SVN: martian/trunk/ Add a validateClass validate function for directives.

Martijn Faassen faassen at infrae.com
Tue Jun 3 13:42:07 EDT 2008


Log message for revision 87131:
  Add a validateClass validate function for directives.
  

Changed:
  U   martian/trunk/CHANGES.txt
  U   martian/trunk/src/martian/__init__.py
  U   martian/trunk/src/martian/directive.py
  U   martian/trunk/src/martian/directive.txt

-=-
Modified: martian/trunk/CHANGES.txt
===================================================================
--- martian/trunk/CHANGES.txt	2008-06-03 13:00:49 UTC (rev 87130)
+++ martian/trunk/CHANGES.txt	2008-06-03 17:42:05 UTC (rev 87131)
@@ -4,8 +4,11 @@
 0.9.8 (unreleased)
 ==================
 
-* ...
+Feature changes
+---------------
 
+* Add a ``validateClass`` validate function for directives.
+
 0.9.7 (2008-05-29)
 ==================
 

Modified: martian/trunk/src/martian/__init__.py
===================================================================
--- martian/trunk/src/martian/__init__.py	2008-06-03 13:00:49 UTC (rev 87130)
+++ martian/trunk/src/martian/__init__.py	2008-06-03 17:42:05 UTC (rev 87131)
@@ -8,5 +8,5 @@
 from martian.directive import ONCE, MULTIPLE, DICT
 from martian.directive import CLASS, CLASS_OR_MODULE, MODULE
 from martian.directive import (
-    validateText, validateInterface, validateInterfaceOrClass)
+    validateText, validateInterface, validateClass, validateInterfaceOrClass)
 from martian.directive import baseclass

Modified: martian/trunk/src/martian/directive.py
===================================================================
--- martian/trunk/src/martian/directive.py	2008-06-03 13:00:49 UTC (rev 87130)
+++ martian/trunk/src/martian/directive.py	2008-06-03 17:42:05 UTC (rev 87131)
@@ -225,6 +225,10 @@
         raise GrokImportError("The '%s' directive can only be called with "
                               "a class or an interface." % directive.name)
 
+def validateClass(directive, value):
+    if not util.isclass(value):
+        raise GrokImportError("The '%s' directive can only be called with "
+                              "a class." % directive.name)
 
 def validateInterface(directive, value):
     if not (IInterface.providedBy(value)):

Modified: martian/trunk/src/martian/directive.txt
===================================================================
--- martian/trunk/src/martian/directive.txt	2008-06-03 13:00:49 UTC (rev 87130)
+++ martian/trunk/src/martian/directive.txt	2008-06-03 17:42:05 UTC (rev 87131)
@@ -541,6 +541,31 @@
     ...
   GrokImportError: The 'iface' directive can only be called with an interface.
 
+The ``validateClass`` validator only accepts a class::
+
+  >>> from martian import validateClass
+  >>> class klass(Directive):
+  ...    scope = CLASS 
+  ...    store = ONCE
+  ...    validate = validateClass
+
+  >>> class Foo(object):
+  ...    klass(Bar)
+
+But it won't work with an interface or other things::
+
+  >>> class Foo(object):
+  ...    klass(IBar)
+  Traceback (most recent call last):
+    ...
+  GrokImportError: The 'klass' directive can only be called with a class.
+
+  >>> class Foo(object):
+  ...    klass(Bar())
+  Traceback (most recent call last):
+    ...
+  GrokImportError: The 'klass' directive can only be called with a class.
+
 Declaring base classes
 ----------------------
 



More information about the Checkins mailing list