[Checkins] SVN: Sandbox/nadako/zope.ptresource/ Upload code.
Dan Korostelev
nadako at gmail.com
Sun Aug 23 15:54:32 EDT 2009
Log message for revision 103117:
Upload code.
Changed:
_U Sandbox/nadako/zope.ptresource/
A Sandbox/nadako/zope.ptresource/CHANGES.txt
A Sandbox/nadako/zope.ptresource/README.txt
A Sandbox/nadako/zope.ptresource/bootstrap.py
A Sandbox/nadako/zope.ptresource/buildout.cfg
A Sandbox/nadako/zope.ptresource/setup.py
A Sandbox/nadako/zope.ptresource/src/
A Sandbox/nadako/zope.ptresource/src/zope/
A Sandbox/nadako/zope.ptresource/src/zope/__init__.py
A Sandbox/nadako/zope.ptresource/src/zope/ptresource/
A Sandbox/nadako/zope.ptresource/src/zope/ptresource/__init__.py
A Sandbox/nadako/zope.ptresource/src/zope/ptresource/configure.zcml
A Sandbox/nadako/zope.ptresource/src/zope/ptresource/ptresource.py
A Sandbox/nadako/zope.ptresource/src/zope/ptresource/tests.py
-=-
Property changes on: Sandbox/nadako/zope.ptresource
___________________________________________________________________
Added: svn:ignore
+ bin
coverage
develop-eggs
parts
.installed.cfg
Added: Sandbox/nadako/zope.ptresource/CHANGES.txt
===================================================================
--- Sandbox/nadako/zope.ptresource/CHANGES.txt (rev 0)
+++ Sandbox/nadako/zope.ptresource/CHANGES.txt 2009-08-23 19:54:32 UTC (rev 103117)
@@ -0,0 +1,11 @@
+=======
+CHANGES
+=======
+
+3.9.0 (unreleased)
+==================
+
+Initial release. This package was splitted off zope.app.publisher as a part
+of refactoring process. It's now a plugin for another package that was
+refactored from zope.app.publisher - zope.browserresource. See its
+documentation for more details.
Added: Sandbox/nadako/zope.ptresource/README.txt
===================================================================
--- Sandbox/nadako/zope.ptresource/README.txt (rev 0)
+++ Sandbox/nadako/zope.ptresource/README.txt 2009-08-23 19:54:32 UTC (rev 103117)
@@ -0,0 +1,11 @@
+========
+Overview
+========
+
+*This package is at present not reusable without depending on a large
+chunk of the Zope Toolkit and its assumptions. It is maintained by the*
+`Zope Toolkit project <http://docs.zope.org/zopetoolkit/>`_.
+
+This package provides a "page template" resource class, a resource which
+content is processed with Zope Page Templates engine before returning to
+client.
Added: Sandbox/nadako/zope.ptresource/bootstrap.py
===================================================================
--- Sandbox/nadako/zope.ptresource/bootstrap.py (rev 0)
+++ Sandbox/nadako/zope.ptresource/bootstrap.py 2009-08-23 19:54:32 UTC (rev 103117)
@@ -0,0 +1,52 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id$
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+ez = {}
+exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+ ).read() in ez
+ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+import pkg_resources
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+ cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+ os.P_WAIT, sys.executable, sys.executable,
+ '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
+ dict(os.environ,
+ PYTHONPATH=
+ ws.find(pkg_resources.Requirement.parse('setuptools')).location
+ ),
+ ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)
Property changes on: Sandbox/nadako/zope.ptresource/bootstrap.py
___________________________________________________________________
Added: svn:keywords
+ Id
Added: Sandbox/nadako/zope.ptresource/buildout.cfg
===================================================================
--- Sandbox/nadako/zope.ptresource/buildout.cfg (rev 0)
+++ Sandbox/nadako/zope.ptresource/buildout.cfg 2009-08-23 19:54:32 UTC (rev 103117)
@@ -0,0 +1,18 @@
+[buildout]
+develop = . ../zope.browserresource
+parts = test coverage-test coverage-report
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = zope.ptresource [test]
+
+[coverage-test]
+recipe = zc.recipe.testrunner
+eggs = zope.ptresource [test]
+defaults = ['--coverage', '../../coverage']
+
+[coverage-report]
+recipe = zc.recipe.egg
+eggs = z3c.coverage
+scripts = coverage=coverage-report
+arguments = ('coverage', 'coverage/report')
Added: Sandbox/nadako/zope.ptresource/setup.py
===================================================================
--- Sandbox/nadako/zope.ptresource/setup.py (rev 0)
+++ Sandbox/nadako/zope.ptresource/setup.py 2009-08-23 19:54:32 UTC (rev 103117)
@@ -0,0 +1,54 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""zope.ptresource setup
+"""
+from setuptools import setup, find_packages, Extension
+
+long_description = (open('README.txt').read() + '\n\n' +
+ open('CHANGES.txt').read())
+
+setup(name='zope.ptresource',
+ version = '3.9.0dev',
+ url='http://pypi.python.org/pypi/zope.ptresource/',
+ author='Zope Corporation and Contributors',
+ author_email='zope-dev at zope.org',
+ classifiers = ['Environment :: Web Environment',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: Zope Public License',
+ 'Programming Language :: Python',
+ 'Operating System :: OS Independent',
+ 'Topic :: Internet :: WWW/HTTP',
+ 'Framework :: Zope3',
+ ],
+ description='Page template resource plugin for zope.browserresource',
+ long_description=long_description,
+
+ packages=find_packages('src'),
+ package_dir={'': 'src'},
+
+ namespace_packages=['zope'],
+ include_package_data=True,
+ install_requires=['setuptools',
+ 'zope.browserresource',
+ 'zope.interface',
+ 'zope.pagetemplate',
+ 'zope.publisher',
+ 'zope.security[untrustedpython]',
+ ],
+ extras_require={
+ 'test': ['zope.testing'],
+ },
+
+ zip_safe = False,
+ )
Property changes on: Sandbox/nadako/zope.ptresource/setup.py
___________________________________________________________________
Added: svn:keywords
+ Id
Added: Sandbox/nadako/zope.ptresource/src/zope/__init__.py
===================================================================
--- Sandbox/nadako/zope.ptresource/src/zope/__init__.py (rev 0)
+++ Sandbox/nadako/zope.ptresource/src/zope/__init__.py 2009-08-23 19:54:32 UTC (rev 103117)
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
Property changes on: Sandbox/nadako/zope.ptresource/src/zope/__init__.py
___________________________________________________________________
Added: svn:keywords
+ Id
Property changes on: Sandbox/nadako/zope.ptresource/src/zope/ptresource/__init__.py
___________________________________________________________________
Added: svn:keywords
+ Id
Added: Sandbox/nadako/zope.ptresource/src/zope/ptresource/configure.zcml
===================================================================
--- Sandbox/nadako/zope.ptresource/src/zope/ptresource/configure.zcml (rev 0)
+++ Sandbox/nadako/zope.ptresource/src/zope/ptresource/configure.zcml 2009-08-23 19:54:32 UTC (rev 103117)
@@ -0,0 +1,28 @@
+<configure xmlns="http://namespaces.zope.org/zope">
+
+ <utility
+ name="pt"
+ component=".ptresource.PageTemplateResourceFactory"
+ provides=".interfaces.IResourceFactoryFactory"
+ />
+
+ <utility
+ name="zpt"
+ component=".ptresource.PageTemplateResourceFactory"
+ provides=".interfaces.IResourceFactoryFactory"
+ />
+
+ <utility
+ name="html"
+ component=".ptresource.PageTemplateResourceFactory"
+ provides=".interfaces.IResourceFactoryFactory"
+ />
+
+ <class class=".ptresource.PageTemplateResource">
+ <allow
+ interface="zope.publisher.interfaces.browser.IBrowserPublisher"
+ attributes="__call__"
+ />
+ </class>
+
+</configure>
Added: Sandbox/nadako/zope.ptresource/src/zope/ptresource/ptresource.py
===================================================================
--- Sandbox/nadako/zope.ptresource/src/zope/ptresource/ptresource.py (rev 0)
+++ Sandbox/nadako/zope.ptresource/src/zope/ptresource/ptresource.py 2009-08-23 19:54:32 UTC (rev 103117)
@@ -0,0 +1,91 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Page Template Resource
+
+$Id$
+"""
+
+from zope.interface import implements, classProvides
+from zope.pagetemplate.engine import TrustedAppPT
+from zope.pagetemplate.pagetemplatefile import PageTemplateFile
+from zope.publisher.browser import BrowserView
+from zope.publisher.interfaces import NotFound
+from zope.publisher.interfaces.browser import IBrowserPublisher
+
+from zope.browserresource.resource import Resource
+from zope.browserresource.interfaces import IResourceFactory
+from zope.browserresource.interfaces import IResourceFactoryFactory
+
+class PageTemplate(TrustedAppPT, PageTemplateFile):
+ """
+ Resource that is a page template
+ """
+
+ def __init__(self, filename, _prefix=None, content_type=None):
+ _prefix = self.get_path_from_prefix(_prefix)
+ super(PageTemplate, self).__init__(filename, _prefix)
+ if content_type is not None:
+ self.content_type = content_type
+
+ def pt_getContext(self, request, **kw):
+ namespace = super(PageTemplate, self).pt_getContext(**kw)
+ namespace['context'] = None
+ namespace['request'] = request
+ return namespace
+
+ def __call__(self, request, **keywords):
+ namespace = self.pt_getContext(
+ request=request,
+ options=keywords
+ )
+ return self.pt_render(namespace)
+
+class PageTemplateResource(BrowserView, Resource):
+
+ implements(IBrowserPublisher)
+
+ def publishTraverse(self, request, name):
+ '''See interface IBrowserPublisher'''
+ raise NotFound(None, name)
+
+ def browserDefault(self, request):
+ '''See interface IBrowserPublisher'''
+ return self, ()
+
+ def __call__(self):
+ # TODO: this method violates the IResource contract according to
+ # which, it sould return an absolute URL. Let's do something with
+ # it. Probably move the rendering code to another method and point
+ # to it with browserDefault. nadako, 23 Aug 2009
+ pt = self.context
+ response = self.request.response
+ if not response.getHeader("Content-Type"):
+ response.setHeader("Content-Type", pt.content_type)
+ return pt(self.request)
+
+class PageTemplateResourceFactory(object):
+
+ implements(IResourceFactory)
+ classProvides(IResourceFactoryFactory)
+
+ def __init__(self, path, checker, name):
+ self.__pt = PageTemplate(path)
+ self.__checker = checker
+ self.__name = name
+
+ def __call__(self, request):
+ resource = PageTemplateResource(self.__pt, request)
+ resource.__Security_checker__ = self.__checker
+ resource.__name__ = self.__name
+ return resource
Property changes on: Sandbox/nadako/zope.ptresource/src/zope/ptresource/ptresource.py
___________________________________________________________________
Added: svn:keywords
+ Id
Added: Sandbox/nadako/zope.ptresource/src/zope/ptresource/tests.py
===================================================================
--- Sandbox/nadako/zope.ptresource/src/zope/ptresource/tests.py (rev 0)
+++ Sandbox/nadako/zope.ptresource/src/zope/ptresource/tests.py 2009-08-23 19:54:32 UTC (rev 103117)
@@ -0,0 +1,72 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Page Template based Resources Test
+
+$Id$
+"""
+import os
+import tempfile
+import unittest
+
+from zope.component import provideAdapter
+from zope.publisher.browser import TestRequest
+from zope.publisher.interfaces import NotFound
+from zope.security.checker import NamesChecker
+from zope.testing import cleanup
+from zope.traversing.adapters import DefaultTraversable
+from zope.traversing.interfaces import ITraversable
+
+from zope.ptresource.ptresource import PageTemplateResourceFactory
+
+
+checker = NamesChecker(('__call__', 'request', 'publishTraverse'))
+
+
+class Test(cleanup.CleanUp, unittest.TestCase):
+
+ def setUp(self):
+ super(Test, self).setUp()
+ provideAdapter(DefaultTraversable, (None,), ITraversable)
+
+ def createTestFile(self, contents):
+ fd, path = tempfile.mkstemp()
+ os.close(fd)
+ open(path, 'w').write(contents)
+ return path
+
+ def testNoTraversal(self):
+ path = self.createTestFile('<html><body><p>test</p></body></html>')
+ request = TestRequest()
+ factory = PageTemplateResourceFactory(path, checker, 'test.pt')
+ resource = factory(request)
+ self.assertRaises(NotFound, resource.publishTraverse,
+ resource.request, ())
+ os.unlink(path)
+
+ def testCall(self):
+ path = self.createTestFile(
+ '<html><body tal:content="request/test_data"></body></html>')
+ test_data = "Foobar"
+ request = TestRequest(test_data=test_data)
+ factory = PageTemplateResourceFactory(path, checker, 'testresource.pt')
+ resource = factory(request)
+ self.assertEquals(resource(),
+ '<html><body>%s</body></html>' % test_data)
+ self.assertEquals('text/html',
+ request.response.getHeader('Content-Type'))
+ os.unlink(path)
+
+
+def test_suite():
+ return unittest.makeSuite(Test)
Property changes on: Sandbox/nadako/zope.ptresource/src/zope/ptresource/tests.py
___________________________________________________________________
Added: svn:keywords
+ Id
More information about the Checkins
mailing list