From 3099cfbbe404aaed7004e421aab09cf77b285c1a Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Wed, 22 Jul 2009 19:14:27 +0000 Subject: - 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. --- repoze/bfg/resource.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'repoze/bfg/resource.py') 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 -- cgit v1.2.3