From 832cae47693b4c07a1fa826dce13b9af7a91ebaf Mon Sep 17 00:00:00 2001 From: Theron Luhn Date: Sun, 24 Aug 2025 21:35:04 -0700 Subject: Add `get_spec` to asset sources. --- src/pyramid/config/assets.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/pyramid/config/assets.py b/src/pyramid/config/assets.py index 6f2ddbe4a..2838db1e5 100644 --- a/src/pyramid/config/assets.py +++ b/src/pyramid/config/assets.py @@ -223,6 +223,11 @@ class PackageAssetSource: def get_path(self, resource_name): return f'{self.prefix}{resource_name}' + def get_spec(self, resource_name): + path = self.get_path(resource_name) + if pkg_resources.resource_exists(self.pkg_name, path): + return f'{self.pkg_name}:{path}' + def get_filename(self, resource_name): path = self.get_path(resource_name) if pkg_resources.resource_exists(self.pkg_name, path): @@ -270,6 +275,9 @@ class FSAssetSource: path = self.prefix return path + def get_spec(self, resource_name): + return self.get_filename(resource_name) + def get_filename(self, resource_name): path = self.get_path(resource_name) if os.path.exists(path): -- cgit v1.2.3 From 9b9ac95c7207a5b0a5c2fd7ef56977e9b285f206 Mon Sep 17 00:00:00 2001 From: Theron Luhn Date: Sun, 24 Aug 2025 21:38:56 -0700 Subject: Add `get_spec` to `PackageOverrides` --- src/pyramid/config/assets.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/pyramid/config/assets.py b/src/pyramid/config/assets.py index 2838db1e5..3c6a8d360 100644 --- a/src/pyramid/config/assets.py +++ b/src/pyramid/config/assets.py @@ -122,6 +122,12 @@ class PackageOverrides: if o is not None: yield o + def get_spec(self, resource_name): + for source, path in self.filtered_sources(resource_name): + result = source.get_spec(path) + if result is not None: + return result + def get_filename(self, resource_name): for source, path in self.filtered_sources(resource_name): result = source.get_filename(path) -- cgit v1.2.3 From ed315c142c7f66f6ee9ff24f4bad6997b0b45bfb Mon Sep 17 00:00:00 2001 From: Theron Luhn Date: Sun, 24 Aug 2025 21:42:18 -0700 Subject: Add `get_spec` to `IPackageOverrides` --- src/pyramid/interfaces.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/pyramid/interfaces.py b/src/pyramid/interfaces.py index 4ee294189..063b0385e 100644 --- a/src/pyramid/interfaces.py +++ b/src/pyramid/interfaces.py @@ -1079,6 +1079,14 @@ class IPEP302Loader(Interface): class IPackageOverrides(IPEP302Loader): """Utility for pkg_resources overrides""" + def get_spec(resource_name): + """Return a specifier for the resource. + + The specifier may be a dotted Python name or an absolute path on the + filesystem. + + """ + # VH_ROOT_KEY is an interface; its imported from other packages (e.g. # traversalwrapper) -- cgit v1.2.3 From 73593a0d318121662de1ec56bfa838a390d45f96 Mon Sep 17 00:00:00 2001 From: Theron Luhn Date: Sun, 24 Aug 2025 22:01:32 -0700 Subject: Update implementation. --- src/pyramid/config/views.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/pyramid/config/views.py b/src/pyramid/config/views.py index fababf542..302704c3e 100644 --- a/src/pyramid/config/views.py +++ b/src/pyramid/config/views.py @@ -2338,14 +2338,7 @@ class StaticURLInfo: pathspec = f'{pkg_name}:{pkg_subpath}{subpath}' overrides = registry.queryUtility(IPackageOverrides, name=pkg_name) if overrides is not None: - resource_name = posixpath.join(pkg_subpath, subpath) - sources = overrides.filtered_sources(resource_name) - for source, filtered_path in sources: - rawspec = source.get_path(filtered_path) - if hasattr(source, 'pkg_name'): - rawspec = f'{source.pkg_name}:{rawspec}' - break - + rawspec = overrides.get_spec(f'{pkg_subpath}{subpath}') else: pathspec = pkg_subpath + subpath @@ -2354,6 +2347,7 @@ class StaticURLInfo: kw['pathspec'] = pathspec kw['rawspec'] = rawspec + print(kw) for spec_, cachebust, explicit in reversed(self.cache_busters): if (explicit and rawspec.startswith(spec_)) or ( not explicit and pathspec.startswith(spec_) -- cgit v1.2.3