Skip to content

Commit fdc125f

Browse files
committed
Add test to show how to subclass FullLoader with new blacklist
1 parent 0bbe450 commit fdc125f

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
- !!python/object/new:yaml.MappingNode
2+
args:
3+
state:
4+
mymethod: test
5+
wrong_method: test2

tests/lib/test_constructor.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def _make_objects():
1717
global MyLoader, MyDumper, MyTestClass1, MyTestClass2, MyTestClass3, YAMLObject1, YAMLObject2, \
1818
AnObject, AnInstance, AState, ACustomState, InitArgs, InitArgsWithState, \
1919
NewArgs, NewArgsWithState, Reduce, ReduceWithState, Slots, MyInt, MyList, MyDict, \
20-
FixedOffset, today, execute
20+
FixedOffset, today, execute, MyFullLoader
2121

2222
class MyLoader(yaml.Loader):
2323
pass
@@ -235,6 +235,10 @@ def tzname(self, dt):
235235
def dst(self, dt):
236236
return datetime.timedelta(0)
237237

238+
class MyFullLoader(yaml.FullLoader):
239+
def _get_state_keys_blacklist(self):
240+
return super()._get_state_keys_blacklist() + ['^mymethod$', '^wrong_.*$']
241+
238242
today = datetime.date.today()
239243

240244
def _load_code(expression):
@@ -289,6 +293,18 @@ def test_constructor_types(data_filename, code_filename, verbose=False):
289293

290294
test_constructor_types.unittest = ['.data', '.code']
291295

296+
def test_subclass_blacklist_types(data_filename, verbose=False):
297+
_make_objects()
298+
try:
299+
yaml.load(open(data_filename, 'rb').read(), MyFullLoader)
300+
except yaml.YAMLError as exc:
301+
if verbose:
302+
print("%s:" % exc.__class__.__name__, exc)
303+
else:
304+
raise AssertionError("expected an exception")
305+
306+
test_subclass_blacklist_types.unittest = ['.subclass_blacklist']
307+
292308
if __name__ == '__main__':
293309
import sys, test_constructor
294310
sys.modules['test_constructor'] = sys.modules['__main__']

tests/lib3/test_constructor.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pprint
44

55
import datetime
6+
import re
67
import yaml.tokens
78

89
def execute(code):
@@ -14,7 +15,7 @@ def _make_objects():
1415
global MyLoader, MyDumper, MyTestClass1, MyTestClass2, MyTestClass3, YAMLObject1, YAMLObject2, \
1516
AnObject, AnInstance, AState, ACustomState, InitArgs, InitArgsWithState, \
1617
NewArgs, NewArgsWithState, Reduce, ReduceWithState, Slots, MyInt, MyList, MyDict, \
17-
FixedOffset, today, execute
18+
FixedOffset, today, execute, MyFullLoader
1819

1920
class MyLoader(yaml.Loader):
2021
pass
@@ -222,6 +223,10 @@ def tzname(self, dt):
222223
def dst(self, dt):
223224
return datetime.timedelta(0)
224225

226+
class MyFullLoader(yaml.FullLoader):
227+
def _get_state_keys_blacklist(self):
228+
return super()._get_state_keys_blacklist() + ['^mymethod$', '^wrong_.*$']
229+
225230
today = datetime.date.today()
226231

227232
def _load_code(expression):
@@ -274,6 +279,18 @@ def test_constructor_types(data_filename, code_filename, verbose=False):
274279

275280
test_constructor_types.unittest = ['.data', '.code']
276281

282+
def test_subclass_blacklist_types(data_filename, verbose=False):
283+
_make_objects()
284+
try:
285+
yaml.load(open(data_filename, 'rb').read(), MyFullLoader)
286+
except yaml.YAMLError as exc:
287+
if verbose:
288+
print("%s:" % exc.__class__.__name__, exc)
289+
else:
290+
raise AssertionError("expected an exception")
291+
292+
test_subclass_blacklist_types.unittest = ['.subclass_blacklist']
293+
277294
if __name__ == '__main__':
278295
import sys, test_constructor
279296
sys.modules['test_constructor'] = sys.modules['__main__']

0 commit comments

Comments
 (0)