[Checkins] SVN: manuel/branches/pwilson-try-fake-modules/src/manuel/fake_module.py Bug fixes arising for experimentation with fake modules mixed with

Paul Wilson paulalexwilson at gmail.com
Wed Oct 28 08:39:05 EDT 2009


Log message for revision 105323:
  Bug fixes arising for experimentation with fake modules mixed with
  regular doctests.
  
  Fixed:
    * Exception relating to not having the manueltest.fake modules 
      set up in sys.modules before exec'ing.
    * Now checking that the execute function operations on parsed
      regions that inherit from our FakeModule class.
  
  

Changed:
  U   manuel/branches/pwilson-try-fake-modules/src/manuel/fake_module.py

-=-
Modified: manuel/branches/pwilson-try-fake-modules/src/manuel/fake_module.py
===================================================================
--- manuel/branches/pwilson-try-fake-modules/src/manuel/fake_module.py	2009-10-28 10:23:58 UTC (rev 105322)
+++ manuel/branches/pwilson-try-fake-modules/src/manuel/fake_module.py	2009-10-28 12:39:04 UTC (rev 105323)
@@ -18,6 +18,9 @@
 
 def find_fakes(document):
     for region in document.find_regions(FAKE_MODULE_START, FAKE_MODULE_END):
+        if region.parsed:
+            continue
+
         module_name = region.start_match.group('module_name')
         # Sanitise indentation
         source = textwrap.dedent('\n'.join(region.source.splitlines()[1:]))
@@ -28,6 +31,9 @@
         region.parsed = FakeModuleSnippet(code, module_name)
 
 def execute_into_module(region, document, doc_globs):
+    if not isinstance(region.parsed, FakeModuleSnippet):
+        return
+
     # build a suitable module
     module_name = region.parsed.module_name
     full_module_name = MODULE_NS + "." + module_name
@@ -35,21 +41,22 @@
     module_name_parts = full_module_name.split('.')
     module.__file__ = '/' + '/'.join(module_name_parts)
 
-    exec region.parsed.code in module.__dict__
-
-    # Make the module visible and usable in the given name
-    doc_globs[module_name] =  module
-
     # Make the module also available through normal import
     if not MODULE_NS in sys.modules:
         sys.modules['manueltest'] = new.module('manueltest')
         sys.modules['manueltest.fake'] = new.module('manueltest.fake')
         sys.modules['manueltest'].fake = sys.modules['manueltest.fake']
 
+    exec region.parsed.code in module.__dict__
+    # XXX Do I want del module['__builtin__']??
+
+    # Make the module visible and usable in the given name
+    doc_globs[module_name] =  module
+
     sys.modules[full_module_name] = module
     setattr(sys.modules['manueltest.fake'], full_module_name.split('.')[-1],
             module)
 
 class Manuel(manuel.Manuel):
     def __init__(self):
-        manuel.Manuel.__init__(self, [find_modules], [execute_into_module])
+        manuel.Manuel.__init__(self, [find_fakes], [execute_into_module])



More information about the checkins mailing list