@@ -136,20 +136,27 @@ def test_c_return_count(self):
136
136
137
137
E = sys .monitoring .events
138
138
139
- SIMPLE_EVENTS = [
139
+ INSTRUMENTED_EVENTS = [
140
140
(E .PY_START , "start" ),
141
141
(E .PY_RESUME , "resume" ),
142
142
(E .PY_RETURN , "return" ),
143
143
(E .PY_YIELD , "yield" ),
144
144
(E .JUMP , "jump" ),
145
145
(E .BRANCH , "branch" ),
146
+ ]
147
+
148
+ EXCEPT_EVENTS = [
146
149
(E .RAISE , "raise" ),
147
150
(E .PY_UNWIND , "unwind" ),
148
151
(E .EXCEPTION_HANDLED , "exception_handled" ),
152
+ ]
153
+
154
+ SIMPLE_EVENTS = INSTRUMENTED_EVENTS + EXCEPT_EVENTS + [
149
155
(E .C_RAISE , "c_raise" ),
150
156
(E .C_RETURN , "c_return" ),
151
157
]
152
158
159
+
153
160
SIMPLE_EVENT_SET = functools .reduce (operator .or_ , [ev for (ev , _ ) in SIMPLE_EVENTS ], 0 ) | E .CALL
154
161
155
162
@@ -618,6 +625,49 @@ def func2():
618
625
619
626
self .check_lines (func2 , [1 ,2 ,3 ,4 ,5 ,6 ])
620
627
628
+ class TestDisable (MonitoringTestBase , unittest .TestCase ):
629
+
630
+ def gen (self , cond ):
631
+ for i in range (10 ):
632
+ if cond :
633
+ yield 1
634
+ else :
635
+ yield 2
636
+
637
+ def raise_handle_reraise (self ):
638
+ try :
639
+ 1 / 0
640
+ except :
641
+ raise
642
+
643
+ def test_disable_legal_events (self ):
644
+ for event , name in INSTRUMENTED_EVENTS :
645
+ try :
646
+ counter = CounterWithDisable ()
647
+ counter .disable = True
648
+ sys .monitoring .register_callback (TEST_TOOL , event , counter )
649
+ sys .monitoring .set_events (TEST_TOOL , event )
650
+ for _ in self .gen (1 ):
651
+ pass
652
+ self .assertLess (counter .count , 4 )
653
+ finally :
654
+ sys .monitoring .set_events (TEST_TOOL , 0 )
655
+ sys .monitoring .register_callback (TEST_TOOL , event , None )
656
+
657
+
658
+ def test_disable_illegal_events (self ):
659
+ for event , name in EXCEPT_EVENTS :
660
+ try :
661
+ counter = CounterWithDisable ()
662
+ counter .disable = True
663
+ sys .monitoring .register_callback (TEST_TOOL , event , counter )
664
+ sys .monitoring .set_events (TEST_TOOL , event )
665
+ with self .assertRaises (ValueError ):
666
+ self .raise_handle_reraise ()
667
+ finally :
668
+ sys .monitoring .set_events (TEST_TOOL , 0 )
669
+ sys .monitoring .register_callback (TEST_TOOL , event , None )
670
+
621
671
622
672
class ExceptionRecorder :
623
673
0 commit comments