[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