[Checkins] SVN: Sandbox/nadako/zope.app.publisher/ Refactor zope.app.publisher to use zope.browserresource
Dan Korostelev
nadako at gmail.com
Mon Aug 24 08:28:20 EDT 2009
Log message for revision 103143:
Refactor zope.app.publisher to use zope.browserresource
Changed:
A Sandbox/nadako/zope.app.publisher/
U Sandbox/nadako/zope.app.publisher/buildout.cfg
U Sandbox/nadako/zope.app.publisher/setup.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/configure.zcml
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/directoryresource.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/fileresource.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/i18nfileresource.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/i18nresourcemeta.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/icon.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/meta.zcml
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/metadirectives.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/pagetemplateresource.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/resource.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/resourcemeta.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/resources.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_directives.py
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_directoryresource.py
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_fileresource.py
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_icondirective.py
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_pagetemplateresource.py
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_resource.py
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_resources.py
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/png
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/subdir/
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/test.gif
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/test.txt
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/testresource.pt
D Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testi18nfileresource.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/fileresource.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/interfaces/__init__.py
U Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/pagetemplateresource.py
-=-
Modified: Sandbox/nadako/zope.app.publisher/buildout.cfg
===================================================================
--- zope.app.publisher/trunk/buildout.cfg 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/buildout.cfg 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,5 +1,5 @@
[buildout]
-develop = .
+develop = . ../zope.browserresource ../zope.ptresource
parts = test coverage-test coverage-report
[test]
Modified: Sandbox/nadako/zope.app.publisher/setup.py
===================================================================
--- zope.app.publisher/trunk/setup.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/setup.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -58,6 +58,8 @@
'zope.componentvocabulary',
'zope.browser',
'zope.app.pagetemplate',
+ 'zope.browserresource',
+ 'zope.ptresource',
],
extras_require={
'test': ['zope.testing',
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/configure.zcml
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/configure.zcml 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/configure.zcml 2009-08-24 12:28:19 UTC (rev 103143)
@@ -3,6 +3,9 @@
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:zcml="http://namespaces.zope.org/zcml">
+ <include package="zope.browserresource" />
+ <include package="zope.ptresource" />
+
<adapter
factory=".ModifiableBrowserLanguages"
for="zope.publisher.interfaces.http.IHTTPRequest"
@@ -37,38 +40,6 @@
/>
</class>
-<class class="zope.app.publisher.browser.fileresource.FileResource">
- <allow interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
- <allow attributes="GET HEAD __call__" />
-</class>
-
-<class class="zope.app.publisher.browser.i18nfileresource.I18nFileResource">
- <allow interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
- <allow attributes="GET HEAD __call__" />
-</class>
-
-<class class=".pagetemplateresource.PageTemplateResource">
- <allow interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
- <allow attributes="__call__" />
-</class>
-
-<class class=".directoryresource.DirectoryResource">
- <allow interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
- <allow attributes="get __getitem__" />
-</class>
-
-<adapter
- factory=".resource.AbsoluteURL"
- />
-
-<browser:page
- name=""
- for="zope.location.interfaces.ISite"
- class="zope.app.publisher.browser.resources.Resources"
- permission="zope.Public"
- allowed_interface="zope.publisher.interfaces.browser.IBrowserPublisher"
- />
-
<!-- Management view selector -->
<!-- Get first accessible item from zmi_views menu -->
<browser:page
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/directoryresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/directoryresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/directoryresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -23,97 +23,6 @@
$Id$
"""
-import os
-import posixpath
-
-from zope.interface import implements
-from zope.publisher.interfaces import NotFound
-from zope.publisher.browser import BrowserView
-from zope.publisher.interfaces.browser import IBrowserPublisher
-
-from zope.app.publisher.browser.resource import Resource
-
-from fileresource import FileResourceFactory, ImageResourceFactory
-from pagetemplateresource import PageTemplateResourceFactory
-from resources import empty
-
-_marker = object()
-
-# we only need this class as a context for DirectoryResource
-class Directory(object):
-
- def __init__(self, path, checker, name):
- self.path = path
- self.checker = checker
- self.__name__ = name
-
-class DirectoryResource(BrowserView, Resource):
-
- implements(IBrowserPublisher)
-
- resource_factories = {
- '.gif': ImageResourceFactory,
- '.png': ImageResourceFactory,
- '.jpg': ImageResourceFactory,
- '.pt': PageTemplateResourceFactory,
- '.zpt': PageTemplateResourceFactory,
- '.html': PageTemplateResourceFactory,
- }
-
- default_factory = FileResourceFactory
- directory_factory = None
-
- def publishTraverse(self, request, name):
- '''See interface IBrowserPublisher'''
- return self.get(name)
-
- def browserDefault(self, request):
- '''See interface IBrowserPublisher'''
- return empty, ()
-
- def __getitem__(self, name):
- res = self.get(name, None)
- if res is None:
- raise KeyError(name)
- return res
-
- def get(self, name, default=_marker):
- path = self.context.path
- filename = os.path.join(path, name)
- isfile = os.path.isfile(filename)
- isdir = os.path.isdir(filename)
-
- if not (isfile or isdir):
- if default is _marker:
- raise NotFound(None, name)
- return default
-
- if isfile:
- ext = os.path.splitext(os.path.normcase(name))[1]
- factory = self.resource_factories.get(ext, self.default_factory)
- else:
- factory = self.directory_factory
-
- rname = posixpath.join(self.__name__, name)
- resource = factory(filename, self.context.checker, rname)(self.request)
- resource.__parent__ = self
- return resource
-
-
-class DirectoryResourceFactory(object):
-
- factoryClass = DirectoryResource
-
- def __init__(self, path, checker, name):
- self.__dir = Directory(path, checker, name)
- self.__checker = checker
- self.__name = name
-
- def __call__(self, request):
- resource = self.factoryClass(self.__dir, request)
- resource.__Security_checker__ = self.__checker
- resource.__name__ = self.__name
- return resource
-
-
-DirectoryResource.directory_factory = DirectoryResourceFactory
+# BBB imports
+from zope.browserresource.directory import Directory, DirectoryResource
+from zope.browserresource.directory import DirectoryResourceFactory
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/fileresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/fileresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/fileresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,133 +15,7 @@
$Id$
"""
-
-import time
-from zope.interface import implements
-from zope.datetime import time as timeFromDateTimeString
-from zope.publisher.interfaces import NotFound
-from zope.publisher.interfaces.browser import IBrowserPublisher
-from zope.publisher.browser import BrowserView
-
-from zope.app.publisher.fileresource import File, Image
-from zope.app.publisher.browser.resource import Resource
-
-class FileResource(BrowserView, Resource):
-
- implements(IBrowserPublisher)
-
- cacheTimeout = 86400
-
- def publishTraverse(self, request, name):
- '''See interface IBrowserPublisher'''
- raise NotFound(None, name)
-
- def browserDefault(self, request):
- '''See interface IBrowserPublisher'''
- return getattr(self, request.method), ()
-
- #
- ############################################################
-
- # for unit tests
- def _testData(self):
- f = open(self.context.path, 'rb')
- data = f.read()
- f.close()
- return data
-
-
- def chooseContext(self):
- """Choose the appropriate context"""
- return self.context
-
-
- def GET(self):
- """Default document"""
-
- file = self.chooseContext()
- request = self.request
- response = request.response
-
- setCacheControl(response, self.cacheTimeout)
-
- # HTTP If-Modified-Since header handling. This is duplicated
- # from OFS.Image.Image - it really should be consolidated
- # somewhere...
- header = request.getHeader('If-Modified-Since', None)
- if header is not None:
- header = header.split(';')[0]
- # Some proxies seem to send invalid date strings for this
- # header. If the date string is not valid, we ignore it
- # rather than raise an error to be generally consistent
- # with common servers such as Apache (which can usually
- # understand the screwy date string as a lucky side effect
- # of the way they parse it).
- try: mod_since=long(timeFromDateTimeString(header))
- except: mod_since=None
- if mod_since is not None:
- if getattr(file, 'lmt', None):
- last_mod = long(file.lmt)
- else:
- last_mod = long(0)
- if last_mod > 0 and last_mod <= mod_since:
- response.setStatus(304)
- return ''
-
- response.setHeader('Content-Type', file.content_type)
- response.setHeader('Last-Modified', file.lmh)
-
- f = open(file.path,'rb')
- data = f.read()
- f.close()
-
- return data
-
- def HEAD(self):
- file = self.chooseContext()
- response = self.request.response
- response.setHeader('Content-Type', file.content_type)
- response.setHeader('Last-Modified', file.lmh)
- setCacheControl(response, self.cacheTimeout)
- return ''
-
-
-def setCacheControl(response, secs=86400):
- # Cache for one day by default
- response.setHeader('Cache-Control', 'public,max-age=%s' % secs)
- t = time.time() + secs
- response.setHeader('Expires',
- time.strftime("%a, %d %b %Y %H:%M:%S GMT",
- time.gmtime(t)))
-
-
-class FileResourceFactory(object):
-
- resourceClass = FileResource
-
- def __init__(self, path, checker, name):
- self.__file = File(path, name)
- self.__checker = checker
- self.__name = name
-
- def __call__(self, request):
- resource = self.resourceClass(self.__file, request)
- resource.__Security_checker__ = self.__checker
- resource.__name__ = self.__name
- return resource
-
-
-class ImageResourceFactory(object):
-
- resourceClass = FileResource
-
- def __init__(self, path, checker, name):
- self.__file = Image(path, name)
- self.__checker = checker
- self.__name = name
-
- def __call__(self, request):
- resource = self.resourceClass(self.__file, request)
- resource.__Security_checker__ = self.__checker
- resource.__name__ = self.__name
- return resource
+# BBB imports
+from zope.browserresource.file import FileResource, setCacheControl
+from zope.browserresource.file import FileResourceFactory
+ImageResourceFactory = FileResourceFactory
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/i18nfileresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/i18nfileresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/i18nfileresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,75 +15,6 @@
$Id$
"""
-from zope.publisher.interfaces.browser import IBrowserPublisher
-
-from zope.app.publisher.browser.fileresource import FileResource
-
-from zope.i18n.negotiator import negotiator
-from zope.i18n.interfaces import II18nAware
-from zope.interface import implements
-
-
-class I18nFileResource(FileResource):
-
- implements(IBrowserPublisher, II18nAware)
-
- def __init__(self, data, request, defaultLanguage='en'):
- """Creates an internationalized file resource. data should be
- a mapping from languages to File or Image objects.
- """
- self._data = data
- self.request = request
- self.defaultLanguage = defaultLanguage
-
-
- def chooseContext(self):
- """Choose the appropriate context according to language"""
- langs = self.getAvailableLanguages()
- language = negotiator.getLanguage(langs, self.request)
- try:
- return self._data[language]
- except KeyError:
- return self._data[self.defaultLanguage]
-
-
- # for unit tests
- def _testData(self, language):
- file = self._data[language]
- f=open(file.path,'rb')
- data=f.read()
- f.close()
- return data
-
-
- ############################################################
- # Implementation methods for interface
- # II18nAware.py
-
- def getDefaultLanguage(self):
- 'See II18nAware'
- return self.defaultLanguage
-
- def setDefaultLanguage(self, language):
- 'See II18nAware'
- if not self._data.has_key(language):
- raise ValueError(
- 'cannot set nonexistent language (%s) as default' % language)
- self.defaultLanguage = language
-
- def getAvailableLanguages(self):
- 'See II18nAware'
- return self._data.keys()
-
- #
- ############################################################
-
-
-class I18nFileResourceFactory(object):
-
- def __init__(self, data, defaultLanguage):
- self.__data = data
- self.__defaultLanguage = defaultLanguage
-
- def __call__(self, request):
- return I18nFileResource(self.__data, request, self.__defaultLanguage)
+# BBB imports
+from zope.browserresource.i18nfile import I18nFileResource
+from zope.browserresource.i18nfile import I18nFileResourceFactory
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/i18nresourcemeta.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/i18nresourcemeta.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/i18nresourcemeta.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,108 +15,4 @@
$Id$
"""
-from zope.configuration.exceptions import ConfigurationError
-from zope.interface import Interface
-from zope.publisher.interfaces.browser import IBrowserRequest
-from zope.publisher.interfaces.browser import IDefaultBrowserLayer
-from zope.security.proxy import Proxy
-from zope.security.checker import CheckerPublic, Checker
-from zope.component.zcml import handler
-
-from zope.app.publisher.fileresource import File, Image
-from zope.app.publisher.browser.i18nfileresource import I18nFileResourceFactory
-
-
-class I18nResource(object):
-
- type = IBrowserRequest
- default_allowed_attributes = '__call__'
-
- def __init__(self, _context, name=None, defaultLanguage='en',
- layer=IDefaultBrowserLayer, permission=None):
- self._context = _context
- self.name = name
- self.defaultLanguage = defaultLanguage
- self.layer = layer
- self.permission = permission
- self.__data = {}
- self.__format = None
-
- def translation(self, _context, language, file=None, image=None):
-
- if file is not None and image is not None:
- raise ConfigurationError(
- "Can't use more than one of file, and image "
- "attributes for resource directives"
- )
- elif file is not None:
- if self.__format is not None and self.__format != File:
- raise ConfigurationError(
- "Can't use both files and images in the same "
- "i18n-resource directive"
- )
- self.__data[language] = File(_context.path(file), self.name)
- self.__format = File
- elif image is not None:
- if self.__format is not None and self.__format != Image:
- raise ConfigurationError(
- "Can't use both files and images in the same "
- "i18n-resource directive"
- )
- self.__data[language] = Image(_context.path(image), self.name)
- self.__format = Image
- else:
- raise ConfigurationError(
- "At least one of the file, and image "
- "attributes for resource directives must be specified"
- )
-
- return ()
-
-
- def __call__(self, require = None):
- if self.name is None:
- return ()
-
- if not self.__data.has_key(self.defaultLanguage):
- raise ConfigurationError(
- "A translation for the default language (%s) "
- "must be specified" % self.defaultLanguage
- )
-
- permission = self.permission
- factory = I18nFileResourceFactory(self.__data, self.defaultLanguage)
-
- if permission:
- if require is None:
- require = {}
-
- if permission == 'zope.Public':
- permission = CheckerPublic
-
- if require:
- checker = Checker(require)
-
- factory = self._proxyFactory(factory, checker)
-
- self._context.action(
- discriminator = ('i18n-resource', self.name, self.type, self.layer),
- callable = handler,
- args = ('registerAdapter',
- factory, (self.layer,), Interface, self.name,
- self._context.info)
- )
-
-
- def _proxyFactory(self, factory, checker):
- def proxyView(request,
- factory=factory, checker=checker):
- resource = factory(request)
-
- # We need this in case the resource gets unwrapped and
- # needs to be rewrapped
- resource.__Security_checker__ = checker
-
- return Proxy(resource, checker)
-
- return proxyView
+from zope.browserresource.metaconfigure import I18nResource # BBB import
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/icon.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/icon.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/icon.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,100 +15,6 @@
$Id$
"""
-import os
-import re
-
-from zope.interface import Interface
-from zope.publisher.interfaces.browser import IDefaultBrowserLayer
-from zope.configuration.exceptions import ConfigurationError
-from zope.traversing.namespace import getResource
-from zope.component.interface import provideInterface
-from zope.component.zcml import handler
-
-from zope.app.publisher.browser import metaconfigure
-
-IName = re.compile('I[A-Z][a-z]')
-
-class IconView(object):
-
- def __init__(self, context, request, rname, alt, width, height):
- self.context = context
- self.request = request
- self.rname = rname
- self.alt = alt
- self.width = width
- self.height = height
-
- def __call__(self):
- # The context is important here, since it becomes the parent of the
- # icon, which is needed to generate the absolute URL.
- resource = getResource(self.context, self.rname, self.request)
- src = resource()
-
- return ('<img src="%s" alt="%s" width="%s" height="%s" border="0" />'
- % (src, self.alt, self.width, self.height))
-
- def url(self):
- resource = getResource(self.context, self.rname, self.request)
- src = resource()
- return src
-
-class IconViewFactory(object):
-
- def __init__(self, rname, alt, width, height):
- self.rname = rname
- self.alt = alt
- self.width = width
- self.height = height
-
- def __call__(self, context, request):
- return IconView(context, request, self.rname, self.alt,
- self.width, self.height)
-
-def IconDirective(_context, name, for_, file=None, resource=None,
- layer=IDefaultBrowserLayer, title=None,
- width=16, height=16):
-
- iname = for_.getName()
-
- if title is None:
- title = iname
- if IName.match(title):
- title = title[1:] # Remove leading 'I'
-
- if file is not None and resource is not None:
- raise ConfigurationError(
- "Can't use more than one of file, and resource "
- "attributes for icon directives"
- )
- elif file is not None:
- resource = '-'.join(for_.__module__.split('.'))
- resource = "%s-%s-%s" % (resource, iname, name)
- ext = os.path.splitext(file)[1]
- if ext:
- resource += ext
- metaconfigure.resource(_context, image=file,
- name=resource, layer=layer)
- elif resource is None:
- raise ConfigurationError(
- "At least one of the file, and resource "
- "attributes for resource directives must be specified"
- )
-
- vfactory = IconViewFactory(resource, title, width, height)
-
- _context.action(
- discriminator = ('view', name, vfactory, layer),
- callable = handler,
- args = ('registerAdapter',
- vfactory, (for_, layer), Interface, name, _context.info)
- )
-
- _context.action(
- discriminator = None,
- callable = provideInterface,
- args = (for_.__module__+'.'+for_.getName(),
- for_)
- )
-
-
+# BBB imports
+from zope.browserresource.icon import IconView, IconViewFactory
+from zope.browserresource.metaconfigure import icon as IconDirective
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/meta.zcml
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/meta.zcml 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/meta.zcml 2009-08-24 12:28:19 UTC (rev 103143)
@@ -3,6 +3,8 @@
xmlns:meta="http://namespaces.zope.org/meta"
xmlns:zcml="http://namespaces.zope.org/zcml">
+ <include package="zope.browserresource" file="meta.zcml" />
+
<meta:directives namespace="http://namespaces.zope.org/browser">
<!-- browser menus -->
@@ -99,34 +101,6 @@
</meta:complexDirective>
- <!-- browser resources -->
-
- <meta:directive
- name="resource"
- schema=".metadirectives.IResourceDirective"
- handler=".metaconfigure.resource"
- />
-
- <meta:directive
- name="resourceDirectory"
- schema=".metadirectives.IResourceDirectoryDirective"
- handler=".metaconfigure.resourceDirectory"
- />
-
- <meta:complexDirective
- name="i18n-resource"
- schema=".metadirectives.II18nResourceDirective"
- handler=".metaconfigure.I18nResource"
- >
-
- <meta:subdirective
- name="translation"
- schema=".metadirectives.II18nResourceTranslationSubdirective"
- />
-
- </meta:complexDirective>
-
-
<!-- misc. directives -->
<meta:directive
@@ -135,12 +109,6 @@
handler=".metaconfigure.defaultSkin"
/>
- <meta:directive
- name="icon"
- schema=".metadirectives.IIconDirective"
- handler=".icon.IconDirective"
- />
-
</meta:directives>
</configure>
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/metadirectives.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/metadirectives.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/metadirectives.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -26,6 +26,15 @@
from zope.component.zcml import IBasicViewInformation
from zope.app.publisher.browser.fields import MenuField
+# BBB imports
+from zope.browserresource.metadirectives import (
+ IBasicResourceInformation,
+ IResourceDirective,
+ II18nResourceDirective,
+ II18nResourceTranslationSubdirective,
+ IResourceDirectoryDirective
+)
+
#
# browser views
#
@@ -216,151 +225,7 @@
and/or class and registers it.
"""
-
#
-# browser resources
-#
-
-class IBasicResourceInformation(Interface):
- """
- This is the basic information for all browser resources.
- """
-
- layer = GlobalInterface(
- title=u"The layer the resource should be found in",
- description=u"""
- For information on layers, see the documentation for the skin
- directive. Defaults to "default".""",
- required=False
- )
-
- permission = Permission(
- title=u"The permission needed to access the resource.",
- description=u"""
- If a permission isn't specified, the resource will always be
- accessible.""",
- required=False
- )
-
-class IResourceDirective(IBasicResourceInformation):
- """
- Defines a browser resource
- """
-
- name = TextLine(
- title=u"The name of the resource",
- description=u"""
- This is the name used in resource urls. Resource urls are of
- the form site/@@/resourcename, where site is the url of
- "site", a folder with a site manager.
-
- We make resource urls site-relative (as opposed to
- content-relative) so as not to defeat caches.""",
- required=True
- )
-
- factory = GlobalObject(
- title=u"Resource Factory",
- description=u"The factory used to create the resource. The factory "
- u"should only expect to get the request passed when "
- u"called.",
- required=False
- )
-
- file = Path(
- title=u"File",
- description=u"The file containing the resource data.",
- required=False
- )
-
- image = Path(
- title=u"Image",
- description=u"""
- If the image attribute is used, then an image resource, rather
- than a file resource will be created.""",
- required=False
- )
-
- template = Path(
- title=u"Template",
- description=u"""
- If the template attribute is used, then a page template resource,
- rather than a file resource will be created.""",
- required=False
- )
-
-class II18nResourceDirective(IBasicResourceInformation):
- """
- Defines an i18n'd resource.
- """
-
- name = TextLine(
- title=u"The name of the resource",
- description=u"""
- This is the name used in resource urls. Resource urls are of
- the form site/@@/resourcename, where site is the url of
- "site", a folder with a site manager.
-
- We make resource urls site-relative (as opposed to
- content-relative) so as not to defeat caches.""",
- required=True
- )
-
- defaultLanguage = TextLine(
- title=u"Default language",
- description=u"Defines the default language",
- required=False
- )
-
-class II18nResourceTranslationSubdirective(IBasicResourceInformation):
- """
- Subdirective to II18nResourceDirective.
- """
-
- language = TextLine(
- title=u"Language",
- description=u"Language of this translation of the resource",
- required=True
- )
-
- file = Path(
- title=u"File",
- description=u"The file containing the resource data.",
- required=False
- )
-
- image = Path(
- title=u"Image",
- description=u"""
- If the image attribute is used, then an image resource, rather
- than a file resource will be created.""",
- required=False
- )
-
-class IResourceDirectoryDirective(IBasicResourceInformation):
- """
- Defines a directory containing browser resource
- """
-
- name = TextLine(
- title=u"The name of the resource",
- description=u"""
- This is the name used in resource urls. Resource urls are of
- the form site/@@/resourcename, where site is the url of
- "site", a folder with a site manager.
-
- We make resource urls site-relative (as opposed to
- content-relative) so as not to defeat caches.""",
- required=True
- )
-
- directory = Path(
- title=u"Directory",
- description=u"The directory containing the resource data.",
- required=True
- )
-
-#
# browser menus
#
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/pagetemplateresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/pagetemplateresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/pagetemplateresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,43 +15,6 @@
$Id$
"""
-
-from zope.interface import implements
-from zope.publisher.interfaces import NotFound
-from zope.publisher.browser import BrowserView
-from zope.publisher.interfaces.browser import IBrowserPublisher
-
-from zope.app.publisher.pagetemplateresource import PageTemplate
-from zope.app.publisher.browser.resource import Resource
-
-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):
- 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):
-
- 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
+# BBB imports
+from zope.ptresource.ptresource import PageTemplateResource
+from zope.ptresource.ptresource import PageTemplateResourceFactory
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/resource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/resource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/resource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,48 +15,4 @@
$Id$
"""
-from zope.app.publisher.interfaces import IResource
-from zope.component import adapts
-from zope.component import getMultiAdapter
-from zope.component import queryMultiAdapter
-from zope.interface import implements, implementsOnly
-from zope.location import Location
-from zope.publisher.interfaces.browser import IBrowserRequest
-from zope.site.hooks import getSite
-from zope.traversing.browser.interfaces import IAbsoluteURL
-import zope.traversing.browser.absoluteurl
-
-class Resource(Location):
-
- implements(IResource)
-
- def __init__(self, request):
- self.request = request
-
- def __call__(self):
- return str(getMultiAdapter((self, self.request), IAbsoluteURL))
-
-
-class AbsoluteURL(zope.traversing.browser.absoluteurl.AbsoluteURL):
-
- implementsOnly(IAbsoluteURL)
- adapts(IResource, IBrowserRequest)
-
- def __init__(self, context, request):
- self.context = context
- self.request = request
-
- def __str__(self):
- name = self.context.__name__
- if name.startswith('++resource++'):
- name = name[12:]
-
- site = getSite()
- base = queryMultiAdapter((site, self.request), IAbsoluteURL,
- name="resource")
- if base is None:
- url = str(getMultiAdapter((site, self.request), IAbsoluteURL))
- else:
- url = str(base)
-
- return "%s/@@/%s" % (url, name)
+from zope.browserresource.resource import Resource, AbsoluteURL # BBB imports
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/resourcemeta.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/resourcemeta.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/resourcemeta.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,87 +15,10 @@
$Id$
"""
-import os
-
-from zope.configuration.exceptions import ConfigurationError
-from zope.interface import Interface
-from zope.publisher.interfaces.browser import IBrowserRequest
-from zope.publisher.interfaces.browser import IDefaultBrowserLayer
-from zope.security.checker import CheckerPublic, NamesChecker
-from zope.component.zcml import handler
-
-from fileresource import FileResourceFactory, ImageResourceFactory
-from pagetemplateresource import PageTemplateResourceFactory
-from directoryresource import DirectoryResourceFactory
-
-allowed_names = ('GET', 'HEAD', 'publishTraverse', 'browserDefault',
- 'request', '__call__')
-
-class ResourceFactoryWrapper(object):
-
- def __init__(self, factory, checker, name):
- self.__factory = factory
- self.__checker = checker
- self.__name = name
-
- def __call__(self, request):
- resource = self.__factory(request)
- resource.__Security_checker__ = self.__checker
- resource.__name__ = self.__name
- return resource
-
-
-def resource(_context, name, layer=IDefaultBrowserLayer,
- permission='zope.Public', factory=None,
- file=None, image=None, template=None):
-
- if permission == 'zope.Public':
- permission = CheckerPublic
-
- checker = NamesChecker(allowed_names, permission)
-
- if (factory and (file or image or template)) or \
- (file and (factory or image or template)) or \
- (image and (factory or file or template)) or \
- (template and (factory or file or image)):
- raise ConfigurationError(
- "Must use exactly one of factory or file or image or template"
- " attributes for resource directives"
- )
-
- if factory is not None:
- factory = ResourceFactoryWrapper(factory, checker, name)
- elif file:
- factory = FileResourceFactory(file, checker, name)
- elif image:
- factory = ImageResourceFactory(image, checker, name)
- else:
- factory = PageTemplateResourceFactory(template, checker, name)
-
- _context.action(
- discriminator = ('resource', name, IBrowserRequest, layer),
- callable = handler,
- args = ('registerAdapter',
- factory, (layer,), Interface, name, _context.info),
- )
-
-def resourceDirectory(_context, name, directory, layer=IDefaultBrowserLayer,
- permission='zope.Public'):
- if permission == 'zope.Public':
- permission = CheckerPublic
-
- checker = NamesChecker(allowed_names + ('__getitem__', 'get'),
- permission)
-
- if not os.path.isdir(directory):
- raise ConfigurationError(
- "Directory %s does not exist" % directory
- )
-
- factory = DirectoryResourceFactory(directory, checker, name)
- _context.action(
- discriminator = ('resource', name, IBrowserRequest, layer),
- callable = handler,
- args = ('registerAdapter',
- factory, (layer,), Interface, name, _context.info),
- )
+# BBB imports
+from zope.browserresource.metaconfigure import (
+ allowed_names,
+ ResourceFactoryWrapper,
+ resource,
+ resourceDirectory
+)
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/resources.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/resources.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/resources.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,37 +15,5 @@
$Id$
"""
-import zope.component
-from zope.publisher.interfaces.browser import IBrowserPublisher
-from zope.publisher.interfaces import NotFound
-from zope.publisher.browser import BrowserView
-from zope.interface import implements
-from zope.location import locate
-class Resources(BrowserView):
- """Provide a URL-accessible resource namespace
- """
-
- implements(IBrowserPublisher)
-
- def publishTraverse(self, request, name):
- '''See interface IBrowserPublisher'''
-
- resource = zope.component.queryAdapter(request, name=name)
- if resource is None:
- raise NotFound(self, name)
-
- sm = zope.component.getSiteManager()
- locate(resource, sm, name)
- return resource
-
- def browserDefault(self, request):
- '''See IBrowserPublisher'''
- return empty, ()
-
- def __getitem__(self, name):
- return self.publishTraverse(self.request, name)
-
-
-def empty():
- return ''
+from zope.browserresource.resources import Resources, empty # BBB imports
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_directives.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/test_directives.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_directives.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -370,32 +370,6 @@
'test')
- def testSkinResource(self):
- self.assertEqual(
- component.queryAdapter(Request(IV), name='test'), None)
-
- xmlconfig(StringIO(template % (
- '''
- <browser:resource
- name="test"
- factory="zope.component.testfiles.views.RZMI"
- layer="
- zope.app.publisher.browser.tests.test_directives.ITestLayer"
- />
- <browser:resource
- name="test"
- factory="zope.component.testfiles.views.R1"
- />
- '''
- )))
-
- self.assertEqual(
- component.queryAdapter(request, name='test').__class__, R1)
- self.assertEqual(
- component.queryAdapter(
- TestRequest(skin=ITestSkin), name='test').__class__,
- RZMI)
-
def testDefaultSkin(self):
request = TestRequest()
self.assertEqual(
@@ -468,50 +442,7 @@
(ob, TestRequest(skin=ITestSkin)), name='test')
self.assert_(issubclass(v.__class__, VZMI))
- def testI18nResource(self):
- self.assertEqual(component.queryAdapter(request, name='test'), None)
- path1 = os.path.join(tests_path, 'testfiles', 'test.pt')
- path2 = os.path.join(tests_path, 'testfiles', 'test2.pt')
-
- xmlconfig(StringIO(template % (
- '''
- <browser:i18n-resource name="test" defaultLanguage="fr">
- <browser:translation language="en" file="%s" />
- <browser:translation language="fr" file="%s" />
- </browser:i18n-resource>
- ''' % (path1, path2)
- )))
-
- v = component.getAdapter(request, name='test')
- self.assertEqual(
- component.queryAdapter(request, name='test').__class__,
- I18nFileResource)
- self.assertEqual(v._testData('en'), open(path1, 'rb').read())
- self.assertEqual(v._testData('fr'), open(path2, 'rb').read())
-
- # translation must be provided for the default language
- config = StringIO(template % (
- '''
- <browser:i18n-resource name="test" defaultLanguage="fr">
- <browser:translation language="en" file="%s" />
- <browser:translation language="lt" file="%s" />
- </browser:i18n-resource>
- ''' % (path1, path2)
- ))
- self.assertRaises(ConfigurationError, xmlconfig, config)
-
- # files and images can't be mixed
- config = StringIO(template % (
- '''
- <browser:i18n-resource name="test" defaultLanguage="fr">
- <browser:translation language="en" file="%s" />
- <browser:translation language="fr" image="%s" />
- </browser:i18n-resource>
- ''' % (path1, path2)
- ))
- self.assertRaises(ConfigurationError, xmlconfig, config)
-
def testInterfaceProtectedPage(self):
xmlconfig(StringIO(template %
'''
@@ -962,77 +893,7 @@
name='index.html')
self.assertEqual(v(), 'done')
- def testFactory(self):
- self.assertEqual(
- component.queryAdapter(request, name='index.html'), None)
- xmlconfig(StringIO(template %
- '''
- <browser:resource
- name="index.html"
- factory="
- zope.app.publisher.browser.tests.test_directives.MyResource"
- />
- '''
- ))
-
- r = component.getAdapter(request, name='index.html')
- self.assertEquals(r.__class__, MyResource)
- r = ProxyFactory(r)
- self.assertEqual(r.__name__, "index.html")
-
- def testFile(self):
- path = os.path.join(tests_path, 'testfiles', 'test.pt')
-
- self.assertEqual(component.queryAdapter(request, name='test'), None)
-
- xmlconfig(StringIO(template %
- '''
- <browser:resource
- name="index.html"
- file="%s"
- />
- ''' % path
- ))
-
- r = component.getAdapter(request, name='index.html')
- self.assertEquals(r.__class__, FileResource)
- r = ProxyFactory(r)
- self.assertEqual(r.__name__, "index.html")
-
- # Make sure we can access available attrs and not others
- for n in ('GET', 'HEAD', 'publishTraverse', 'request', '__call__'):
- getattr(r, n)
- self.assertEqual(r.__name__, "index.html")
-
- self.assertRaises(Exception, getattr, r, '_testData')
-
- r = removeSecurityProxy(r)
- self.assert_(r.__class__ is FileResource)
- self.assertEqual(r._testData(), open(path, 'rb').read())
-
-
- def testSkinResource(self):
- self.assertEqual(component.queryAdapter(request, name='test'), None)
-
- path = os.path.join(tests_path, 'testfiles', 'test.pt')
- xmlconfig(StringIO(template % (
- '''
- <browser:resource
- name="test"
- file="%s"
- layer="
- zope.app.publisher.browser.tests.test_directives.ITestLayer"
- />
- ''' % path
- )))
-
- self.assertEqual(component.queryAdapter(request, name='test'), None)
-
- r = component.getAdapter(TestRequest(skin=ITestSkin), name='test')
- r = removeSecurityProxy(r)
- self.assertEqual(r._testData(), open(path, 'rb').read())
-
def test_template_page(self):
path = os.path.join(tests_path, 'testfiles', 'test.pt')
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_directoryresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/test_directoryresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_directoryresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,129 +0,0 @@
-##############################################################################
-#
-# 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.
-#
-##############################################################################
-"""Directory-based resources test
-
-$Id$
-"""
-import os
-from unittest import TestCase, main, makeSuite
-
-from zope.publisher.interfaces import NotFound
-from zope.proxy import isProxy
-from zope.publisher.browser import TestRequest
-from zope.security import proxy
-from zope.security.checker import NamesChecker, ProxyFactory
-from zope.interface import implements
-
-from zope.app.testing.placelesssetup import PlacelessSetup
-from zope.app.publisher.browser.directoryresource import \
- DirectoryResourceFactory, DirectoryResource
-from zope.container.contained import Contained
-from zope.app.publisher.browser.fileresource import FileResource
-from zope.app.publisher.browser.pagetemplateresource import \
- PageTemplateResource
-import zope.app.publisher.browser.tests as p
-from zope.app.publisher.browser.tests import support
-
-test_directory = os.path.dirname(p.__file__)
-
-checker = NamesChecker(
- ('get', '__getitem__', 'request', 'publishTraverse')
- )
-
-class Ob(Contained): pass
-
-ob = Ob()
-
-class Test(support.SiteHandler, PlacelessSetup, TestCase):
-
- def testNotFound(self):
- path = os.path.join(test_directory, 'testfiles')
- request = TestRequest()
- factory = DirectoryResourceFactory(path, checker, 'testfiles')
- resource = factory(request)
- self.assertRaises(NotFound, resource.publishTraverse,
- resource.request, 'doesnotexist')
- self.assertRaises(NotFound, resource.get, 'doesnotexist')
-
- def testGetitem(self):
- path = os.path.join(test_directory, 'testfiles')
- request = TestRequest()
- factory = DirectoryResourceFactory(path, checker, 'testfiles')
- resource = factory(request)
- self.assertRaises(KeyError, resource.__getitem__, 'doesnotexist')
- file = resource['test.txt']
-
- def testProxy(self):
- path = os.path.join(test_directory, 'testfiles')
- request = TestRequest()
- factory = DirectoryResourceFactory(path, checker, 'testfiles')
- resource = factory(request)
- file = ProxyFactory(resource['test.txt'])
- self.assert_(isProxy(file))
-
- def testURL(self):
- request = TestRequest()
- request._vh_root = support.site
- path = os.path.join(test_directory, 'testfiles')
- files = DirectoryResourceFactory(path, checker, 'test_files')(request)
- files.__parent__ = support.site
- file = files['test.gif']
- self.assertEquals(file(), 'http://127.0.0.1/@@/test_files/test.gif')
-
- def testURL2Level(self):
- request = TestRequest()
- request._vh_root = support.site
- ob.__parent__ = support.site
- ob.__name__ = 'ob'
- path = os.path.join(test_directory, 'testfiles')
- files = DirectoryResourceFactory(path, checker, 'test_files')(request)
- files.__parent__ = ob
- file = files['test.gif']
- self.assertEquals(file(), 'http://127.0.0.1/@@/test_files/test.gif')
-
- def testURL3Level(self):
- request = TestRequest()
- request._vh_root = support.site
- ob.__parent__ = support.site
- ob.__name__ = 'ob'
- path = os.path.join(test_directory, 'testfiles')
- files = DirectoryResourceFactory(path, checker, 'test_files')(request)
- files.__parent__ = ob
- file = files['test.gif']
- self.assertEquals(file(), 'http://127.0.0.1/@@/test_files/test.gif')
- subdir = files['subdir']
- self.assert_(proxy.isinstance(subdir, DirectoryResource))
- file = subdir['test.gif']
- self.assertEquals(file(),
- 'http://127.0.0.1/@@/test_files/subdir/test.gif')
-
- def testCorrectFactories(self):
- path = os.path.join(test_directory, 'testfiles')
- request = TestRequest()
- resource = DirectoryResourceFactory(path, checker, 'files')(request)
-
- image = resource['test.gif']
- self.assert_(proxy.isinstance(image, FileResource))
- template = resource['test.pt']
- self.assert_(proxy.isinstance(template, PageTemplateResource))
- file = resource['test.txt']
- self.assert_(proxy.isinstance(file, FileResource))
- file = resource['png']
- self.assert_(proxy.isinstance(file, FileResource))
-
-def test_suite():
- return makeSuite(Test)
-
-if __name__ == '__main__':
- main(defaultTest='test_suite')
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_fileresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/test_fileresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_fileresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,111 +0,0 @@
-##############################################################################
-#
-# 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.
-#
-##############################################################################
-"""File-based browser resource tests.
-
-$Id$
-"""
-import os
-from unittest import TestCase, main, makeSuite
-
-from zope.publisher.interfaces import NotFound
-from zope.i18n.interfaces import IUserPreferredCharsets
-from zope.security.proxy import removeSecurityProxy
-from zope.security.checker import NamesChecker
-
-from zope.app.testing.placelesssetup import PlacelessSetup
-from zope.app.testing import ztapi
-
-from zope.publisher.http import IHTTPRequest
-from zope.publisher.http import HTTPCharsets
-from zope.publisher.browser import TestRequest
-
-from zope.app.publisher.browser.fileresource import FileResourceFactory
-from zope.app.publisher.browser.fileresource import ImageResourceFactory
-import zope.app.publisher.browser.tests as p
-
-checker = NamesChecker(
- ('__call__', 'HEAD', 'request', 'publishTraverse', 'GET')
- )
-
-test_directory = os.path.dirname(p.__file__)
-
-class Test(PlacelessSetup, TestCase):
-
- def setUp(self):
- super(Test, self).setUp()
- ztapi.provideAdapter(IHTTPRequest, IUserPreferredCharsets,
- HTTPCharsets)
-
- def testNoTraversal(self):
-
- path = os.path.join(test_directory, 'testfiles', 'test.txt')
- factory = FileResourceFactory(path, checker, 'test.txt')
- resource = factory(TestRequest())
- self.assertRaises(NotFound,
- resource.publishTraverse,
- resource.request,
- '_testData')
-
- def testFileGET(self):
-
- path = os.path.join(test_directory, 'testfiles', 'test.txt')
-
- factory = FileResourceFactory(path, checker, 'test.txt')
- resource = factory(TestRequest())
- self.assertEqual(resource.GET(), open(path, 'rb').read())
-
- response = removeSecurityProxy(resource.request).response
- self.assertEqual(response.getHeader('Content-Type'), 'text/plain')
-
- def testFileHEAD(self):
-
- path = os.path.join(test_directory, 'testfiles', 'test.txt')
- factory = FileResourceFactory(path, checker, 'test.txt')
- resource = factory(TestRequest())
-
- self.assertEqual(resource.HEAD(), '')
-
- response = removeSecurityProxy(resource.request).response
- self.assertEqual(response.getHeader('Content-Type'), 'text/plain')
-
- def testImageGET(self):
-
- path = os.path.join(test_directory, 'testfiles', 'test.gif')
-
- factory = ImageResourceFactory(path, checker, 'test.gif')
- resource = factory(TestRequest())
-
- self.assertEqual(resource.GET(), open(path, 'rb').read())
-
- response = removeSecurityProxy(resource.request).response
- self.assertEqual(response.getHeader('Content-Type'), 'image/gif')
-
- def testImageHEAD(self):
-
- path = os.path.join(test_directory, 'testfiles', 'test.gif')
- factory = ImageResourceFactory(path, checker, 'test.gif')
- resource = factory(TestRequest())
-
- self.assertEqual(resource.HEAD(), '')
-
- response = removeSecurityProxy(resource.request).response
- self.assertEqual(response.getHeader('Content-Type'), 'image/gif')
-
-
-
-def test_suite():
- return makeSuite(Test)
-
-if __name__=='__main__':
- main(defaultTest='test_suite')
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_icondirective.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/test_icondirective.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_icondirective.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,206 +0,0 @@
-##############################################################################
-#
-# 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.
-#
-##############################################################################
-"""Test Icon-Directive
-
-$Id$
-"""
-import os
-from StringIO import StringIO
-from unittest import TestCase, main, makeSuite
-
-from zope import component
-from zope.configuration.exceptions import ConfigurationError
-from zope.configuration.xmlconfig import xmlconfig, XMLConfig
-from zope.interface import implements
-from zope.publisher.browser import TestRequest
-from zope.security.checker import ProxyFactory, CheckerPublic
-from zope.security.interfaces import Forbidden
-from zope.security.proxy import removeSecurityProxy
-from zope.traversing.interfaces import IContainmentRoot
-
-import zope.location.interfaces
-import zope.app.publisher.browser
-from zope.component.testfiles.views import IC
-from zope.app.publisher.browser.tests import support
-from zope.app.testing.placelesssetup import PlacelessSetup
-
-
-template = """<configure
- xmlns='http://namespaces.zope.org/zope'
- xmlns:browser='http://namespaces.zope.org/browser'
- i18n_domain='zope'
- >
- %s
- </configure>"""
-
-
-request = TestRequest()
-
-class Ob(object):
- implements(IC)
-
-ob = Ob()
-request._vh_root = support.site
-
-def defineCheckers():
- # define the appropriate checker for a FileResource for these tests
- from zope.app.security.protectclass import protectName
- from zope.app.publisher.browser.fileresource import FileResource
- protectName(FileResource, '__call__', 'zope.Public')
-
-
-class Test(support.SiteHandler, PlacelessSetup, TestCase):
-
- def setUp(self):
- super(Test, self).setUp()
- XMLConfig('meta.zcml', zope.app.publisher.browser)()
- defineCheckers()
-
- def test(self):
- self.assertEqual(
- component.queryMultiAdapter((ob, request), name='zmi_icon'),
- None)
-
- import zope.app.publisher.browser.tests as p
- path = os.path.dirname(p.__file__)
- path = os.path.join(path, 'testfiles', 'test.gif')
-
- # Configure the icon and make sure we can render the resulting view:
- xmlconfig(StringIO(template % (
- '''
- <browser:icon name="zmi_icon"
- for="zope.component.testfiles.views.IC"
- file="%s" />
- ''' % path
- )))
-
- view = component.getMultiAdapter((ob, request), name='zmi_icon')
- rname = 'zope-component-testfiles-views-IC-zmi_icon.gif'
- self.assertEqual(
- view(),
- '<img src="http://127.0.0.1/@@/%s" alt="IC" '
- 'width="16" height="16" border="0" />'
- % rname)
-
- # Make sure that the title attribute works
- xmlconfig(StringIO(template % (
- '''
- <browser:icon name="zmi_icon_w_title"
- for="zope.component.testfiles.views.IC"
- file="%s" title="click this!" />
- ''' % path
- )))
-
- view = component.getMultiAdapter(
- (ob, request), name='zmi_icon_w_title')
- rname = 'zope-component-testfiles-views-IC-zmi_icon_w_title.gif'
- self.assertEqual(
- view(),
- '<img src="http://127.0.0.1/@@/%s" alt="click this!" '
- 'width="16" height="16" border="0" />'
- % rname)
-
- # Make sure that the width and height attributes work
- xmlconfig(StringIO(template % (
- '''
- <browser:icon name="zmi_icon_w_width_and_height"
- for="zope.component.testfiles.views.IC"
- file="%s"
- width="20" height="12" />
- ''' % path
- )))
-
- view = component.getMultiAdapter((ob, request),
- name='zmi_icon_w_width_and_height')
- rname = ('zope-component-testfiles-views-IC-'
- 'zmi_icon_w_width_and_height.gif')
- self.assertEqual(
- view(),
- '<img src="http://127.0.0.1/@@/%s" alt="IC" '
- 'width="20" height="12" border="0" />'
- % rname)
-
- # Make sure that the image was installed as a resource:
- resource = ProxyFactory(component.getAdapter(request, name=rname))
- self.assertRaises(Forbidden, getattr, resource, '_testData')
- resource = removeSecurityProxy(resource)
- self.assertEqual(resource._testData(), open(path, 'rb').read())
-
- def testResource(self):
- self.assertEqual(
- component.queryMultiAdapter((ob, request), name='zmi_icon'), None)
-
- import zope.app.publisher.browser.tests as p
- path = os.path.dirname(p.__file__)
- path = os.path.join(path, 'testfiles', 'test.gif')
-
- xmlconfig(StringIO(template % (
- '''
- <browser:resource name="zmi_icon_res"
- image="%s" />
- <browser:icon name="zmi_icon"
- for="zope.component.testfiles.views.IC"
- resource="zmi_icon_res" />
- ''' % path
- )))
-
- view = component.getMultiAdapter((ob, request), name='zmi_icon')
- rname = "zmi_icon_res"
- self.assertEqual(
- view(),
- '<img src="http://127.0.0.1/@@/%s" alt="IC" width="16" '
- 'height="16" border="0" />'
- % rname)
-
- resource = ProxyFactory(component.getAdapter(request, name=rname))
-
- self.assertRaises(Forbidden, getattr, resource, '_testData')
- resource = removeSecurityProxy(resource)
- self.assertEqual(resource._testData(), open(path, 'rb').read())
-
- def testResourceErrors(self):
- self.assertEqual(
- component.queryMultiAdapter((ob, request), name='zmi_icon'), None)
-
- import zope.app.publisher.browser.tests as p
- path = os.path.dirname(p.__file__)
- path = os.path.join(path, 'testfiles', 'test.gif')
-
- config = StringIO(template % (
- '''
- <browser:resource name="zmi_icon_res"
- image="%s" />
- <browser:icon name="zmi_icon"
- for="zope.component.testfiles.views.IC"
- file="%s"
- resource="zmi_icon_res" />
- ''' % (path, path)
- ))
- self.assertRaises(ConfigurationError, xmlconfig, config)
-
- config = StringIO(template % (
- """
- <browser:icon name="zmi_icon"
- for="zope.component.testfiles.views.IC"
- />
- """
- ))
- self.assertRaises(ConfigurationError, xmlconfig, config)
-
-
-def test_suite():
- return makeSuite(Test)
-
-if __name__=='__main__':
- main(defaultTest='test_suite')
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_pagetemplateresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/test_pagetemplateresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_pagetemplateresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,72 +0,0 @@
-##############################################################################
-#
-# 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
-from unittest import TestCase, main, makeSuite
-
-import zope.component
-from zope.publisher.interfaces import NotFound
-from zope.security.checker import NamesChecker
-from zope.publisher.browser import TestRequest
-from zope.traversing.interfaces import ITraversable
-from zope.traversing.adapters import DefaultTraversable
-
-from zope.app.testing.placelesssetup import PlacelessSetup
-from zope.app.publisher.browser.pagetemplateresource import \
- PageTemplateResourceFactory
-import zope.app.publisher.browser.tests as p
-
-
-test_directory = os.path.dirname(p.__file__)
-
-
-checker = NamesChecker(
- ('__call__', 'request', 'publishTraverse')
- )
-
-
-class Test(PlacelessSetup, TestCase):
-
- def setUp(self):
- super(Test, self).setUp()
- zope.component.provideAdapter(DefaultTraversable, (None,), ITraversable)
-
- def testNoTraversal(self):
- path = os.path.join(test_directory, 'testfiles', 'test.pt')
- request = TestRequest()
- factory = PageTemplateResourceFactory(path, checker, 'test.pt')
- resource = factory(request)
- self.assertRaises(NotFound, resource.publishTraverse,
- resource.request, ())
-
- def testCall(self):
- path = os.path.join(test_directory, 'testfiles', 'testresource.pt')
- test_data = "Foobar"
- request = TestRequest(test_data=test_data)
- factory = PageTemplateResourceFactory(path, checker, 'testresource.pt')
- resource = factory(request)
- self.assert_(resource(), test_data)
- self.assertEquals('text/html',
- request.response.getHeader('Content-Type'))
-
-
-def test_suite():
- return makeSuite(Test)
-
-
-if __name__=='__main__':
- main(defaultTest='test_suite')
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_resource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/test_resource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_resource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,70 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2003 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.
-#
-##############################################################################
-"""Unit tests for Resource
-
-$Id$
-"""
-import unittest
-
-from zope import component
-
-from zope.publisher.browser import TestRequest
-
-import zope.location.interfaces
-from zope.app.publisher.browser.resource import Resource
-from zope.app.publisher.browser.tests import support
-from zope.app.testing.placelesssetup import PlacelessSetup
-from zope.traversing.browser.interfaces import IAbsoluteURL
-
-
-class TestResource(support.SiteHandler, PlacelessSetup, unittest.TestCase):
-
- def testGlobal(self):
- req = TestRequest()
- r = Resource(req)
- req._vh_root = support.site
- r.__parent__ = support.site
- r.__name__ = 'foo'
- self.assertEquals(r(), 'http://127.0.0.1/@@/foo')
- r.__name__ = '++resource++foo'
- self.assertEquals(r(), 'http://127.0.0.1/@@/foo')
-
- def testGlobalInVirtualHost(self):
- req = TestRequest()
- req.setVirtualHostRoot(['x', 'y'])
- r = Resource(req)
- req._vh_root = support.site
- r.__parent__ = support.site
- r.__name__ = 'foo'
- self.assertEquals(r(), 'http://127.0.0.1/x/y/@@/foo')
-
- def testResourceUrl(self):
- # fake IAbsoluteURL adapter
- def resourceBase(site, request):
- return 'http://cdn.example.com'
- component.provideAdapter(
- resourceBase,
- (zope.location.interfaces.ISite, TestRequest),
- IAbsoluteURL, 'resource')
-
- req = TestRequest()
- r = Resource(req)
- req._vh_root = support.site
- r.__parent__ = support.site
- r.__name__ = 'foo'
- self.assertEquals(r(), 'http://cdn.example.com/@@/foo')
-
-
-def test_suite():
- return unittest.makeSuite(TestResource)
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_resources.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/test_resources.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/test_resources.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,78 +0,0 @@
-##############################################################################
-#
-# 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.
-#
-##############################################################################
-"""Test Browser Resources
-
-$Id$
-"""
-from unittest import TestCase, main, makeSuite
-
-from zope.i18n.interfaces import IUserPreferredCharsets
-from zope.publisher.http import IHTTPRequest
-from zope.publisher.http import HTTPCharsets
-from zope.publisher.browser import TestRequest
-from zope.publisher.interfaces.browser import IBrowserView
-
-from zope.app.testing import ztapi
-from zope.app.testing.placelesssetup import PlacelessSetup
-
-class Test(PlacelessSetup, TestCase):
-
- def setUp(self):
- super(Test, self).setUp()
- ztapi.provideAdapter(IHTTPRequest, IUserPreferredCharsets,
- HTTPCharsets)
-
- def test_publishTraverse(self):
- from zope.app.publisher.browser.resources import Resources
- request = TestRequest()
-
- class Resource(object):
- def __init__(self, request): pass
- def __call__(self): return 42
-
- ztapi.browserResource('test', Resource)
- view = Resources(None, request)
- resource = view.publishTraverse(request, 'test')
- self.assertEqual(resource(), 42)
-
- def test_getitem(self):
- from zope.app.publisher.browser.resources import Resources
- request = TestRequest()
-
- class Resource(object):
- def __init__(self, request): pass
- def __call__(self): return 42
-
- ztapi.browserResource('test', Resource)
- view = Resources(None, request)
- resource = view['test']
- self.assertEqual(resource(), 42)
-
- def testNotFound(self):
- from zope.app.publisher.browser.resources import Resources
- from zope.publisher.interfaces import NotFound
- request = TestRequest()
- view = Resources(None, request)
- self.assertRaises(NotFound,
- view.publishTraverse,
- request, 'test'
- )
-
-
-
-def test_suite():
- return makeSuite(Test)
-
-if __name__=='__main__':
- main(defaultTest='test_suite')
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/png
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/testfiles/png 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/png 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,2 +0,0 @@
-test
-data
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/test.gif
===================================================================
(Binary files differ)
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/test.txt
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/testfiles/test.txt 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/test.txt 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,2 +0,0 @@
-test
-data
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/testresource.pt
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/testfiles/testresource.pt 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testfiles/testresource.pt 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1 +0,0 @@
-<html><body tal:content="request/test_data"></body></html>
\ No newline at end of file
Deleted: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testi18nfileresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/browser/tests/testi18nfileresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/browser/tests/testi18nfileresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -1,152 +0,0 @@
-##############################################################################
-#
-# 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.
-#
-##############################################################################
-"""I18n File-Resource Tests
-
-$Id$
-"""
-from unittest import main, makeSuite
-import os
-
-from zope.publisher.interfaces import NotFound
-
-from zope.app.testing.placelesssetup import PlacelessSetup
-from zope.app.testing import ztapi
-
-from zope.i18n.interfaces import IUserPreferredCharsets, IUserPreferredLanguages
-
-from zope.publisher.http import IHTTPRequest, HTTPCharsets
-from zope.publisher.browser import BrowserLanguages, TestRequest
-
-from zope.app.publisher.browser.i18nfileresource import I18nFileResource
-from zope.app.publisher.browser.i18nfileresource import I18nFileResourceFactory
-from zope.app.publisher.fileresource import File
-import zope.app.publisher.browser.tests as p
-
-from zope.i18n.interfaces import INegotiator
-from zope.i18n.negotiator import negotiator
-
-from zope.i18n.tests.testii18naware import TestII18nAware
-
-test_directory = os.path.dirname(p.__file__)
-
-
-class Test(PlacelessSetup, TestII18nAware):
-
- def setUp(self):
- super(Test, self).setUp()
- TestII18nAware.setUp(self)
- ztapi.provideAdapter(IHTTPRequest, IUserPreferredCharsets,
- HTTPCharsets)
- ztapi.provideAdapter(IHTTPRequest, IUserPreferredLanguages,
- BrowserLanguages)
- # Setup the negotiator utility
- ztapi.provideUtility(INegotiator, negotiator)
-
-
- def _createObject(self):
- obj = I18nFileResource({'en':None, 'lt':None, 'fr':None},
- TestRequest(), 'fr')
- return obj
-
-
- def _createDict(self, filename1='test.pt', filename2='test2.pt'):
- path1 = os.path.join(test_directory, 'testfiles', filename1)
- path2 = os.path.join(test_directory, 'testfiles', filename2)
- return { 'en': File(path1, filename1),
- 'fr': File(path2, filename2) }
-
-
- def testNoTraversal(self):
-
- resource = I18nFileResourceFactory(self._createDict(), 'en')\
- (TestRequest())
-
- self.assertRaises(NotFound,
- resource.publishTraverse,
- resource.request,
- '_testData')
-
- def testFileGET(self):
-
- # case 1: no language preference, should get en
- path = os.path.join(test_directory, 'testfiles', 'test.txt')
-
- resource = I18nFileResourceFactory(self._createDict('test.txt'), 'en')\
- (TestRequest())
-
-
- self.assertEqual(resource.GET(), open(path, 'rb').read())
-
- response = resource.request.response
- self.assertEqual(response.getHeader('Content-Type'), 'text/plain')
-
- # case 2: prefer lt, have only en and fr, should get en
- resource = I18nFileResourceFactory(
- self._createDict('test.txt'), 'en')\
- (TestRequest(HTTP_ACCEPT_LANGUAGE='lt'))
-
- self.assertEqual(resource.GET(), open(path, 'rb').read())
-
- response = resource.request.response
- self.assertEqual(response.getHeader('Content-Type'), 'text/plain')
-
- # case 3: prefer fr, have it, should get fr
- path = os.path.join(test_directory, 'testfiles', 'test2.pt')
- resource = I18nFileResourceFactory(
- self._createDict('test.pt', 'test2.pt'), 'en')\
- (TestRequest(HTTP_ACCEPT_LANGUAGE='fr'))
-
- self.assertEqual(resource.GET(), open(path, 'rb').read())
-
- response = resource.request.response
- self.assertEqual(response.getHeader('Content-Type'), 'text/html')
-
-
- def testFileHEAD(self):
-
- # case 1: no language preference, should get en
- resource = I18nFileResourceFactory(self._createDict('test.txt'), 'en')\
- (TestRequest())
-
- self.assertEqual(resource.HEAD(), '')
-
- response = resource.request.response
- self.assertEqual(response.getHeader('Content-Type'), 'text/plain')
-
- # case 2: prefer lt, have only en and fr, should get en
- resource = I18nFileResourceFactory(
- self._createDict('test.txt'), 'en')\
- (TestRequest(HTTP_ACCEPT_LANGUAGE='lt'))
-
- self.assertEqual(resource.HEAD(), '')
-
- response = resource.request.response
- self.assertEqual(response.getHeader('Content-Type'), 'text/plain')
-
- # case 3: prefer fr, have it, should get fr
- resource = I18nFileResourceFactory(
- self._createDict('test.pt', 'test2.pt'), 'en')\
- (TestRequest(HTTP_ACCEPT_LANGUAGE='fr'))
-
- self.assertEqual(resource.HEAD(), '')
-
- response = resource.request.response
- self.assertEqual(response.getHeader('Content-Type'), 'text/html')
-
-
-def test_suite():
- return makeSuite(Test)
-
-if __name__=='__main__':
- main(defaultTest='test_suite')
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/fileresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/fileresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/fileresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,33 +15,7 @@
$Id$
"""
-import os
-from time import time
-from zope.contenttype import guess_content_type
-from zope.datetime import rfc1123_date
-
-
-class File(object):
-
- def __init__(self, path, name):
- self.path = path
-
- f = open(path, 'rb')
- data = f.read()
- f.close()
- self.content_type, enc = guess_content_type(path, data)
- self.__name__ = name
- self.lmt = float(os.path.getmtime(path)) or time()
- self.lmh = rfc1123_date(self.lmt)
-
-
-class Image(File):
- """Image objects stored in external files."""
-
- def __init__(self, path, name):
- super(Image, self).__init__(path, name)
- if self.content_type in (None, 'application/octet-stream'):
- ext = os.path.splitext(self.path)[1]
- if ext:
- self.content_type = 'image/%s' % ext[1:]
+# BBB imports
+from zope.browserresource.file import File
+Image = File
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/interfaces/__init__.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/interfaces/__init__.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/interfaces/__init__.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,12 +15,4 @@
$Id$
"""
-from zope.interface import Interface, Attribute
-
-
-class IResource(Interface):
-
- request = Attribute('Request object that is requesting the resource')
-
- def __call__():
- """return the absolute URL of this resource."""
+from zope.browserresource.interfaces import IResource # BBB import
Modified: Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/pagetemplateresource.py
===================================================================
--- zope.app.publisher/trunk/src/zope/app/publisher/pagetemplateresource.py 2009-08-24 12:09:16 UTC (rev 103141)
+++ Sandbox/nadako/zope.app.publisher/src/zope/app/publisher/pagetemplateresource.py 2009-08-24 12:28:19 UTC (rev 103143)
@@ -15,30 +15,5 @@
$Id$
"""
+from zope.ptresource.ptresource import PageTemplate # BBB import
-from zope.pagetemplate.engine import TrustedAppPT
-from zope.pagetemplate.pagetemplatefile import PageTemplateFile
-
-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)
More information about the Checkins
mailing list