[Checkins] SVN: Sandbox/nadako/zope.browserresource/src/zope/browserresource/ Simplify module naming. Remove use of Image in i18n-resource.
Dan Korostelev
nadako at gmail.com
Mon Aug 24 06:26:15 EDT 2009
Log message for revision 103129:
Simplify module naming. Remove use of Image in i18n-resource.
Changed:
U Sandbox/nadako/zope.browserresource/src/zope/browserresource/configure.zcml
A Sandbox/nadako/zope.browserresource/src/zope/browserresource/directory.py
D Sandbox/nadako/zope.browserresource/src/zope/browserresource/directoryresource.py
A Sandbox/nadako/zope.browserresource/src/zope/browserresource/file.py
D Sandbox/nadako/zope.browserresource/src/zope/browserresource/fileresource.py
A Sandbox/nadako/zope.browserresource/src/zope/browserresource/i18nfile.py
D Sandbox/nadako/zope.browserresource/src/zope/browserresource/i18nfileresource.py
U Sandbox/nadako/zope.browserresource/src/zope/browserresource/metaconfigure.py
U Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/__init__.py
U Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directives.py
A Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directory.py
D Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directoryresource.py
A Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_file.py
D Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_fileresource.py
A Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_i18nfile.py
D Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_i18nfileresource.py
U Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_icondirective.py
-=-
Modified: Sandbox/nadako/zope.browserresource/src/zope/browserresource/configure.zcml
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/configure.zcml 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/configure.zcml 2009-08-24 10:26:15 UTC (rev 103129)
@@ -11,19 +11,25 @@
allowed_interface="zope.publisher.interfaces.browser.IBrowserPublisher"
/>
- <class class=".fileresource.FileResource">
- <allow interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
- <allow attributes="GET HEAD __call__" />
+ <class class=".file.FileResource">
+ <allow
+ interface="zope.publisher.interfaces.browser.IBrowserPublisher"
+ attributes="GET HEAD __call__"
+ />
</class>
- <class class=".i18nfileresource.I18nFileResource">
- <allow interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
- <allow attributes="GET HEAD __call__" />
+ <class class=".i18nfile.I18nFileResource">
+ <allow
+ interface="zope.publisher.interfaces.browser.IBrowserPublisher"
+ attributes="GET HEAD __call__"
+ />
</class>
- <class class=".directoryresource.DirectoryResource">
- <allow interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
- <allow attributes="get __getitem__" />
+ <class class=".directory.DirectoryResource">
+ <allow
+ interface="zope.publisher.interfaces.browser.IBrowserPublisher"
+ attributes="get __getitem__"
+ />
</class>
</configure>
Copied: Sandbox/nadako/zope.browserresource/src/zope/browserresource/directory.py (from rev 103125, Sandbox/nadako/zope.browserresource/src/zope/browserresource/directoryresource.py)
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/directory.py (rev 0)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/directory.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -0,0 +1,113 @@
+##############################################################################
+#
+# Copyright (c) 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.
+#
+##############################################################################
+"""Resource Directory
+
+A 'resource directory' is an on-disk directory which is registered as
+a resource using the <resourceDirectory> ZCML directive. The
+directory is treated as a source for individual resources; it can be
+traversed to retrieve resources represented by contained files, which
+can in turn be treated as resources. The contained files have
+__name__ values which include a '/' separating the __name__ of the
+resource directory from the name of the file within the directory.
+
+$Id$
+"""
+import os
+
+from zope.component import queryUtility
+from zope.interface import implements, classProvides
+from zope.publisher.browser import BrowserView
+from zope.publisher.interfaces import NotFound
+from zope.publisher.interfaces.browser import IBrowserPublisher
+
+from zope.browserresource.file import FileResourceFactory
+from zope.browserresource.resource import Resource
+from zope.browserresource.resources import empty
+from zope.browserresource.interfaces import IResourceFactory
+from zope.browserresource.interfaces import IResourceFactoryFactory
+
+_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)
+
+ 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][1:]
+ factory = queryUtility(IResourceFactoryFactory, ext,
+ self.default_factory)
+ else:
+ factory = self.directory_factory
+
+ rname = self.__name__ + '/' + name
+ resource = factory(filename, self.context.checker, rname)(self.request)
+ resource.__parent__ = self
+ return resource
+
+
+class DirectoryResourceFactory(object):
+
+ implements(IResourceFactory)
+ classProvides(IResourceFactoryFactory)
+
+ 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
Deleted: Sandbox/nadako/zope.browserresource/src/zope/browserresource/directoryresource.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/directoryresource.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/directoryresource.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -1,113 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 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.
-#
-##############################################################################
-"""Resource Directory
-
-A 'resource directory' is an on-disk directory which is registered as
-a resource using the <resourceDirectory> ZCML directive. The
-directory is treated as a source for individual resources; it can be
-traversed to retrieve resources represented by contained files, which
-can in turn be treated as resources. The contained files have
-__name__ values which include a '/' separating the __name__ of the
-resource directory from the name of the file within the directory.
-
-$Id$
-"""
-import os
-
-from zope.component import queryUtility
-from zope.interface import implements, classProvides
-from zope.publisher.browser import BrowserView
-from zope.publisher.interfaces import NotFound
-from zope.publisher.interfaces.browser import IBrowserPublisher
-
-from zope.browserresource.fileresource import FileResourceFactory
-from zope.browserresource.resource import Resource
-from zope.browserresource.resources import empty
-from zope.browserresource.interfaces import IResourceFactory
-from zope.browserresource.interfaces import IResourceFactoryFactory
-
-_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)
-
- 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][1:]
- factory = queryUtility(IResourceFactoryFactory, ext,
- self.default_factory)
- else:
- factory = self.directory_factory
-
- rname = self.__name__ + '/' + name
- resource = factory(filename, self.context.checker, rname)(self.request)
- resource.__parent__ = self
- return resource
-
-
-class DirectoryResourceFactory(object):
-
- implements(IResourceFactory)
- classProvides(IResourceFactoryFactory)
-
- 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
Copied: Sandbox/nadako/zope.browserresource/src/zope/browserresource/file.py (from rev 103125, Sandbox/nadako/zope.browserresource/src/zope/browserresource/fileresource.py)
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/file.py (rev 0)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/file.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -0,0 +1,155 @@
+##############################################################################
+#
+# Copyright (c) 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 resources.
+
+$Id$
+"""
+
+import os
+import time
+try:
+ from email.utils import formatdate
+except ImportError: # python 2.4
+ from email.Utils import formatdate
+
+from zope.contenttype import guess_content_type
+from zope.datetime import time as timeFromDateTimeString
+from zope.interface import implements, classProvides
+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 File(object):
+
+ def __init__(self, path, name):
+ self.path = path
+ self.__name__ = name
+
+ f = open(path, 'rb')
+ data = f.read()
+ f.close()
+ self.content_type = guess_content_type(path, data)[0]
+
+ self.lmt = float(os.path.getmtime(path)) or time.time()
+ self.lmh = formatdate(self.lmt, usegmt=True)
+
+
+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), ()
+
+ 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 ''
+
+ # for unit tests
+ def _testData(self):
+ f = open(self.context.path, 'rb')
+ data = f.read()
+ f.close()
+ return data
+
+
+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
+
+ implements(IResourceFactory)
+ classProvides(IResourceFactoryFactory)
+
+ 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
Deleted: Sandbox/nadako/zope.browserresource/src/zope/browserresource/fileresource.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/fileresource.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/fileresource.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -1,157 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 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 resources.
-
-$Id$
-"""
-
-import os
-import time
-try:
- from email.utils import formatdate
-except ImportError: # python 2.4
- from email.Utils import formatdate
-
-from zope.contenttype import guess_content_type
-from zope.datetime import time as timeFromDateTimeString
-from zope.interface import implements, classProvides
-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 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.time()
- self.lmh = formatdate(self.lmt, usegmt=True)
-
-
-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
-
- implements(IResourceFactory)
- classProvides(IResourceFactoryFactory)
-
- 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
Copied: Sandbox/nadako/zope.browserresource/src/zope/browserresource/i18nfile.py (from rev 103125, Sandbox/nadako/zope.browserresource/src/zope/browserresource/i18nfileresource.py)
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/i18nfile.py (rev 0)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/i18nfile.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -0,0 +1,82 @@
+##############################################################################
+#
+# Copyright (c) 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.
+#
+##############################################################################
+"""Internationalized file resource.
+
+$Id$
+"""
+from zope.i18n.interfaces import II18nAware
+from zope.i18n.negotiator import negotiator
+from zope.interface import implements, classProvides
+
+from zope.browserresource.file import FileResource
+from zope.browserresource.interfaces import IResourceFactory
+from zope.browserresource.interfaces import IResourceFactoryFactory
+
+
+class I18nFileResource(FileResource):
+
+ implements(II18nAware)
+
+ def __init__(self, data, request, defaultLanguage='en'):
+ """Creates an internationalized file resource. data should be
+ a mapping from languages to File 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]
+
+ 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()
+
+ # for unit tests
+ def _testData(self, language):
+ file = self._data[language]
+ f=open(file.path,'rb')
+ data=f.read()
+ f.close()
+ return data
+
+
+class I18nFileResourceFactory(object):
+
+ implements(IResourceFactory)
+ classProvides(IResourceFactoryFactory)
+
+ def __init__(self, data, defaultLanguage):
+ self.__data = data
+ self.__defaultLanguage = defaultLanguage
+
+ def __call__(self, request):
+ return I18nFileResource(self.__data, request, self.__defaultLanguage)
Deleted: Sandbox/nadako/zope.browserresource/src/zope/browserresource/i18nfileresource.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/i18nfileresource.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/i18nfileresource.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -1,92 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 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.
-#
-##############################################################################
-"""Internationalized file resource.
-
-$Id$
-"""
-from zope.i18n.interfaces import II18nAware
-from zope.i18n.negotiator import negotiator
-from zope.interface import implements, classProvides
-
-from zope.browserresource.fileresource import FileResource
-from zope.browserresource.interfaces import IResourceFactory
-from zope.browserresource.interfaces import IResourceFactoryFactory
-
-
-class I18nFileResource(FileResource):
-
- implements(II18nAware)
-
- def __init__(self, data, request, defaultLanguage='en'):
- """Creates an internationalized file resource. data should be
- a mapping from languages to File 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):
-
- implements(IResourceFactory)
- classProvides(IResourceFactoryFactory)
-
- def __init__(self, data, defaultLanguage):
- self.__data = data
- self.__defaultLanguage = defaultLanguage
-
- def __call__(self, request):
- return I18nFileResource(self.__data, request, self.__defaultLanguage)
Modified: Sandbox/nadako/zope.browserresource/src/zope/browserresource/metaconfigure.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/metaconfigure.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/metaconfigure.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -27,9 +27,9 @@
from zope.security.checker import CheckerPublic, NamesChecker, Checker
from zope.security.proxy import Proxy
-from zope.browserresource.directoryresource import DirectoryResourceFactory
-from zope.browserresource.fileresource import File, FileResourceFactory
-from zope.browserresource.i18nfileresource import I18nFileResourceFactory
+from zope.browserresource.directory import DirectoryResourceFactory
+from zope.browserresource.file import File, FileResourceFactory
+from zope.browserresource.i18nfile import I18nFileResourceFactory
from zope.browserresource.icon import IconViewFactory
from zope.browserresource.interfaces import IResourceFactory
from zope.browserresource.interfaces import IResourceFactoryFactory
@@ -187,7 +187,6 @@
self.layer = layer
self.permission = permission
self.__data = {}
- self.__format = None
def translation(self, _context, language, file=None, image=None):
@@ -196,34 +195,26 @@
"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:
+ elif file is None and image is None:
raise ConfigurationError(
"At least one of the file, and image "
"attributes for resource directives must be specified"
)
- return ()
+ if image is not None:
+ import warnings
+ warnings.warn('The "image" attribute of i18n-resource directive is '
+ 'deprecated in favor of simple files. Use the "file" '
+ 'attribute instead.',
+ DeprecationWarning)
+ file = image
+ self.__data[language] = File(_context.path(file), self.name)
+
def __call__(self, require = None):
if self.name is None:
- return ()
+ return
if not self.__data.has_key(self.defaultLanguage):
raise ConfigurationError(
Modified: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/__init__.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/__init__.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/__init__.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -1,2 +0,0 @@
-#
-# This file is necessary to make this directory a package.
Modified: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directives.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directives.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directives.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -43,8 +43,8 @@
import zope.browserresource
from zope.component import provideAdapter, provideUtility
from zope.component.testfiles.views import R1, IV
-from zope.browserresource.fileresource import FileResource
-from zope.browserresource.i18nfileresource import I18nFileResource
+from zope.browserresource.file import FileResource
+from zope.browserresource.i18nfile import I18nFileResource
from zope.testing import cleanup
tests_path = os.path.join(
@@ -143,17 +143,6 @@
))
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 testFactory(self):
self.assertEqual(
component.queryAdapter(request, name='index.html'), None)
Copied: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directory.py (from rev 103125, Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directoryresource.py)
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directory.py (rev 0)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directory.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -0,0 +1,132 @@
+##############################################################################
+#
+# 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.location.interfaces import IContained
+from zope.traversing.browser.absoluteurl import AbsoluteURL
+from zope.traversing.browser.interfaces import IAbsoluteURL
+from zope.component import provideAdapter
+
+from zope.testing import cleanup
+
+from zope.browserresource.directory import \
+ DirectoryResourceFactory, DirectoryResource
+from zope.browserresource.file import FileResource
+import zope.browserresource.tests as p
+from zope.browserresource.tests import support
+
+test_directory = os.path.dirname(p.__file__)
+
+checker = NamesChecker(
+ ('get', '__getitem__', 'request', 'publishTraverse')
+ )
+
+class Ob(object):
+ implements(IContained)
+ __parent__ = __name__ = None
+
+ob = Ob()
+
+class Test(support.SiteHandler, cleanup.CleanUp, TestCase):
+
+ def setUp(self):
+ super(Test, self).setUp()
+ provideAdapter(AbsoluteURL, (None, None), IAbsoluteURL)
+
+ 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))
+ 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)
Deleted: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directoryresource.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directoryresource.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_directoryresource.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -1,132 +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.location.interfaces import IContained
-from zope.traversing.browser.absoluteurl import AbsoluteURL
-from zope.traversing.browser.interfaces import IAbsoluteURL
-from zope.component import provideAdapter
-
-from zope.testing import cleanup
-
-from zope.browserresource.directoryresource import \
- DirectoryResourceFactory, DirectoryResource
-from zope.browserresource.fileresource import FileResource
-import zope.browserresource.tests as p
-from zope.browserresource.tests import support
-
-test_directory = os.path.dirname(p.__file__)
-
-checker = NamesChecker(
- ('get', '__getitem__', 'request', 'publishTraverse')
- )
-
-class Ob(object):
- implements(IContained)
- __parent__ = __name__ = None
-
-ob = Ob()
-
-class Test(support.SiteHandler, cleanup.CleanUp, TestCase):
-
- def setUp(self):
- super(Test, self).setUp()
- provideAdapter(AbsoluteURL, (None, None), IAbsoluteURL)
-
- 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))
- 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)
Copied: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_file.py (from rev 103125, Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_fileresource.py)
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_file.py (rev 0)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_file.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -0,0 +1,98 @@
+##############################################################################
+#
+# 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.testing import cleanup
+from zope.component import provideAdapter
+
+from zope.publisher.http import IHTTPRequest
+from zope.publisher.http import HTTPCharsets
+from zope.publisher.browser import TestRequest
+
+from zope.browserresource.file import FileResourceFactory
+import zope.browserresource.tests as p
+
+checker = NamesChecker(
+ ('__call__', 'HEAD', 'request', 'publishTraverse', 'GET')
+ )
+
+test_directory = os.path.dirname(p.__file__)
+
+class Test(cleanup.CleanUp, TestCase):
+
+ def setUp(self):
+ super(Test, self).setUp()
+ provideAdapter(HTTPCharsets, (IHTTPRequest,), IUserPreferredCharsets)
+
+ 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 testBrowserDefault(self):
+ path = os.path.join(test_directory, 'testfiles', 'test.txt')
+ factory = FileResourceFactory(path, checker, 'test.txt')
+
+ request = TestRequest(REQUEST_METHOD='GET')
+ resource = factory(request)
+ view, next = resource.browserDefault(request)
+ self.assertEqual(view(), open(path, 'rb').read())
+ self.assertEqual(next, ())
+
+ request = TestRequest(REQUEST_METHOD='HEAD')
+ resource = factory(request)
+ view, next = resource.browserDefault(request)
+ self.assertEqual(view(), '')
+ self.assertEqual(next, ())
+
+
+def test_suite():
+ return makeSuite(Test)
Deleted: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_fileresource.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_fileresource.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_fileresource.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -1,98 +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.testing import cleanup
-from zope.component import provideAdapter
-
-from zope.publisher.http import IHTTPRequest
-from zope.publisher.http import HTTPCharsets
-from zope.publisher.browser import TestRequest
-
-from zope.browserresource.fileresource import FileResourceFactory
-import zope.browserresource.tests as p
-
-checker = NamesChecker(
- ('__call__', 'HEAD', 'request', 'publishTraverse', 'GET')
- )
-
-test_directory = os.path.dirname(p.__file__)
-
-class Test(cleanup.CleanUp, TestCase):
-
- def setUp(self):
- super(Test, self).setUp()
- provideAdapter(HTTPCharsets, (IHTTPRequest,), IUserPreferredCharsets)
-
- 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 testBrowserDefault(self):
- path = os.path.join(test_directory, 'testfiles', 'test.txt')
- factory = FileResourceFactory(path, checker, 'test.txt')
-
- request = TestRequest(REQUEST_METHOD='GET')
- resource = factory(request)
- view, next = resource.browserDefault(request)
- self.assertEqual(view(), open(path, 'rb').read())
- self.assertEqual(next, ())
-
- request = TestRequest(REQUEST_METHOD='HEAD')
- resource = factory(request)
- view, next = resource.browserDefault(request)
- self.assertEqual(view(), '')
- self.assertEqual(next, ())
-
-
-def test_suite():
- return makeSuite(Test)
Copied: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_i18nfile.py (from rev 103125, Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_i18nfileresource.py)
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_i18nfile.py (rev 0)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_i18nfile.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -0,0 +1,147 @@
+##############################################################################
+#
+# 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.component import provideAdapter, provideUtility
+from zope.testing import cleanup
+
+from zope.i18n.interfaces import IUserPreferredCharsets, IUserPreferredLanguages
+
+from zope.publisher.http import IHTTPRequest, HTTPCharsets
+from zope.publisher.browser import BrowserLanguages, TestRequest
+
+from zope.browserresource.i18nfile import I18nFileResource
+from zope.browserresource.i18nfile import I18nFileResourceFactory
+from zope.browserresource.file import File
+import zope.browserresource.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(cleanup.CleanUp, TestII18nAware):
+
+ def setUp(self):
+ super(Test, self).setUp()
+ TestII18nAware.setUp(self)
+ provideAdapter(HTTPCharsets, (IHTTPRequest,), IUserPreferredCharsets)
+ provideAdapter(BrowserLanguages, (IHTTPRequest,), IUserPreferredLanguages)
+ # Setup the negotiator utility
+ provideUtility(negotiator, INegotiator)
+
+
+ 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)
Deleted: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_i18nfileresource.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_i18nfileresource.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_i18nfileresource.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -1,147 +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.component import provideAdapter, provideUtility
-from zope.testing import cleanup
-
-from zope.i18n.interfaces import IUserPreferredCharsets, IUserPreferredLanguages
-
-from zope.publisher.http import IHTTPRequest, HTTPCharsets
-from zope.publisher.browser import BrowserLanguages, TestRequest
-
-from zope.browserresource.i18nfileresource import I18nFileResource
-from zope.browserresource.i18nfileresource import I18nFileResourceFactory
-from zope.browserresource.fileresource import File
-import zope.browserresource.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(cleanup.CleanUp, TestII18nAware):
-
- def setUp(self):
- super(Test, self).setUp()
- TestII18nAware.setUp(self)
- provideAdapter(HTTPCharsets, (IHTTPRequest,), IUserPreferredCharsets)
- provideAdapter(BrowserLanguages, (IHTTPRequest,), IUserPreferredLanguages)
- # Setup the negotiator utility
- provideUtility(negotiator, INegotiator)
-
-
- 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)
Modified: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_icondirective.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_icondirective.py 2009-08-24 10:25:57 UTC (rev 103128)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_icondirective.py 2009-08-24 10:26:15 UTC (rev 103129)
@@ -58,7 +58,7 @@
def defineCheckers():
# define the appropriate checker for a FileResource for these tests
from zope.security.protectclass import protectName
- from zope.browserresource.fileresource import FileResource
+ from zope.browserresource.file import FileResource
protectName(FileResource, '__call__', 'zope.Public')
More information about the Checkins
mailing list