File tree Expand file tree Collapse file tree 3 files changed +45
-1
lines changed Expand file tree Collapse file tree 3 files changed +45
-1
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,9 @@ Changelog
441.3 (unreleased)
55----------------
66
7+ - Also handle resource resolver errors gracefully in the GracefulResourceRenderer.
8+ [thet]
9+
710- Improve error messages by including more detailed information.
811 [thet]
912
Original file line number Diff line number Diff line change @@ -740,7 +740,19 @@ class GracefulResourceRenderer(ResourceRenderer):
740740
741741 def render (self ):
742742 lines = []
743- for resource in self .resolver .resolve ():
743+ resources = []
744+
745+ try :
746+ resources = self .resolver .resolve ()
747+ except (
748+ ResourceConflictError ,
749+ ResourceCircularDependencyError ,
750+ ResourceMissingDependencyError ,
751+ ) as e :
752+ error_message = str (e )
753+ logger .exception (error_message )
754+
755+ for resource in resources :
744756 error_message = None
745757 try :
746758 lines .append (resource .render (self .base_url ))
Original file line number Diff line number Diff line change @@ -811,6 +811,35 @@ def test_GracefulResourceRenderer(self):
811811 """<!-- File not found for resource <ScriptResource name="js2", depends="['js']"> - details in logs -->"""
812812 ))
813813
814+ def test_GreacefulResourceRenderer_resolver_errors (self ):
815+ # Get log level to restore it later
816+ import logging
817+ original_log_level = logging .getLogger ().getEffectiveLevel ()
818+
819+ # Create a resource with a circular dependency
820+ resource = Resource (name = 'res1' , resource = 'res1.ext' , depends = 'res1' )
821+
822+ resolver = wr .ResourceResolver ([resource ])
823+ renderer = wr .GracefulResourceRenderer (resolver )
824+
825+ rendered = None
826+ try :
827+ # Supress error traceback in logs
828+ logging .disable (logging .CRITICAL )
829+ rendered = renderer .render ()
830+ # Restore logging level
831+ logging .disable (original_log_level )
832+ except wr .ResourceCircularDependencyError : # pragma: nocover
833+ self .fail (
834+ 'GracefulResourceRenderer should not raise '
835+ 'ResourceCircularDependencyError'
836+ )
837+
838+ # No error is raised, but rendered is also empty.
839+ # However, a server rendered HTML based UI form should still be
840+ # interactible.
841+ self .assertEqual (rendered , "" )
842+
814843
815844if __name__ == '__main__' :
816845 unittest .main ()
You can’t perform that action at this time.
0 commit comments