77 ResourceConfig ,
88 ResourceMixin
99)
10+ import logging
1011import os
1112import shutil
1213import tempfile
1314import unittest
1415import webresource as wr
1516
16-
1717try :
1818 FileNotFoundError
1919except NameError : # pragma: nocover
2020 FileNotFoundError = EnvironmentError
2121
2222
23+ # Get log level to restore it later
24+ original_log_level = logging .getLogger ().getEffectiveLevel ()
25+
26+
2327def temp_directory (fn ):
2428 def wrapper (* a , ** kw ):
2529 tempdir = tempfile .mkdtemp ()
@@ -812,10 +816,6 @@ def test_GracefulResourceRenderer(self):
812816 ))
813817
814818 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-
819819 # Create a resource with a circular dependency
820820 resource = Resource (name = 'res1' , resource = 'res1.ext' , depends = 'res1' )
821821
@@ -840,6 +840,61 @@ def test_GreacefulResourceRenderer_resolver_errors(self):
840840 # interactible.
841841 self .assertEqual (rendered , "" )
842842
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+
843898
844899if __name__ == '__main__' :
845900 unittest .main ()
0 commit comments