[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