[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