From bd21568e61248e51f48a9a146cb837fa0252d162 Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Wed, 7 Feb 2024 23:20:24 -0700 Subject: [PATCH 1/3] issue a warning if a static view is referencing a package that doesn't exist --- src/pyramid/static.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/pyramid/static.py b/src/pyramid/static.py index 100d17676..c3489ae89 100644 --- a/src/pyramid/static.py +++ b/src/pyramid/static.py @@ -4,6 +4,7 @@ import os from os.path import exists, getmtime, getsize, isdir, join, normcase, normpath from pkg_resources import resource_exists, resource_filename, resource_isdir +import warnings from pyramid.asset import abspath_from_asset_spec, resolve_asset_spec from pyramid.httpexceptions import HTTPMovedPermanently, HTTPNotFound @@ -92,6 +93,19 @@ def __init__( if package_name is None: package_name = caller_package().__name__ package_name, docroot = resolve_asset_spec(root_dir, package_name) + if package_name: + try: + __import__(package_name) + except ImportError: + warnings.warn( + f'A "pyramid.static.static_view" is being created with an' + f' asset spec referencing a package "{package_name}" that' + f' does not exist. This will break in the future.' + f' If this is done to override an asset, you must adjust' + f' this to override a location inside a real package.', + DeprecationWarning, + stacklevel=1, + ) self.use_subpath = use_subpath self.package_name = package_name self.docroot = docroot From d918c8fe0e4ed5cd446aaae839eb4ee34cbead86 Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Wed, 7 Feb 2024 23:28:02 -0700 Subject: [PATCH 2/3] add deprecation to changelog --- CHANGES.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index e712449ca..30005c96f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -61,6 +61,17 @@ Backward Incompatibilities These have been deprecated in Python's gettext module since 3.8, and removed in Python 3.11. +Deprecations +------------ + +- Deprecated the ability to use a non-existent package with + ``pyramid.config.Configurator.add_static_view`` and + ``pyramid.static.static_view``. This can be fixed by choosing a path + located within a real package as the ``root_dir`` for your static files. + This is almost always either a misconfig or an attempt to define an alias + location for use with ``pyramid.config.Configurator.override_asset``. + See https://github.com/Pylons/pyramid/pull/3752 + Documentation Changes --------------------- From b2e6f361d2d1a21b9a0cdc63f12e290ece72bc4c Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Wed, 7 Feb 2024 23:33:32 -0700 Subject: [PATCH 3/3] fix warning stacklevel --- src/pyramid/static.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyramid/static.py b/src/pyramid/static.py index c3489ae89..4091bbfbc 100644 --- a/src/pyramid/static.py +++ b/src/pyramid/static.py @@ -104,7 +104,7 @@ def __init__( f' If this is done to override an asset, you must adjust' f' this to override a location inside a real package.', DeprecationWarning, - stacklevel=1, + stacklevel=2, ) self.use_subpath = use_subpath self.package_name = package_name