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
4
4
1.3 (unreleased)
5
5
----------------
6
6
7
+ - Also handle resource resolver errors gracefully in the GracefulResourceRenderer.
8
+ [thet]
9
+
7
10
- Improve error messages by including more detailed information.
8
11
[thet]
9
12
Original file line number Diff line number Diff line change @@ -740,7 +740,19 @@ class GracefulResourceRenderer(ResourceRenderer):
740
740
741
741
def render (self ):
742
742
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 :
744
756
error_message = None
745
757
try :
746
758
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):
811
811
"""<!-- File not found for resource <ScriptResource name="js2", depends="['js']"> - details in logs -->"""
812
812
))
813
813
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
+
814
843
815
844
if __name__ == '__main__' :
816
845
unittest .main ()
You can’t perform that action at this time.
0 commit comments