@@ -18,6 +18,8 @@ class CodeBlock:
1818 syntax : str | None = None
1919 expected_output : str | None = None
2020 expect_exception : bool = False
21+ skip : bool = False
22+ skipif : str | None = None
2123
2224
2325def extract_from_file (
@@ -27,7 +29,7 @@ def extract_from_file(
2729 return extract_from_buffer (handle , * args , ** kwargs )
2830
2931
30- def extract_from_buffer (f , max_num_lines : int = 10000 ):
32+ def extract_from_buffer (f , max_num_lines : int = 10000 ) -> list [ CodeBlock ] :
3133 out = []
3234 previous_nonempty_line = None
3335 k = 1
@@ -81,9 +83,7 @@ def extract_from_buffer(f, max_num_lines: int = 10000):
8183 keyword = m .group (1 ).strip ("- " )
8284
8385 # handle special tags
84- if keyword == "skip" :
85- continue
86- elif keyword == "expected-output" :
86+ if keyword == "expected-output" :
8787 if len (out ) == 0 :
8888 raise RuntimeError (
8989 "Found <!--pytest-codeblocks-expected-output--> "
@@ -110,14 +110,25 @@ def extract_from_buffer(f, max_num_lines: int = 10000):
110110 out [- 1 ].expected_output ,
111111 out [- 1 ].expect_exception ,
112112 )
113+ elif keyword == "skip" :
114+ out .append (CodeBlock ("" .join (code_block ), lineno , syntax , skip = True ))
115+ elif keyword .startswith ("skipif" ):
116+ m = re .match (r"skipif\((.*)\)" , keyword )
117+ if m is None :
118+ raise RuntimeError (
119+ "pytest-codeblocks: Expected skipif(some-condition)"
120+ )
121+ out .append (
122+ CodeBlock ("" .join (code_block ), lineno , syntax , skipif = m .group (1 ))
123+ )
113124 elif keyword in ["expect-exception" , "expect-error" ]:
114125 out .append (
115126 CodeBlock (
116127 "" .join (code_block ), lineno , syntax , expect_exception = True
117128 )
118129 )
119130 else :
120- raise RuntimeError ('Unknown pytest-codeblocks keyword "{keyword}."' )
131+ raise RuntimeError (f 'Unknown pytest-codeblocks keyword "{ keyword } ."' )
121132
122133 previous_nonempty_line = line
123134
0 commit comments