@@ -32,77 +32,105 @@ def test_reference():
3232 }
3333
3434
35- # def test_definitions_as_mapping():
36- # """
37- # Ensure that definitions support a mapping interface.
38- # """
39- # definitions = typesystem.SchemaDefinitions()
40- #
41- # class Album(typesystem.Schema, definitions=definitions):
42- # title = typesystem.String(max_length=100)
43- # release_date = typesystem.Date()
44- # artist = typesystem.Reference("Artist")
45- #
46- # class Artist(typesystem.Schema, definitions=definitions):
47- # name = typesystem.String(max_length=100)
48- #
49- # assert definitions["Album"] == Album
50- # assert definitions["Artist"] == Artist
51- # assert dict(definitions) == {"Album": Album, "Artist": Artist}
52- # assert len(definitions) == 2
53- # del definitions["Artist"]
54- #
55- #
56- # def test_string_references():
57- # definitions = typesystem.SchemaDefinitions()
58- #
59- # class ExampleA(typesystem.Schema, definitions=definitions):
60- # field_on_a = typesystem.Integer()
61- # example_b = typesystem.Reference("ExampleB")
62- #
63- # class ExampleB(typesystem.Schema, definitions=definitions):
64- # field_on_b = typesystem.Integer()
65- #
66- # value = ExampleA.validate(
67- # {"field_on_a": "123", "example_b": {"field_on_b": "456"}})
68- # assert value == ExampleA(field_on_a=123, example_b=ExampleB(field_on_b=456))
69- #
70- # class ExampleC(typesystem.Schema, definitions=definitions):
71- # field_on_c = typesystem.Integer()
72- # example_d = typesystem.Array(items=typesystem.Reference("ExampleD"))
73- #
74- # class ExampleD(typesystem.Schema, definitions=definitions):
75- # field_on_d = typesystem.Integer()
76- #
77- # value = ExampleC.validate(
78- # {"field_on_c": "123", "example_d": [{"field_on_d": "456"}]}
79- # )
80- # assert value == ExampleC(field_on_c=123, example_d=[ExampleD(field_on_d=456)])
81- #
82- # class ExampleE(typesystem.Schema, definitions=definitions):
83- # field_on_e = typesystem.Integer()
84- # example_f = typesystem.Array(items=[typesystem.Reference("ExampleF")])
85- #
86- # class ExampleF(typesystem.Schema, definitions=definitions):
87- # field_on_f = typesystem.Integer()
88- #
89- # value = ExampleE.validate(
90- # {"field_on_e": "123", "example_f": [{"field_on_f": "456"}]}
91- # )
92- # assert value == ExampleE(field_on_e=123, example_f=[ExampleF(field_on_f=456)])
93- #
94- # class ExampleG(typesystem.Schema, definitions=definitions):
95- # field_on_g = typesystem.Integer()
96- # example_h = typesystem.Object(
97- # properties={"h": typesystem.Reference("ExampleH")}
98- # )
99- #
100- # class ExampleH(typesystem.Schema, definitions=definitions):
101- # field_on_h = typesystem.Integer()
102- #
103- # value = ExampleG.validate(
104- # {"field_on_g": "123",
105- # "example_h": {"h": {"field_on_h": "456"}}}
106- # )
107- # assert value == ExampleG(
108- # field_on_g=123, example_h={"h": ExampleH(field_on_h=456)})
35+ def test_definitions_as_mapping ():
36+ """
37+ Ensure that definitions support a mapping interface.
38+ """
39+ artist = typesystem .Schema (fields = {"name" : typesystem .String (max_length = 100 )})
40+
41+ definitions = typesystem .Definitions ()
42+ definitions ["Artist" ] = artist
43+
44+ album = typesystem .Schema (
45+ fields = {
46+ "title" : typesystem .String (max_length = 100 ),
47+ "release_date" : typesystem .Date (),
48+ "artist" : typesystem .Reference (to = "Artist" , definitions = definitions ),
49+ }
50+ )
51+
52+ definitions ["Album" ] = album
53+
54+ assert definitions ["Album" ] == album
55+ assert definitions ["Artist" ] == artist
56+ assert dict (definitions ) == {"Album" : album , "Artist" : artist }
57+ assert len (definitions ) == 2
58+ del definitions ["Artist" ]
59+
60+
61+ def test_string_references ():
62+ definitions = typesystem .Definitions ()
63+
64+ example_b = typesystem .Schema (
65+ fields = {
66+ "field_on_b" : typesystem .Integer (),
67+ }
68+ )
69+
70+ definitions ["ExampleB" ] = example_b
71+
72+ example_a = typesystem .Schema (
73+ fields = {
74+ "field_on_a" : typesystem .Integer (),
75+ "example_b" : typesystem .Reference (to = "ExampleB" , definitions = definitions ),
76+ }
77+ )
78+
79+ value = example_a .validate ({"field_on_a" : "123" , "example_b" : {"field_on_b" : 456 }})
80+ assert value == {"field_on_a" : 123 , "example_b" : {"field_on_b" : 456 }}
81+
82+ example_d = typesystem .Schema (fields = {"field_on_d" : typesystem .Integer ()})
83+
84+ definitions ["ExampleD" ] = example_d
85+
86+ example_c = typesystem .Schema (
87+ fields = {
88+ "field_on_c" : typesystem .Integer (),
89+ "example_d" : typesystem .Array (
90+ items = typesystem .Reference (to = "ExampleD" , definitions = definitions )
91+ ),
92+ }
93+ )
94+
95+ value = example_c .validate (
96+ {"field_on_c" : "123" , "example_d" : [{"field_on_d" : 456 }]}
97+ )
98+ assert value == {"field_on_c" : 123 , "example_d" : [{"field_on_d" : 456 }]}
99+
100+ example_f = typesystem .Schema (fields = {"field_on_f" : typesystem .Integer ()})
101+
102+ definitions ["ExampleF" ] = example_f
103+
104+ example_e = typesystem .Schema (
105+ fields = {
106+ "field_on_e" : typesystem .Integer (),
107+ "example_f" : typesystem .Array (
108+ items = [typesystem .Reference (to = "ExampleF" , definitions = definitions )]
109+ ),
110+ }
111+ )
112+
113+ value = example_e .validate (
114+ {"field_on_e" : "123" , "example_f" : [{"field_on_f" : 456 }]}
115+ )
116+ assert value == {"field_on_e" : 123 , "example_f" : [{"field_on_f" : 456 }]}
117+
118+ example_h = typesystem .Schema (fields = {"field_on_h" : typesystem .Integer ()})
119+
120+ definitions ["ExampleH" ] = example_h
121+
122+ example_g = typesystem .Schema (
123+ fields = {
124+ "field_on_g" : typesystem .Integer (),
125+ "example_h" : typesystem .Object (
126+ properties = {
127+ "h" : typesystem .Reference (to = "ExampleH" , definitions = definitions )
128+ }
129+ ),
130+ }
131+ )
132+
133+ value = example_g .validate (
134+ {"field_on_g" : 123 , "example_h" : {"h" : {"field_on_h" : 456 }}}
135+ )
136+ assert value == {"field_on_g" : 123 , "example_h" : {"h" : {"field_on_h" : 456 }}}
0 commit comments