[Checkins] SVN: martian/branches/jw-class-or-module-scope-edge-cases/src/martian/ make the different (edge) cases for class or module scope work.

Jan-Wijbrand Kolman janwijbrand at gmail.com
Fri Feb 20 15:46:55 EST 2009


Log message for revision 96853:
  make the different (edge) cases for class or module scope work.

Changed:
  U   martian/branches/jw-class-or-module-scope-edge-cases/src/martian/directive.py
  U   martian/branches/jw-class-or-module-scope-edge-cases/src/martian/directive.txt
  U   martian/branches/jw-class-or-module-scope-edge-cases/src/martian/edgecase.txt

-=-
Modified: martian/branches/jw-class-or-module-scope-edge-cases/src/martian/directive.py
===================================================================
--- martian/branches/jw-class-or-module-scope-edge-cases/src/martian/directive.py	2009-02-20 20:30:05 UTC (rev 96852)
+++ martian/branches/jw-class-or-module-scope-edge-cases/src/martian/directive.py	2009-02-20 20:46:55 UTC (rev 96853)
@@ -161,11 +161,8 @@
             return result
 
         # we may be really dealing with an instance or a module here
-        #if not util.isclass(component):
-        #    result = directive.store.get(directive, component, _USE_DEFAULT)
-        #    if result is not _USE_DEFAULT:
-        #        return result
-        #    return get_default(component, component)
+        if not util.isclass(component):
+            return get_default(component, component)
 
         # now we need to loop through the mro, potentially twice
         mro = inspect.getmro(component)

Modified: martian/branches/jw-class-or-module-scope-edge-cases/src/martian/directive.txt
===================================================================
--- martian/branches/jw-class-or-module-scope-edge-cases/src/martian/directive.txt	2009-02-20 20:30:05 UTC (rev 96852)
+++ martian/branches/jw-class-or-module-scope-edge-cases/src/martian/directive.txt	2009-02-20 20:46:55 UTC (rev 96853)
@@ -173,6 +173,49 @@
   >>> layer.bind().get(testmodule.Foo, testmodule) is None
   True
 
+
+
+
+Like with CLASS scope directive where values set are inherited by subclasses,
+values set on a class or module level are inherited too, even if the subclass
+is defined another module::
+
+  >>> class testmodule_a(FakeModule):
+  ...   layer('Value set on baseclass module')
+  ...   class FooA(object):
+  ...      pass
+  >>> from martiantest.fake import testmodule_a
+  >>>
+  >>> class testmodule_b(FakeModule):
+  ...   class FooB(testmodule_a.FooA):
+  ...      pass
+  >>> from martiantest.fake import testmodule_b
+
+On the baseclass::
+
+  >>> layer.bind().get(testmodule_a.FooA)
+  'Value set on baseclass module'
+
+Inherited by the subclass::
+
+  >>> layer.bind().get(testmodule_b.FooB)
+  'Value set on baseclass module'
+
+Whenever there's a directive set on the baseclass' module, it will take
+precedence like with "normal" inheritance::
+
+  >>> class testmodule_c(FakeModule):
+  ...   layer('Value set on subclass module')
+  ...   class FooC(testmodule_a.FooA):
+  ...      pass
+  >>> from martiantest.fake import testmodule_c
+
+  >>> layer.bind().get(testmodule_c.FooC)
+  'Value set on subclass module'
+
+
+
+
 Let's now look at this using a directive with CLASS scope only::
 
   >>> class layer2(Directive):
@@ -898,7 +941,7 @@
 
   >>> from martian import validateClass
   >>> class klass(Directive):
-  ...    scope = CLASS 
+  ...    scope = CLASS
   ...    store = ONCE
   ...    validate = validateClass
 

Modified: martian/branches/jw-class-or-module-scope-edge-cases/src/martian/edgecase.txt
===================================================================
--- martian/branches/jw-class-or-module-scope-edge-cases/src/martian/edgecase.txt	2009-02-20 20:30:05 UTC (rev 96852)
+++ martian/branches/jw-class-or-module-scope-edge-cases/src/martian/edgecase.txt	2009-02-20 20:46:55 UTC (rev 96853)
@@ -49,9 +49,12 @@
 Directive scope and default edge cases
 --------------------------------------
 
+  >>> from martian import Directive, CLASS_OR_MODULE, CLASS, MODULE
+  >>> from martian import ONCE 
+
 MODULE scope directive on a module, with no explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = MODULE
   ...     store = ONCE  
   >>> class module_no_explicit_value(FakeModule):
@@ -62,7 +65,7 @@
 
 MODULE scope directive on a module, with an explicit value::
 
-  >>> class mydir2(Directive):
+  >>> class mydir2(martian.Directive):
   ...     scope = MODULE
   ...     store = ONCE  
   >>> class module_with_explicit_value(FakeModule):
@@ -74,7 +77,7 @@
 
 MODULE scope directive on a module, with no explicit value, with a custom default::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = MODULE
   ...     store = ONCE  
   >>> class module_custom_default(FakeModule):
@@ -87,7 +90,7 @@
  
 CLASS scope directive on a class, with no explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS
   ...     store = ONCE  
   >>> class module_get_from_class_no_explicit(FakeModule):
@@ -99,7 +102,7 @@
 
 CLASS scope directive on an instance, with no explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS
   ...     store = ONCE  
   >>> class module_get_from_instance_no_explicit(FakeModule):
@@ -112,7 +115,7 @@
 
 CLASS scope directive on a class, with an explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS
   ...     store = ONCE  
   >>> class module_get_from_class_with_explicit(FakeModule):
@@ -124,7 +127,7 @@
 
 CLASS scope directive on an instance, with an explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS
   ...     store = ONCE  
   >>> class module_get_from_instance_with_explicit(FakeModule):
@@ -137,7 +140,7 @@
 
 CLASS scope directive on a class, with a custom default::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS
   ...     store = ONCE  
   >>> class module_get_from_class_with_custom(FakeModule):
@@ -152,7 +155,7 @@
 
 CLASS scope directive on an instance, with a custom default::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS
   ...     store = ONCE  
   >>> class module_get_from_instance_with_custom(FakeModule):
@@ -166,7 +169,7 @@
 
 CLASS_OR_MODULE scope directive on a module, with no explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS_OR_MODULE
   ...     store = ONCE  
   >>> class module(FakeModule):
@@ -178,7 +181,7 @@
 
 CLASS_OR_MODULE scope directive on a class, with no explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS_OR_MODULE
   ...     store = ONCE  
   >>> class module(FakeModule):
@@ -191,7 +194,7 @@
 
 CLASS_OR_MODULE scope directive on an instance, with no explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS_OR_MODULE
   ...     store = ONCE  
   >>> class module(FakeModule):
@@ -205,7 +208,7 @@
 
 CLASS_OR_MODULE scope directive on a module, with an explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS_OR_MODULE
   ...     store = ONCE  
   >>> class module(FakeModule):
@@ -217,7 +220,7 @@
 
 CLASS_OR_MODULE scope directive on a class, with an explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS_OR_MODULE
   ...     store = ONCE  
   >>> class module(FakeModule):
@@ -230,7 +233,7 @@
 
 CLASS_OR_MODULE scope directive on an instance, with an explicit value::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS_OR_MODULE
   ...     store = ONCE  
   >>> class module(FakeModule):
@@ -244,7 +247,7 @@
 
 CLASS_OR_MODULE scope directive on a module, with a custom default::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS_OR_MODULE
   ...     store = ONCE  
   >>> class module(FakeModule):
@@ -255,7 +258,7 @@
 
 CLASS_OR_MODULE scope directive on a class, with a custom default::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS_OR_MODULE
   ...     store = ONCE  
   >>> class module(FakeModule):
@@ -268,7 +271,7 @@
 
 CLASS_OR_MODULE scope directive on an instance, with a custom default::
 
-  >>> class mydir(Directive):
+  >>> class mydir(martian.Directive):
   ...     scope = CLASS_OR_MODULE
   ...     store = ONCE  
   >>> class module(FakeModule):
@@ -278,4 +281,24 @@
   ...     obj = MyClass()
   >>> from martiantest.fake import module
   >>> mydir.bind(get_default=custom_get_default).get(module.obj)
-  'custom default?'
+  'custom default'
+  
+  CLASS_OR_MODULE scope directive on the module, with inheritance::
+  
+  >>> class mydir(martian.Directive):
+  ...     scope = CLASS_OR_MODULE
+  ...     store = ONCE
+  >>> class module_b(FakeModule):
+  ...     fake_module = True
+  ...     mydir('a value')
+  ...     class B(object):
+  ...         pass
+  >>> from martiantest.fake import module_b  
+  >>> class module_a(FakeModule):
+  ...     fake_module = True
+  ...     class A(module_b.B):
+  ...         pass
+  >>> from martiantest.fake import module_a
+  >>> mydir.bind(get_default=custom_get_default).get(module_a.A)
+  'a value'
+



More information about the Checkins mailing list