comparison tests/test_schema.py @ 28:db3491e1b590

Allow to customize the loading of the schema dict
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 08 Jul 2023 13:51:20 +0200
parents c3a0fe8d4587
children 68286d27f27d
comparison
equal deleted inserted replaced
27:88ee7d1cc0bb 28:db3491e1b590
138 138
139 def test_root_context(self): 139 def test_root_context(self):
140 obj = object() 140 obj = object()
141 schema = object() 141 schema = object()
142 settings = data_schema.ValidationSettings( 142 settings = data_schema.ValidationSettings(
143 skip_keys=[], break_on_keynames_problems=True) 143 skip_keys=[], break_on_keynames_problems=True,
144 schema_loader=data_schema.default_schema_loader)
144 ctx = data_schema.Context( 145 ctx = data_schema.Context(
145 None, root_object=obj, root_schema=schema, settings=settings) 146 None, root_object=obj, root_schema=schema, settings=settings)
146 self.assertEqual("<ROOT>", str(ctx)) 147 self.assertEqual("<ROOT>", str(ctx))
147 self.assertTrue(ctx.root_object is obj) 148 self.assertTrue(ctx.root_object is obj)
148 self.assertTrue(ctx.root_schema is schema) 149 self.assertTrue(ctx.root_schema is schema)
150 151
151 def test_parent_of_root_context(self): 152 def test_parent_of_root_context(self):
152 obj = object() 153 obj = object()
153 schema = object() 154 schema = object()
154 settings = data_schema.ValidationSettings( 155 settings = data_schema.ValidationSettings(
155 skip_keys=[], break_on_keynames_problems=True) 156 skip_keys=[], break_on_keynames_problems=True,
157 schema_loader=data_schema.default_schema_loader)
156 ctx = data_schema.Context( 158 ctx = data_schema.Context(
157 None, root_object=obj, root_schema=schema, settings=settings) 159 None, root_object=obj, root_schema=schema, settings=settings)
158 self.assertTrue(ctx.is_root) 160 self.assertTrue(ctx.is_root)
159 self.assertIsNone(ctx.parent) 161 self.assertIsNone(ctx.parent)
160 try: 162 try:
165 self.fail( 167 self.fail(
166 "Context.safe_parent was expected to raise for a root context") 168 "Context.safe_parent was expected to raise for a root context")
167 169
168 def test_root_context_init_root_empty(self): 170 def test_root_context_init_root_empty(self):
169 settings = data_schema.ValidationSettings( 171 settings = data_schema.ValidationSettings(
170 skip_keys=[], break_on_keynames_problems=True) 172 skip_keys=[], break_on_keynames_problems=True,
173 schema_loader=data_schema.default_schema_loader)
171 self.assertRaises( 174 self.assertRaises(
172 TypeError, 175 TypeError,
173 data_schema.Context, None, key="key", settings=settings) 176 data_schema.Context, None, key="key", settings=settings)
174 self.assertRaises( 177 self.assertRaises(
175 TypeError, 178 TypeError,
176 data_schema.Context, None, index="key", settings=settings) 179 data_schema.Context, None, index="key", settings=settings)
177 180
178 def test_root_context_init_only_one_of_key_index(self): 181 def test_root_context_init_only_one_of_key_index(self):
179 settings = data_schema.ValidationSettings( 182 settings = data_schema.ValidationSettings(
180 skip_keys=[], break_on_keynames_problems=True) 183 skip_keys=[], break_on_keynames_problems=True,
184 schema_loader=data_schema.default_schema_loader)
181 root = data_schema.Context(None, settings=settings) 185 root = data_schema.Context(None, settings=settings)
182 self.assertRaises( 186 self.assertRaises(
183 ValueError, 187 ValueError,
184 data_schema.Context, root, key="key", index="index") 188 data_schema.Context, root, key="key", index="index")
185 189
186 def test_root_context_init_exactly_one(self): 190 def test_root_context_init_exactly_one(self):
187 settings = data_schema.ValidationSettings( 191 settings = data_schema.ValidationSettings(
188 skip_keys=[], break_on_keynames_problems=True) 192 skip_keys=[], break_on_keynames_problems=True,
193 schema_loader=data_schema.default_schema_loader)
189 root = data_schema.Context(None, settings=settings) 194 root = data_schema.Context(None, settings=settings)
190 self.assertRaises(TypeError, data_schema.Context, root) 195 self.assertRaises(TypeError, data_schema.Context, root)
191 196
192 def test_nonroot_rootobj_schema(self): 197 def test_nonroot_rootobj_schema(self):
193 settings = data_schema.ValidationSettings( 198 settings = data_schema.ValidationSettings(
194 skip_keys=[], break_on_keynames_problems=True) 199 skip_keys=[], break_on_keynames_problems=True,
200 schema_loader=data_schema.default_schema_loader)
195 obj = object() 201 obj = object()
196 schema = object() 202 schema = object()
197 ctx = data_schema.Context( 203 ctx = data_schema.Context(
198 None, root_object=obj, root_schema=schema, settings=settings) 204 None, root_object=obj, root_schema=schema, settings=settings)
199 self.assertEqual("<ROOT>", str(ctx)) 205 self.assertEqual("<ROOT>", str(ctx))
205 self.assertRaises(TypeError, data_schema.Context, ctx, index=0, 211 self.assertRaises(TypeError, data_schema.Context, ctx, index=0,
206 root_schema=object()) 212 root_schema=object())
207 213
208 def test_str(self): 214 def test_str(self):
209 settings = data_schema.ValidationSettings( 215 settings = data_schema.ValidationSettings(
210 skip_keys=[], break_on_keynames_problems=True) 216 skip_keys=[], break_on_keynames_problems=True,
217 schema_loader=data_schema.default_schema_loader)
211 root = data_schema.Context(None, settings=settings) 218 root = data_schema.Context(None, settings=settings)
212 ctx1 = data_schema.Context(root, key="key1") 219 ctx1 = data_schema.Context(root, key="key1")
213 ctx2 = data_schema.Context(ctx1, index=2) 220 ctx2 = data_schema.Context(ctx1, index=2)
214 ctx3 = data_schema.Context(ctx2, key="key3") 221 ctx3 = data_schema.Context(ctx2, key="key3")
215 self.assertEqual("key1 / INDEX:2 / key3", str(ctx3)) 222 self.assertEqual("key1 / INDEX:2 / key3", str(ctx3))
216 223
217 def test_repr(self): 224 def test_repr(self):
218 settings = data_schema.ValidationSettings( 225 settings = data_schema.ValidationSettings(
219 skip_keys=[], break_on_keynames_problems=True) 226 skip_keys=[], break_on_keynames_problems=True,
227 schema_loader=data_schema.default_schema_loader)
220 root = data_schema.Context(None, settings=settings) 228 root = data_schema.Context(None, settings=settings)
221 ctx1 = data_schema.Context(root, key="key1") 229 ctx1 = data_schema.Context(root, key="key1")
222 ctx2 = data_schema.Context(ctx1, index=2) 230 ctx2 = data_schema.Context(ctx1, index=2)
223 ctx3 = data_schema.Context(ctx2, key="key3") 231 ctx3 = data_schema.Context(ctx2, key="key3")
224 self.assertEqual("<Context path=`key1 / INDEX:2 / key3'>", repr(ctx3)) 232 self.assertEqual("<Context path=`key1 / INDEX:2 / key3'>", repr(ctx3))
225 233
226 def test_root(self): 234 def test_root(self):
227 settings = data_schema.ValidationSettings( 235 settings = data_schema.ValidationSettings(
228 skip_keys=[], break_on_keynames_problems=True) 236 skip_keys=[], break_on_keynames_problems=True,
237 schema_loader=data_schema.default_schema_loader)
229 root = data_schema.Context(None, settings=settings) 238 root = data_schema.Context(None, settings=settings)
230 self.assertTrue(root.is_root) 239 self.assertTrue(root.is_root)
231 self.assertTrue(root is root.root) 240 self.assertTrue(root is root.root)
232 self.assertTrue(root.settings is settings) 241 self.assertTrue(root.settings is settings)
233 ctx1 = data_schema.Context(root, key="key1") 242 ctx1 = data_schema.Context(root, key="key1")
242 self.assertTrue(ctx3.root is root) 251 self.assertTrue(ctx3.root is root)
243 self.assertTrue(ctx3.settings is settings) 252 self.assertTrue(ctx3.settings is settings)
244 253
245 def test_extra_settings_in_between(self): 254 def test_extra_settings_in_between(self):
246 settings = data_schema.ValidationSettings( 255 settings = data_schema.ValidationSettings(
247 skip_keys=[], break_on_keynames_problems=True) 256 skip_keys=[], break_on_keynames_problems=True,
257 schema_loader=data_schema.default_schema_loader)
248 settings2 = data_schema.ValidationSettings( 258 settings2 = data_schema.ValidationSettings(
249 skip_keys=[], break_on_keynames_problems=True) 259 skip_keys=[], break_on_keynames_problems=True,
260 schema_loader=data_schema.default_schema_loader)
250 root = data_schema.Context(None, settings=settings) 261 root = data_schema.Context(None, settings=settings)
251 self.assertTrue(root.is_root) 262 self.assertTrue(root.is_root)
252 self.assertTrue(root is root.root) 263 self.assertTrue(root is root.root)
253 self.assertTrue(root.settings is settings) 264 self.assertTrue(root.settings is settings)
254 ctx1 = data_schema.Context(root, key="key1") 265 ctx1 = data_schema.Context(root, key="key1")
263 self.assertTrue(ctx3.root is root) 274 self.assertTrue(ctx3.root is root)
264 self.assertTrue(ctx3.settings is settings2) 275 self.assertTrue(ctx3.settings is settings2)
265 276
266 def test_key_xor_index(self): 277 def test_key_xor_index(self):
267 settings = data_schema.ValidationSettings( 278 settings = data_schema.ValidationSettings(
268 skip_keys=[], break_on_keynames_problems=True) 279 skip_keys=[], break_on_keynames_problems=True,
280 schema_loader=data_schema.default_schema_loader)
269 root = data_schema.Context(None, settings=settings) 281 root = data_schema.Context(None, settings=settings)
270 self.assertRaises( 282 self.assertRaises(
271 ValueError, 283 ValueError,
272 data_schema.Context, 284 data_schema.Context,
273 root, 285 root,
274 index=0, 286 index=0,
275 key="huhu") 287 key="huhu")
276 288
277 def test_keyindex_requires_key(self): 289 def test_keyindex_requires_key(self):
278 settings = data_schema.ValidationSettings( 290 settings = data_schema.ValidationSettings(
279 skip_keys=[], break_on_keynames_problems=True) 291 skip_keys=[], break_on_keynames_problems=True,
292 schema_loader=data_schema.default_schema_loader)
280 self.assertRaises( 293 self.assertRaises(
281 ValueError, 294 ValueError,
282 data_schema.Context, 295 data_schema.Context,
283 None, 296 None,
284 key_index=0, 297 key_index=0,
1231 self.assertRaises( 1244 self.assertRaises(
1232 data_schema.SchemaError, 1245 data_schema.SchemaError,
1233 data_schema.process_schema_conditionals, 1246 data_schema.process_schema_conditionals,
1234 schema, 1247 schema,
1235 self._ctx) 1248 self._ctx)
1249
1250 def test_raise_no_schema_loader_available(self):
1251 settings = data_schema.ValidationSettings(
1252 skip_keys=[], break_on_keynames_problems=True,
1253 schema_loader=None)
1254 schema = data_schema._Schema(
1255 None, True, {"$ref": "schema:file:/tmp/xxx#/"})
1256 ctx = data_schema.Context(
1257 None, root_schema=schema, settings=settings)
1258 self.assertRaises(
1259 data_schema.SchemaError,
1260 data_schema.process_schema_references,
1261 schema,
1262 ctx)
1263
1264 def test_raise_schema_loader_available_but_invalid_basedir(self):
1265 settings = data_schema.ValidationSettings(
1266 skip_keys=[], break_on_keynames_problems=True,
1267 schema_loader=data_schema.default_schema_loader)
1268 schema = data_schema._Schema(
1269 None, True, {"$ref": "schema:file:/tmp/xxx#/"})
1270 ctx = data_schema.Context(
1271 None, root_schema=schema, settings=settings)
1272 self.assertRaises(
1273 TypeError, # no basedir given
1274 data_schema.process_schema_references,
1275 schema,
1276 ctx)
1236 1277
1237 def test_raise_if_scheme_ref_is_not_the_single_key(self): 1278 def test_raise_if_scheme_ref_is_not_the_single_key(self):
1238 schema = data_schema._Schema( 1279 schema = data_schema._Schema(
1239 None, True, {"$ref": "schema:#/", 1280 None, True, {"$ref": "schema:#/",
1240 "type": None 1281 "type": None