[Checkins] SVN: z3c.pt/trunk/src/z3c/pt/ - Properly detect package path from frame.f_globals in a doctest

Sidnei da Silva sidnei at enfoldsystems.com
Mon Apr 13 09:32:14 EDT 2009


Log message for revision 99148:
  - Properly detect package path from frame.f_globals in a doctest

Changed:
  U   z3c.pt/trunk/src/z3c/pt/README.txt
  U   z3c.pt/trunk/src/z3c/pt/pagetemplate.py

-=-
Modified: z3c.pt/trunk/src/z3c/pt/README.txt
===================================================================
--- z3c.pt/trunk/src/z3c/pt/README.txt	2009-04-13 11:06:23 UTC (rev 99147)
+++ z3c.pt/trunk/src/z3c/pt/README.txt	2009-04-13 13:32:13 UTC (rev 99148)
@@ -26,9 +26,7 @@
 The ``PageTemplateFile`` class is initialized with an absolute
 path to a template file on disk.
 
-  >>> from z3c.pt import tests
-  >>> path = tests.__path__[0]
-  >>> template_file = PageTemplateFile(path+'/helloworld.pt')
+  >>> template_file = PageTemplateFile('tests/helloworld.pt')
   >>> print template_file()
   <div xmlns="http://www.w3.org/1999/xhtml">
     Hello World!
@@ -51,7 +49,7 @@
   ...     def __init__(self):
   ...         self.response = Response()
 
-  >>> template_file = PageTemplateFile(path+'/helloworld.pt')
+  >>> template_file = PageTemplateFile('tests/helloworld.pt')
   >>> request = Request()
   >>> print request.response.getHeader('Content-Type')
   None
@@ -84,7 +82,7 @@
 A ``content_type`` can be also set at instantiation time, and it will
 be respected.
 
-  >>> template_file = PageTemplateFile(path+'/helloworld.pt',
+  >>> template_file = PageTemplateFile('tests/helloworld.pt',
   ...                                  content_type='application/rdf+xml')
 
   >>> request = Request()
@@ -108,7 +106,7 @@
   ...          Hello World!
   ...       </div>""")
   ...
-  ...     template_file = PageTemplateFile(path+'/helloworld.pt')
+  ...     template_file = PageTemplateFile('tests/helloworld.pt')
 
   >>> instance = MyClass()
   >>> print instance.template()
@@ -139,8 +137,10 @@
 As before, we can initialize view page templates with a string (here
 incidentally loaded from disk).
 
+  >>> from z3c.pt import tests
+  >>> path = tests.__path__[0]
   >>> template = ViewPageTemplate(
-  ...     open(path+'/view.pt').read())
+  ...     open(path + '/view.pt').read())
 
 To render the template in the context of a view, we bind the template
 passing the view as an argument (view page templates derive from the
@@ -158,7 +158,7 @@
 
 The exercise is similar for the file-based variant.
 
-  >>> template = ViewPageTemplateFile(path+'/view.pt')
+  >>> template = ViewPageTemplateFile('tests/view.pt')
   >>> print template.bind(view)(test=u'test')
   <div xmlns="http://www.w3.org/1999/xhtml">
     <span>view</span>
@@ -221,13 +221,13 @@
   >>> from z3c.pt.texttemplate import ViewTextTemplate
   >>> from z3c.pt.texttemplate import ViewTextTemplateFile
 
-  >>> template = ViewTextTemplate(open(path+'/view.css').read())
+  >>> template = ViewTextTemplate(open(path + '/view.css').read())
   >>> print template.bind(view)(color=u'#ccc')
   #region {
       background: #ccc;
   }
 
-  >>> template = ViewTextTemplateFile(path+'/view.css')
+  >>> template = ViewTextTemplateFile('tests/view.css')
   >>> print template.bind(view)(color=u'#ccc')
   #region {
       background: #ccc;
@@ -479,7 +479,7 @@
   ...         return 'view'
 
   >>> view = View()
-  >>> template = ViewPageTemplateFile(path+'/function_namespaces.pt')
+  >>> template = ViewPageTemplateFile('tests/function_namespaces.pt')
   >>> print template.bind(view)()
   <div xmlns="http://www.w3.org/1999/xhtml">
     <span>GRANDPA</span>

Modified: z3c.pt/trunk/src/z3c/pt/pagetemplate.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/pagetemplate.py	2009-04-13 11:06:23 UTC (rev 99147)
+++ z3c.pt/trunk/src/z3c/pt/pagetemplate.py	2009-04-13 13:32:13 UTC (rev 99148)
@@ -128,23 +128,27 @@
         if path is not None:
             filename = os.path.join(path, filename)
 
-        if not os.path.isabs(filename):	       
-            for depth in (1, 2):	       
-                frame = sys._getframe(depth)	 
-                package_name = frame.f_globals['__name__']	 
- 	 
-                if package_name != self.__module__:	 
-                    break	 
- 	 
-            module = sys.modules[package_name]
-            try:	 
-                path = module.__path__[0]	 
-            except AttributeError:	 
-                path = module.__file__	 
-                path = path[:path.rfind(os.sep)]	 
- 	 
-            filename = path + os.sep + filename
+        if not os.path.isabs(filename):
+            for depth in (1, 2):
+                frame = sys._getframe(depth)
+                package_name = frame.f_globals.get('__name__', None)
+                if package_name is not None and package_name != self.__module__:
+                    module = sys.modules[package_name]
+                    try:
+                        path = module.__path__[0]
+                    except AttributeError:
+                        path = module.__file__
+                        path = path[:path.rfind(os.sep)]
+                    break
+                else:
+                    package_path = frame.f_globals.get('__file__', None)
+                    if package_path is not None:
+                        path = os.path.dirname(package_path)
+                        break
 
+            if path is not None:
+                filename = os.path.join(path, filename)
+
         template.PageTemplateFile.__init__(
             self, filename, **kwargs)
 



More information about the Checkins mailing list