summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt4
-rw-r--r--TODO.txt5
-rw-r--r--pyramid/asset.py169
-rw-r--r--pyramid/config/assets.py171
-rw-r--r--pyramid/tests/test_asset.py442
-rw-r--r--pyramid/tests/test_config/fixtures/dummy.txt1
-rw-r--r--pyramid/tests/test_config/test_assets.py447
7 files changed, 624 insertions, 615 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index f623ccbc3..994d8c301 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -134,6 +134,10 @@ Internal
- Move the ``Settings`` class from ``pyramid.settings`` to
``pyramid.config.settings``.
+- Move the ``OverrideProvider``, ``PackageOverrides``, ``DirectoryOverride``,
+ and ``FileOverride`` classes from ``pyramid.asset`` to
+ ``pyramid.config.assets``.
+
Deprecations
------------
diff --git a/TODO.txt b/TODO.txt
index dc2d07c5b..cba1f5e02 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -6,9 +6,8 @@ Nice-to-Have
- Flesh out "paste" chapter.
-- Move config-related stuff from "renderers" to config/rendering, "asset" to
- config/assets, and possibly mako/chameleon rendering stuff to
- config/rendering.
+- Move config-related stuff from "renderers" to config/rendering, and
+ possibly mako/chameleon rendering stuff to config/rendering.
- _fix_registry should dictify the registry being fixed.
diff --git a/pyramid/asset.py b/pyramid/asset.py
index 0f8483c6b..730969a4a 100644
--- a/pyramid/asset.py
+++ b/pyramid/asset.py
@@ -1,177 +1,8 @@
import os
import pkg_resources
-from zope.interface import implements
-
-from pyramid.interfaces import IPackageOverrides
-
from pyramid.path import package_path
from pyramid.path import package_name
-from pyramid.threadlocal import get_current_registry
-
-class OverrideProvider(pkg_resources.DefaultProvider):
- def __init__(self, module):
- pkg_resources.DefaultProvider.__init__(self, module)
- self.module_name = module.__name__
-
- def _get_overrides(self):
- reg = get_current_registry()
- overrides = reg.queryUtility(IPackageOverrides, self.module_name)
- return overrides
-
- def get_resource_filename(self, manager, resource_name):
- """ Return a true filesystem path for resource_name,
- co-ordinating the extraction with manager, if the resource
- must be unpacked to the filesystem.
- """
- overrides = self._get_overrides()
- if overrides is not None:
- filename = overrides.get_filename(resource_name)
- if filename is not None:
- return filename
- return pkg_resources.DefaultProvider.get_resource_filename(
- self, manager, resource_name)
-
- def get_resource_stream(self, manager, resource_name):
- """ Return a readable file-like object for resource_name."""
- overrides = self._get_overrides()
- if overrides is not None:
- stream = overrides.get_stream(resource_name)
- if stream is not None:
- return stream
- return pkg_resources.DefaultProvider.get_resource_stream(
- self, manager, resource_name)
-
- def get_resource_string(self, manager, resource_name):
- """ Return a string containing the contents of resource_name."""
- overrides = self._get_overrides()
- if overrides is not None:
- string = overrides.get_string(resource_name)
- if string is not None:
- return string
- return pkg_resources.DefaultProvider.get_resource_string(
- self, manager, resource_name)
-
- def has_resource(self, resource_name):
- overrides = self._get_overrides()
- if overrides is not None:
- result = overrides.has_resource(resource_name)
- if result is not None:
- return result
- return pkg_resources.DefaultProvider.has_resource(
- self, resource_name)
-
- def resource_isdir(self, resource_name):
- overrides = self._get_overrides()
- if overrides is not None:
- result = overrides.isdir(resource_name)
- if result is not None:
- return result
- return pkg_resources.DefaultProvider.resource_isdir(
- self, resource_name)
-
- def resource_listdir(self, resource_name):
- overrides = self._get_overrides()
- if overrides is not None:
- result = overrides.listdir(resource_name)
- if result is not None:
- return result
- return pkg_resources.DefaultProvider.resource_listdir(
- self, resource_name)
-
-class PackageOverrides:
- implements(IPackageOverrides)
- # pkg_resources arg in kw args below for testing
- def __init__(self, package, pkg_resources=pkg_resources):
- if hasattr(package, '__loader__') and not isinstance(package.__loader__,
- self.__class__):
- raise TypeError('Package %s already has a non-%s __loader__ '
- '(probably a module in a zipped egg)' %
- (package, self.__class__))
- # We register ourselves as a __loader__ *only* to support the
- # setuptools _find_adapter adapter lookup; this class doesn't
- # actually support the PEP 302 loader "API". This is
- # excusable due to the following statement in the spec:
- # ... Loader objects are not
- # required to offer any useful functionality (any such functionality,
- # such as the zipimport get_data() method mentioned above, is
- # optional)...
- # A __loader__ attribute is basically metadata, and setuptools
- # uses it as such.
- package.__loader__ = self
- # we call register_loader_type for every instantiation of this
- # class; that's OK, it's idempotent to do it more than once.
- pkg_resources.register_loader_type(self.__class__, OverrideProvider)
- self.overrides = []
- self.overridden_package_name = package.__name__
-
- def insert(self, path, package, prefix):
- if not path or path.endswith('/'):
- override = DirectoryOverride(path, package, prefix)
- else:
- override = FileOverride(path, package, prefix)
- self.overrides.insert(0, override)
- return override
-
- def search_path(self, resource_name):
- for override in self.overrides:
- o = override(resource_name)
- if o is not None:
- package, name = o
- yield package, name
-
- def get_filename(self, resource_name):
- for package, rname in self.search_path(resource_name):
- if pkg_resources.resource_exists(package, rname):
- return pkg_resources.resource_filename(package, rname)
-
- def get_stream(self, resource_name):
- for package, rname in self.search_path(resource_name):
- if pkg_resources.resource_exists(package, rname):
- return pkg_resources.resource_stream(package, rname)
-
- def get_string(self, resource_name):
- for package, rname in self.search_path(resource_name):
- if pkg_resources.resource_exists(package, rname):
- return pkg_resources.resource_string(package, rname)
-
- def has_resource(self, resource_name):
- for package, rname in self.search_path(resource_name):
- if pkg_resources.resource_exists(package, rname):
- return True
-
- def isdir(self, resource_name):
- for package, rname in self.search_path(resource_name):
- if pkg_resources.resource_exists(package, rname):
- return pkg_resources.resource_isdir(package, rname)
-
- def listdir(self, resource_name):
- for package, rname in self.search_path(resource_name):
- if pkg_resources.resource_exists(package, rname):
- return pkg_resources.resource_listdir(package, rname)
-
-
-class DirectoryOverride:
- def __init__(self, path, package, prefix):
- self.path = path
- self.package = package
- self.prefix = prefix
- self.pathlen = len(self.path)
-
- def __call__(self, resource_name):
- if resource_name.startswith(self.path):
- name = '%s%s' % (self.prefix, resource_name[self.pathlen:])
- return self.package, name
-
-class FileOverride:
- def __init__(self, path, package, prefix):
- self.path = path
- self.package = package
- self.prefix = prefix
-
- def __call__(self, resource_name):
- if resource_name == self.path:
- return self.package, self.prefix
def resolve_asset_spec(spec, pname='__main__'):
if pname and not isinstance(pname, basestring):
diff --git a/pyramid/config/assets.py b/pyramid/config/assets.py
index cba171426..931ffb74c 100644
--- a/pyramid/config/assets.py
+++ b/pyramid/config/assets.py
@@ -1,12 +1,180 @@
+import pkg_resources
import sys
+from zope.interface import implements
+
from pyramid.interfaces import IPackageOverrides
-from pyramid.asset import PackageOverrides
from pyramid.exceptions import ConfigurationError
+from pyramid.threadlocal import get_current_registry
from pyramid.config.util import action_method
+class OverrideProvider(pkg_resources.DefaultProvider):
+ def __init__(self, module):
+ pkg_resources.DefaultProvider.__init__(self, module)
+ self.module_name = module.__name__
+
+ def _get_overrides(self):
+ reg = get_current_registry()
+ overrides = reg.queryUtility(IPackageOverrides, self.module_name)
+ return overrides
+
+ def get_resource_filename(self, manager, resource_name):
+ """ Return a true filesystem path for resource_name,
+ co-ordinating the extraction with manager, if the resource
+ must be unpacked to the filesystem.
+ """
+ overrides = self._get_overrides()
+ if overrides is not None:
+ filename = overrides.get_filename(resource_name)
+ if filename is not None:
+ return filename
+ return pkg_resources.DefaultProvider.get_resource_filename(
+ self, manager, resource_name)
+
+ def get_resource_stream(self, manager, resource_name):
+ """ Return a readable file-like object for resource_name."""
+ overrides = self._get_overrides()
+ if overrides is not None:
+ stream = overrides.get_stream(resource_name)
+ if stream is not None:
+ return stream
+ return pkg_resources.DefaultProvider.get_resource_stream(
+ self, manager, resource_name)
+
+ def get_resource_string(self, manager, resource_name):
+ """ Return a string containing the contents of resource_name."""
+ overrides = self._get_overrides()
+ if overrides is not None:
+ string = overrides.get_string(resource_name)
+ if string is not None:
+ return string
+ return pkg_resources.DefaultProvider.get_resource_string(
+ self, manager, resource_name)
+
+ def has_resource(self, resource_name):
+ overrides = self._get_overrides()
+ if overrides is not None:
+ result = overrides.has_resource(resource_name)
+ if result is not None:
+ return result
+ return pkg_resources.DefaultProvider.has_resource(
+ self, resource_name)
+
+ def resource_isdir(self, resource_name):
+ overrides = self._get_overrides()
+ if overrides is not None:
+ result = overrides.isdir(resource_name)
+ if result is not None:
+ return result
+ return pkg_resources.DefaultProvider.resource_isdir(
+ self, resource_name)
+
+ def resource_listdir(self, resource_name):
+ overrides = self._get_overrides()
+ if overrides is not None:
+ result = overrides.listdir(resource_name)
+ if result is not None:
+ return result
+ return pkg_resources.DefaultProvider.resource_listdir(
+ self, resource_name)
+
+class PackageOverrides:
+ implements(IPackageOverrides)
+ # pkg_resources arg in kw args below for testing
+ def __init__(self, package, pkg_resources=pkg_resources):
+ if hasattr(package, '__loader__') and not isinstance(package.__loader__,
+ self.__class__):
+ raise TypeError('Package %s already has a non-%s __loader__ '
+ '(probably a module in a zipped egg)' %
+ (package, self.__class__))
+ # We register ourselves as a __loader__ *only* to support the
+ # setuptools _find_adapter adapter lookup; this class doesn't
+ # actually support the PEP 302 loader "API". This is
+ # excusable due to the following statement in the spec:
+ # ... Loader objects are not
+ # required to offer any useful functionality (any such functionality,
+ # such as the zipimport get_data() method mentioned above, is
+ # optional)...
+ # A __loader__ attribute is basically metadata, and setuptools
+ # uses it as such.
+ package.__loader__ = self
+ # we call register_loader_type for every instantiation of this
+ # class; that's OK, it's idempotent to do it more than once.
+ pkg_resources.register_loader_type(self.__class__, OverrideProvider)
+ self.overrides = []
+ self.overridden_package_name = package.__name__
+
+ def insert(self, path, package, prefix):
+ if not path or path.endswith('/'):
+ override = DirectoryOverride(path, package, prefix)
+ else:
+ override = FileOverride(path, package, prefix)
+ self.overrides.insert(0, override)
+ return override
+
+ def search_path(self, resource_name):
+ for override in self.overrides:
+ o = override(resource_name)
+ if o is not None:
+ package, name = o
+ yield package, name
+
+ def get_filename(self, resource_name):
+ for package, rname in self.search_path(resource_name):
+ if pkg_resources.resource_exists(package, rname):
+ return pkg_resources.resource_filename(package, rname)
+
+ def get_stream(self, resource_name):
+ for package, rname in self.search_path(resource_name):
+ if pkg_resources.resource_exists(package, rname):
+ return pkg_resources.resource_stream(package, rname)
+
+ def get_string(self, resource_name):
+ for package, rname in self.search_path(resource_name):
+ if pkg_resources.resource_exists(package, rname):
+ return pkg_resources.resource_string(package, rname)
+
+ def has_resource(self, resource_name):
+ for package, rname in self.search_path(resource_name):
+ if pkg_resources.resource_exists(package, rname):
+ return True
+
+ def isdir(self, resource_name):
+ for package, rname in self.search_path(resource_name):
+ if pkg_resources.resource_exists(package, rname):
+ return pkg_resources.resource_isdir(package, rname)
+
+ def listdir(self, resource_name):
+ for package, rname in self.search_path(resource_name):
+ if pkg_resources.resource_exists(package, rname):
+ return pkg_resources.resource_listdir(package, rname)
+
+
+class DirectoryOverride:
+ def __init__(self, path, package, prefix):
+ self.path = path
+ self.package = package
+ self.prefix = prefix
+ self.pathlen = len(self.path)
+
+ def __call__(self, resource_name):
+ if resource_name.startswith(self.path):
+ name = '%s%s' % (self.prefix, resource_name[self.pathlen:])
+ return self.package, name
+
+class FileOverride:
+ def __init__(self, path, package, prefix):
+ self.path = path
+ self.package = package
+ self.prefix = prefix
+
+ def __call__(self, resource_name):
+ if resource_name == self.path:
+ return self.package, self.prefix
+
+
class AssetsConfiguratorMixin(object):
def _override(self, package, path, override_package, override_prefix,
PackageOverrides=PackageOverrides):
@@ -71,3 +239,4 @@ class AssetsConfiguratorMixin(object):
override_resource = override_asset # bw compat
+
diff --git a/pyramid/tests/test_asset.py b/pyramid/tests/test_asset.py
index 1bd855cdb..badb91d91 100644
--- a/pyramid/tests/test_asset.py
+++ b/pyramid/tests/test_asset.py
@@ -1,404 +1,4 @@
import unittest
-from pyramid.testing import cleanUp
-
-class TestOverrideProvider(unittest.TestCase):
- def setUp(self):
- cleanUp()
-
- def tearDown(self):
- cleanUp()
-
- def _getTargetClass(self):
- from pyramid.asset import OverrideProvider
- return OverrideProvider
-
- def _makeOne(self, module):
- klass = self._getTargetClass()
- return klass(module)
-
- def _registerOverrides(self, overrides, name='pyramid.tests'):
- from pyramid.interfaces import IPackageOverrides
- from pyramid.threadlocal import get_current_registry
- reg = get_current_registry()
- reg.registerUtility(overrides, IPackageOverrides, name=name)
-
- def test_get_resource_filename_no_overrides(self):
- import os
- resource_name = 'test_asset.py'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- here = os.path.dirname(os.path.abspath(__file__))
- expected = os.path.join(here, resource_name)
- result = provider.get_resource_filename(None, resource_name)
- self.assertEqual(result, expected)
-
- def test_get_resource_stream_no_overrides(self):
- import os
- resource_name = 'test_asset.py'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- here = os.path.dirname(os.path.abspath(__file__))
- expected = open(os.path.join(here, resource_name)).read()
- result = provider.get_resource_stream(None, resource_name)
- self.assertEqual(result.read().replace('\r', ''), expected)
-
- def test_get_resource_string_no_overrides(self):
- import os
- resource_name = 'test_asset.py'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- here = os.path.dirname(os.path.abspath(__file__))
- expected = open(os.path.join(here, resource_name)).read()
- result = provider.get_resource_string(None, resource_name)
- self.assertEqual(result.replace('\r', ''), expected)
-
- def test_has_resource_no_overrides(self):
- resource_name = 'test_asset.py'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- result = provider.has_resource(resource_name)
- self.assertEqual(result, True)
-
- def test_resource_isdir_no_overrides(self):
- file_resource_name = 'test_asset.py'
- directory_resource_name = 'fixtures'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- result = provider.resource_isdir(file_resource_name)
- self.assertEqual(result, False)
- result = provider.resource_isdir(directory_resource_name)
- self.assertEqual(result, True)
-
- def test_resource_listdir_no_overrides(self):
- resource_name = 'fixtures'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- result = provider.resource_listdir(resource_name)
- self.assertTrue(result)
-
- def test_get_resource_filename_override_returns_None(self):
- overrides = DummyOverrides(None)
- self._registerOverrides(overrides)
- import os
- resource_name = 'test_asset.py'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- here = os.path.dirname(os.path.abspath(__file__))
- expected = os.path.join(here, resource_name)
- result = provider.get_resource_filename(None, resource_name)
- self.assertEqual(result, expected)
-
- def test_get_resource_stream_override_returns_None(self):
- overrides = DummyOverrides(None)
- self._registerOverrides(overrides)
- import os
- resource_name = 'test_asset.py'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- here = os.path.dirname(os.path.abspath(__file__))
- expected = open(os.path.join(here, resource_name)).read()
- result = provider.get_resource_stream(None, resource_name)
- self.assertEqual(result.read(), expected)
-
- def test_get_resource_string_override_returns_None(self):
- overrides = DummyOverrides(None)
- self._registerOverrides(overrides)
- import os
- resource_name = 'test_asset.py'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- here = os.path.dirname(os.path.abspath(__file__))
- expected = open(os.path.join(here, resource_name)).read()
- result = provider.get_resource_string(None, resource_name)
- self.assertEqual(result, expected)
-
- def test_has_resource_override_returns_None(self):
- overrides = DummyOverrides(None)
- self._registerOverrides(overrides)
- resource_name = 'test_asset.py'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- result = provider.has_resource(resource_name)
- self.assertEqual(result, True)
-
- def test_resource_isdir_override_returns_None(self):
- overrides = DummyOverrides(None)
- self._registerOverrides(overrides)
- resource_name = 'fixtures'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- result = provider.resource_isdir(resource_name)
- self.assertEqual(result, True)
-
- def test_resource_listdir_override_returns_None(self):
- overrides = DummyOverrides(None)
- self._registerOverrides(overrides)
- resource_name = 'fixtures'
- import pyramid.tests
- provider = self._makeOne(pyramid.tests)
- result = provider.resource_listdir(resource_name)
- self.assertTrue(result)
-
- def test_get_resource_filename_override_returns_value(self):
- overrides = DummyOverrides('value')
- import pyramid.tests
- self._registerOverrides(overrides)
- provider = self._makeOne(pyramid.tests)
- result = provider.get_resource_filename(None, 'test_asset.py')
- self.assertEqual(result, 'value')
-
- def test_get_resource_stream_override_returns_value(self):
- overrides = DummyOverrides('value')
- import pyramid.tests
- self._registerOverrides(overrides)
- provider = self._makeOne(pyramid.tests)
- result = provider.get_resource_stream(None, 'test_asset.py')
- self.assertEqual(result, 'value')
-
- def test_get_resource_string_override_returns_value(self):
- overrides = DummyOverrides('value')
- import pyramid.tests
- self._registerOverrides(overrides)
- provider = self._makeOne(pyramid.tests)
- result = provider.get_resource_string(None, 'test_asset.py')
- self.assertEqual(result, 'value')
-
- def test_has_resource_override_returns_True(self):
- overrides = DummyOverrides(True)
- import pyramid.tests
- self._registerOverrides(overrides)
- provider = self._makeOne(pyramid.tests)
- result = provider.has_resource('test_asset.py')
- self.assertEqual(result, True)
-
- def test_resource_isdir_override_returns_False(self):
- overrides = DummyOverrides(False)
- import pyramid.tests
- self._registerOverrides(overrides)
- provider = self._makeOne(pyramid.tests)
- result = provider.resource_isdir('fixtures')
- self.assertEqual(result, False)
-
- def test_resource_listdir_override_returns_values(self):
- overrides = DummyOverrides(['a'])
- import pyramid.tests
- self._registerOverrides(overrides)
- provider = self._makeOne(pyramid.tests)
- result = provider.resource_listdir('fixtures')
- self.assertEqual(result, ['a'])
-
-class TestPackageOverrides(unittest.TestCase):
- def _getTargetClass(self):
- from pyramid.asset import PackageOverrides
- return PackageOverrides
-
- def _makeOne(self, package, pkg_resources=None):
- klass = self._getTargetClass()
- if pkg_resources is None:
- pkg_resources = DummyPkgResources()
- return klass(package, pkg_resources=pkg_resources)
-
- def test_ctor_package_already_has_loader_of_different_type(self):
- package = DummyPackage('package')
- package.__loader__ = True
- self.assertRaises(TypeError, self._makeOne, package)
-
- def test_ctor_package_already_has_loader_of_same_type(self):
- package = DummyPackage('package')
- package.__loader__ = self._makeOne(package)
- po = self._makeOne(package)
- self.assertEqual(package.__loader__, po)
-
- def test_ctor_sets_loader(self):
- package = DummyPackage('package')
- po = self._makeOne(package)
- self.assertEqual(package.__loader__, po)
-
- def test_ctor_registers_loader_type(self):
- from pyramid.resource import OverrideProvider
- dummy_pkg_resources = DummyPkgResources()
- package = DummyPackage('package')
- po = self._makeOne(package, dummy_pkg_resources)
- self.assertEqual(dummy_pkg_resources.registered, [(po.__class__,
- OverrideProvider)])
-
- def test_ctor_sets_local_state(self):
- package = DummyPackage('package')
- po = self._makeOne(package)
- self.assertEqual(po.overrides, [])
- self.assertEqual(po.overridden_package_name, 'package')
-
- def test_insert_directory(self):
- from pyramid.resource import DirectoryOverride
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= [None]
- po.insert('foo/', 'package', 'bar/')
- self.assertEqual(len(po.overrides), 2)
- override = po.overrides[0]
- self.assertEqual(override.__class__, DirectoryOverride)
-
- def test_insert_file(self):
- from pyramid.resource import FileOverride
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= [None]
- po.insert('foo.pt', 'package', 'bar.pt')
- self.assertEqual(len(po.overrides), 2)
- override = po.overrides[0]
- self.assertEqual(override.__class__, FileOverride)
-
- def test_insert_emptystring(self):
- # XXX is this a valid case for a directory?
- from pyramid.resource import DirectoryOverride
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= [None]
- po.insert('', 'package', 'bar/')
- self.assertEqual(len(po.overrides), 2)
- override = po.overrides[0]
- self.assertEqual(override.__class__, DirectoryOverride)
-
- def test_search_path(self):
- overrides = [ DummyOverride(None), DummyOverride(('package', 'name'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(list(po.search_path('whatever')),
- [('package', 'name')])
-
- def test_get_filename(self):
- import os
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'test_asset.py'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- here = os.path.dirname(os.path.abspath(__file__))
- expected = os.path.join(here, 'test_asset.py')
- self.assertEqual(po.get_filename('whatever'), expected)
-
- def test_get_filename_file_doesnt_exist(self):
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'wont_exist'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(po.get_filename('whatever'), None)
-
- def test_get_stream(self):
- import os
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'test_asset.py'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- here = os.path.dirname(os.path.abspath(__file__))
- expected = open(os.path.join(here, 'test_asset.py')).read()
- self.assertEqual(po.get_stream('whatever').read().replace('\r', ''),
- expected)
-
- def test_get_stream_file_doesnt_exist(self):
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'wont_exist'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(po.get_stream('whatever'), None)
-
- def test_get_string(self):
- import os
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'test_asset.py'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- here = os.path.dirname(os.path.abspath(__file__))
- expected = open(os.path.join(here, 'test_asset.py')).read()
- self.assertEqual(po.get_string('whatever').replace('\r', ''), expected)
-
- def test_get_string_file_doesnt_exist(self):
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'wont_exist'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(po.get_string('whatever'), None)
-
- def test_has_resource(self):
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'test_asset.py'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(po.has_resource('whatever'), True)
-
- def test_has_resource_file_doesnt_exist(self):
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'wont_exist'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(po.has_resource('whatever'), None)
-
- def test_isdir_false(self):
- overrides = [ DummyOverride(
- ('pyramid.tests', 'test_asset.py'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(po.isdir('whatever'), False)
-
- def test_isdir_true(self):
- overrides = [ DummyOverride(
- ('pyramid.tests', 'fixtures'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(po.isdir('whatever'), True)
-
- def test_isdir_doesnt_exist(self):
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'wont_exist'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(po.isdir('whatever'), None)
-
- def test_listdir(self):
- overrides = [ DummyOverride(
- ('pyramid.tests', 'fixtures'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertTrue(po.listdir('whatever'))
-
- def test_listdir_doesnt_exist(self):
- overrides = [ DummyOverride(None), DummyOverride(
- ('pyramid.tests', 'wont_exist'))]
- package = DummyPackage('package')
- po = self._makeOne(package)
- po.overrides= overrides
- self.assertEqual(po.listdir('whatever'), None)
-
-class TestDirectoryOverride(unittest.TestCase):
- def _getTargetClass(self):
- from pyramid.asset import DirectoryOverride
- return DirectoryOverride
-
- def _makeOne(self, path, package, prefix):
- klass = self._getTargetClass()
- return klass(path, package, prefix)
-
- def test_it_match(self):
- o = self._makeOne('foo/', 'package', 'bar/')
- result = o('foo/something.pt')
- self.assertEqual(result, ('package', 'bar/something.pt'))
-
- def test_it_no_match(self):
- o = self._makeOne('foo/', 'package', 'bar/')
- result = o('baz/notfound.pt')
- self.assertEqual(result, None)
class Test_resolve_asset_spec(unittest.TestCase):
def _callFUT(self, spec, package_name='__main__'):
@@ -443,25 +43,6 @@ class Test_resolve_asset_spec(unittest.TestCase):
self.assertEqual(filename, 'test_asset.py')
-class TestFileOverride(unittest.TestCase):
- def _getTargetClass(self):
- from pyramid.asset import FileOverride
- return FileOverride
-
- def _makeOne(self, path, package, prefix):
- klass = self._getTargetClass()
- return klass(path, package, prefix)
-
- def test_it_match(self):
- o = self._makeOne('foo.pt', 'package', 'bar.pt')
- result = o('foo.pt')
- self.assertEqual(result, ('package', 'bar.pt'))
-
- def test_it_no_match(self):
- o = self._makeOne('foo.pt', 'package', 'bar.pt')
- result = o('notfound.pt')
- self.assertEqual(result, None)
-
class Test_abspath_from_asset_spec(unittest.TestCase):
def _callFUT(self, spec, pname='__main__'):
from pyramid.resource import abspath_from_asset_spec
@@ -508,29 +89,6 @@ class Test_asset_spec_from_abspath(unittest.TestCase):
self.assertEqual(result, abspath)
-class DummyOverride:
- def __init__(self, result):
- self.result = result
-
- def __call__(self, resource_name):
- return self.result
-
-class DummyOverrides:
- def __init__(self, result):
- self.result = result
-
- def get_filename(self, resource_name):
- return self.result
-
- listdir = isdir = has_resource = get_stream = get_string = get_filename
-
-class DummyPkgResources:
- def __init__(self):
- self.registered = []
-
- def register_loader_type(self, typ, inst):
- self.registered.append((typ, inst))
-
class DummyPackage:
def __init__(self, name):
self.__name__ = name
diff --git a/pyramid/tests/test_config/fixtures/dummy.txt b/pyramid/tests/test_config/fixtures/dummy.txt
new file mode 100644
index 000000000..18832d351
--- /dev/null
+++ b/pyramid/tests/test_config/fixtures/dummy.txt
@@ -0,0 +1 @@
+Hello.
diff --git a/pyramid/tests/test_config/test_assets.py b/pyramid/tests/test_config/test_assets.py
new file mode 100644
index 000000000..d9d48f333
--- /dev/null
+++ b/pyramid/tests/test_config/test_assets.py
@@ -0,0 +1,447 @@
+import unittest
+from pyramid.testing import cleanUp
+
+class TestOverrideProvider(unittest.TestCase):
+ def setUp(self):
+ cleanUp()
+
+ def tearDown(self):
+ cleanUp()
+
+ def _getTargetClass(self):
+ from pyramid.config.assets import OverrideProvider
+ return OverrideProvider
+
+ def _makeOne(self, module):
+ klass = self._getTargetClass()
+ return klass(module)
+
+ def _registerOverrides(self, overrides, name='pyramid.tests.test_config'):
+ from pyramid.interfaces import IPackageOverrides
+ from pyramid.threadlocal import get_current_registry
+ reg = get_current_registry()
+ reg.registerUtility(overrides, IPackageOverrides, name=name)
+
+ def test_get_resource_filename_no_overrides(self):
+ import os
+ resource_name = 'test_assets.py'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ here = os.path.dirname(os.path.abspath(__file__))
+ expected = os.path.join(here, resource_name)
+ result = provider.get_resource_filename(None, resource_name)
+ self.assertEqual(result, expected)
+
+ def test_get_resource_stream_no_overrides(self):
+ import os
+ resource_name = 'test_assets.py'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ here = os.path.dirname(os.path.abspath(__file__))
+ expected = open(os.path.join(here, resource_name)).read()
+ result = provider.get_resource_stream(None, resource_name)
+ self.assertEqual(result.read().replace('\r', ''), expected)
+
+ def test_get_resource_string_no_overrides(self):
+ import os
+ resource_name = 'test_assets.py'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ here = os.path.dirname(os.path.abspath(__file__))
+ expected = open(os.path.join(here, resource_name)).read()
+ result = provider.get_resource_string(None, resource_name)
+ self.assertEqual(result.replace('\r', ''), expected)
+
+ def test_has_resource_no_overrides(self):
+ resource_name = 'test_assets.py'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.has_resource(resource_name)
+ self.assertEqual(result, True)
+
+ def test_resource_isdir_no_overrides(self):
+ file_resource_name = 'test_assets.py'
+ directory_resource_name = 'fixtures'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.resource_isdir(file_resource_name)
+ self.assertEqual(result, False)
+ result = provider.resource_isdir(directory_resource_name)
+ self.assertEqual(result, True)
+
+ def test_resource_listdir_no_overrides(self):
+ resource_name = 'fixtures'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.resource_listdir(resource_name)
+ self.assertTrue(result)
+
+ def test_get_resource_filename_override_returns_None(self):
+ overrides = DummyOverrides(None)
+ self._registerOverrides(overrides)
+ import os
+ resource_name = 'test_assets.py'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ here = os.path.dirname(os.path.abspath(__file__))
+ expected = os.path.join(here, resource_name)
+ result = provider.get_resource_filename(None, resource_name)
+ self.assertEqual(result, expected)
+
+ def test_get_resource_stream_override_returns_None(self):
+ overrides = DummyOverrides(None)
+ self._registerOverrides(overrides)
+ import os
+ resource_name = 'test_assets.py'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ here = os.path.dirname(os.path.abspath(__file__))
+ expected = open(os.path.join(here, resource_name)).read()
+ result = provider.get_resource_stream(None, resource_name)
+ self.assertEqual(result.read(), expected)
+
+ def test_get_resource_string_override_returns_None(self):
+ overrides = DummyOverrides(None)
+ self._registerOverrides(overrides)
+ import os
+ resource_name = 'test_assets.py'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ here = os.path.dirname(os.path.abspath(__file__))
+ expected = open(os.path.join(here, resource_name)).read()
+ result = provider.get_resource_string(None, resource_name)
+ self.assertEqual(result, expected)
+
+ def test_has_resource_override_returns_None(self):
+ overrides = DummyOverrides(None)
+ self._registerOverrides(overrides)
+ resource_name = 'test_assets.py'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.has_resource(resource_name)
+ self.assertEqual(result, True)
+
+ def test_resource_isdir_override_returns_None(self):
+ overrides = DummyOverrides(None)
+ self._registerOverrides(overrides)
+ resource_name = 'fixtures'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.resource_isdir(resource_name)
+ self.assertEqual(result, True)
+
+ def test_resource_listdir_override_returns_None(self):
+ overrides = DummyOverrides(None)
+ self._registerOverrides(overrides)
+ resource_name = 'fixtures'
+ import pyramid.tests.test_config
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.resource_listdir(resource_name)
+ self.assertTrue(result)
+
+ def test_get_resource_filename_override_returns_value(self):
+ overrides = DummyOverrides('value')
+ import pyramid.tests.test_config
+ self._registerOverrides(overrides)
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.get_resource_filename(None, 'test_assets.py')
+ self.assertEqual(result, 'value')
+
+ def test_get_resource_stream_override_returns_value(self):
+ overrides = DummyOverrides('value')
+ import pyramid.tests.test_config
+ self._registerOverrides(overrides)
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.get_resource_stream(None, 'test_assets.py')
+ self.assertEqual(result, 'value')
+
+ def test_get_resource_string_override_returns_value(self):
+ overrides = DummyOverrides('value')
+ import pyramid.tests.test_config
+ self._registerOverrides(overrides)
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.get_resource_string(None, 'test_assets.py')
+ self.assertEqual(result, 'value')
+
+ def test_has_resource_override_returns_True(self):
+ overrides = DummyOverrides(True)
+ import pyramid.tests.test_config
+ self._registerOverrides(overrides)
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.has_resource('test_assets.py')
+ self.assertEqual(result, True)
+
+ def test_resource_isdir_override_returns_False(self):
+ overrides = DummyOverrides(False)
+ import pyramid.tests.test_config
+ self._registerOverrides(overrides)
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.resource_isdir('fixtures')
+ self.assertEqual(result, False)
+
+ def test_resource_listdir_override_returns_values(self):
+ overrides = DummyOverrides(['a'])
+ import pyramid.tests.test_config
+ self._registerOverrides(overrides)
+ provider = self._makeOne(pyramid.tests.test_config)
+ result = provider.resource_listdir('fixtures')
+ self.assertEqual(result, ['a'])
+
+class TestPackageOverrides(unittest.TestCase):
+ def _getTargetClass(self):
+ from pyramid.config.assets import PackageOverrides
+ return PackageOverrides
+
+ def _makeOne(self, package, pkg_resources=None):
+ klass = self._getTargetClass()
+ if pkg_resources is None:
+ pkg_resources = DummyPkgResources()
+ return klass(package, pkg_resources=pkg_resources)
+
+ def test_ctor_package_already_has_loader_of_different_type(self):
+ package = DummyPackage('package')
+ package.__loader__ = True
+ self.assertRaises(TypeError, self._makeOne, package)
+
+ def test_ctor_package_already_has_loader_of_same_type(self):
+ package = DummyPackage('package')
+ package.__loader__ = self._makeOne(package)
+ po = self._makeOne(package)
+ self.assertEqual(package.__loader__, po)
+
+ def test_ctor_sets_loader(self):
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ self.assertEqual(package.__loader__, po)
+
+ def test_ctor_registers_loader_type(self):
+ from pyramid.config.assets import OverrideProvider
+ dummy_pkg_resources = DummyPkgResources()
+ package = DummyPackage('package')
+ po = self._makeOne(package, dummy_pkg_resources)
+ self.assertEqual(dummy_pkg_resources.registered, [(po.__class__,
+ OverrideProvider)])
+
+ def test_ctor_sets_local_state(self):
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ self.assertEqual(po.overrides, [])
+ self.assertEqual(po.overridden_package_name, 'package')
+
+ def test_insert_directory(self):
+ from pyramid.config.assets import DirectoryOverride
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= [None]
+ po.insert('foo/', 'package', 'bar/')
+ self.assertEqual(len(po.overrides), 2)
+ override = po.overrides[0]
+ self.assertEqual(override.__class__, DirectoryOverride)
+
+ def test_insert_file(self):
+ from pyramid.config.assets import FileOverride
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= [None]
+ po.insert('foo.pt', 'package', 'bar.pt')
+ self.assertEqual(len(po.overrides), 2)
+ override = po.overrides[0]
+ self.assertEqual(override.__class__, FileOverride)
+
+ def test_insert_emptystring(self):
+ # XXX is this a valid case for a directory?
+ from pyramid.config.assets import DirectoryOverride
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= [None]
+ po.insert('', 'package', 'bar/')
+ self.assertEqual(len(po.overrides), 2)
+ override = po.overrides[0]
+ self.assertEqual(override.__class__, DirectoryOverride)
+
+ def test_search_path(self):
+ overrides = [ DummyOverride(None), DummyOverride(('package', 'name'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(list(po.search_path('whatever')),
+ [('package', 'name')])
+
+ def test_get_filename(self):
+ import os
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'test_assets.py'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ here = os.path.dirname(os.path.abspath(__file__))
+ expected = os.path.join(here, 'test_assets.py')
+ self.assertEqual(po.get_filename('whatever'), expected)
+
+ def test_get_filename_file_doesnt_exist(self):
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'wont_exist'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(po.get_filename('whatever'), None)
+
+ def test_get_stream(self):
+ import os
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'test_assets.py'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ here = os.path.dirname(os.path.abspath(__file__))
+ expected = open(os.path.join(here, 'test_assets.py')).read()
+ self.assertEqual(po.get_stream('whatever').read().replace('\r', ''),
+ expected)
+
+ def test_get_stream_file_doesnt_exist(self):
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'wont_exist'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(po.get_stream('whatever'), None)
+
+ def test_get_string(self):
+ import os
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'test_assets.py'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ here = os.path.dirname(os.path.abspath(__file__))
+ expected = open(os.path.join(here, 'test_assets.py')).read()
+ self.assertEqual(po.get_string('whatever').replace('\r', ''), expected)
+
+ def test_get_string_file_doesnt_exist(self):
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'wont_exist'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(po.get_string('whatever'), None)
+
+ def test_has_resource(self):
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'test_assets.py'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(po.has_resource('whatever'), True)
+
+ def test_has_resource_file_doesnt_exist(self):
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'wont_exist'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(po.has_resource('whatever'), None)
+
+ def test_isdir_false(self):
+ overrides = [ DummyOverride(
+ ('pyramid.tests.test_config', 'test_assets.py'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(po.isdir('whatever'), False)
+
+ def test_isdir_true(self):
+ overrides = [ DummyOverride(
+ ('pyramid.tests.test_config', 'fixtures'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(po.isdir('whatever'), True)
+
+ def test_isdir_doesnt_exist(self):
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'wont_exist'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(po.isdir('whatever'), None)
+
+ def test_listdir(self):
+ overrides = [ DummyOverride(
+ ('pyramid.tests.test_config', 'fixtures'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertTrue(po.listdir('whatever'))
+
+ def test_listdir_doesnt_exist(self):
+ overrides = [ DummyOverride(None), DummyOverride(
+ ('pyramid.tests.test_config', 'wont_exist'))]
+ package = DummyPackage('package')
+ po = self._makeOne(package)
+ po.overrides= overrides
+ self.assertEqual(po.listdir('whatever'), None)
+
+class TestDirectoryOverride(unittest.TestCase):
+ def _getTargetClass(self):
+ from pyramid.config.assets import DirectoryOverride
+ return DirectoryOverride
+
+ def _makeOne(self, path, package, prefix):
+ klass = self._getTargetClass()
+ return klass(path, package, prefix)
+
+ def test_it_match(self):
+ o = self._makeOne('foo/', 'package', 'bar/')
+ result = o('foo/something.pt')
+ self.assertEqual(result, ('package', 'bar/something.pt'))
+
+ def test_it_no_match(self):
+ o = self._makeOne('foo/', 'package', 'bar/')
+ result = o('baz/notfound.pt')
+ self.assertEqual(result, None)
+
+class TestFileOverride(unittest.TestCase):
+ def _getTargetClass(self):
+ from pyramid.config.assets import FileOverride
+ return FileOverride
+
+ def _makeOne(self, path, package, prefix):
+ klass = self._getTargetClass()
+ return klass(path, package, prefix)
+
+ def test_it_match(self):
+ o = self._makeOne('foo.pt', 'package', 'bar.pt')
+ result = o('foo.pt')
+ self.assertEqual(result, ('package', 'bar.pt'))
+
+ def test_it_no_match(self):
+ o = self._makeOne('foo.pt', 'package', 'bar.pt')
+ result = o('notfound.pt')
+ self.assertEqual(result, None)
+
+class DummyOverride:
+ def __init__(self, result):
+ self.result = result
+
+ def __call__(self, resource_name):
+ return self.result
+
+class DummyOverrides:
+ def __init__(self, result):
+ self.result = result
+
+ def get_filename(self, resource_name):
+ return self.result
+
+ listdir = isdir = has_resource = get_stream = get_string = get_filename
+
+class DummyPkgResources:
+ def __init__(self):
+ self.registered = []
+
+ def register_loader_type(self, typ, inst):
+ self.registered.append((typ, inst))
+
+class DummyPackage:
+ def __init__(self, name):
+ self.__name__ = name