7
7
ResourceConfig ,
8
8
ResourceMixin
9
9
)
10
+ import logging
10
11
import os
11
12
import shutil
12
13
import tempfile
13
14
import unittest
14
15
import webresource as wr
15
16
16
-
17
17
try :
18
18
FileNotFoundError
19
19
except NameError : # pragma: nocover
20
20
FileNotFoundError = EnvironmentError
21
21
22
22
23
+ # Get log level to restore it later
24
+ original_log_level = logging .getLogger ().getEffectiveLevel ()
25
+
26
+
23
27
def temp_directory (fn ):
24
28
def wrapper (* a , ** kw ):
25
29
tempdir = tempfile .mkdtemp ()
@@ -812,10 +816,6 @@ def test_GracefulResourceRenderer(self):
812
816
))
813
817
814
818
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
819
# Create a resource with a circular dependency
820
820
resource = Resource (name = 'res1' , resource = 'res1.ext' , depends = 'res1' )
821
821
@@ -840,6 +840,61 @@ def test_GreacefulResourceRenderer_resolver_errors(self):
840
840
# interactible.
841
841
self .assertEqual (rendered , "" )
842
842
843
+ def test_GreacefulResourceRenderer_callback_resolver (self ):
844
+ # Callback which should be called on error
845
+ error_message = []
846
+
847
+ def callback (message ):
848
+ error_message .append (message )
849
+
850
+ # Create a resource with a circular dependency
851
+ resource = Resource (name = 'res1' , resource = 'res1.ext' , depends = 'res1' )
852
+
853
+ resolver = wr .ResourceResolver ([resource ])
854
+ renderer = wr .GracefulResourceRenderer (resolver )
855
+
856
+ # Supress error traceback in logs
857
+ logging .disable (logging .CRITICAL )
858
+ renderer .render (error_callback = callback )
859
+ # Restore logging level
860
+ logging .disable (original_log_level )
861
+
862
+ self .assertEqual (len (error_message ), 1 )
863
+ self .assertEqual (
864
+ error_message [- 1 ],
865
+ "Resources define circular dependencies: "
866
+ """[<Resource name="res1", depends="['res1']">]"""
867
+ )
868
+
869
+ def test_GreacefulResourceRenderer_callback_render (self ):
870
+ # Callback which should be called on error
871
+ error_message = []
872
+
873
+ def callback (message ):
874
+ error_message .append (message )
875
+
876
+ # Create a resource with a circular dependency
877
+ resource = wr .ScriptResource (
878
+ name = 'res1' ,
879
+ resource = 'res1.ext' ,
880
+ unique = True
881
+ )
882
+
883
+ resolver = wr .ResourceResolver ([resource ])
884
+ renderer = wr .GracefulResourceRenderer (resolver )
885
+
886
+ # Supress error traceback in logs
887
+ logging .disable (logging .CRITICAL )
888
+ renderer .render (error_callback = callback )
889
+ # Restore logging level
890
+ logging .disable (original_log_level )
891
+
892
+ self .assertEqual (len (error_message ), 1 )
893
+ self .assertEqual (
894
+ error_message [- 1 ],
895
+ """No directory set on resource <ScriptResource name="res1">"""
896
+ )
897
+
843
898
844
899
if __name__ == '__main__' :
845
900
unittest .main ()
0 commit comments