summaryrefslogtreecommitdiff
path: root/repoze/bfg/resource.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-07-22 19:14:27 +0000
committerChris McDonough <chrism@agendaless.com>2009-07-22 19:14:27 +0000
commit3099cfbbe404aaed7004e421aab09cf77b285c1a (patch)
tree205785be7bd36d55e127ad44faaf873d6c910b88 /repoze/bfg/resource.py
parentb8e2b16985c7e5b4cabf87be73c6384266b8d3b6 (diff)
downloadpyramid-3099cfbbe404aaed7004e421aab09cf77b285c1a.tar.gz
pyramid-3099cfbbe404aaed7004e421aab09cf77b285c1a.tar.bz2
pyramid-3099cfbbe404aaed7004e421aab09cf77b285c1a.zip
- Added support for ``has_resource``, ``resource_isdir``, and
``resource_listdir`` to the resource "OverrideProvider"; this fixes a bug with a symptom that a file could not be overridden in a resource directory unless a file with the same name existed in the original directory being overridden.
Diffstat (limited to 'repoze/bfg/resource.py')
-rw-r--r--repoze/bfg/resource.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/repoze/bfg/resource.py b/repoze/bfg/resource.py
index 276c52878..babbbf84f 100644
--- a/repoze/bfg/resource.py
+++ b/repoze/bfg/resource.py
@@ -46,6 +46,33 @@ class OverrideProvider(pkg_resources.DefaultProvider):
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
@@ -102,6 +129,22 @@ class PackageOverrides:
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