19
19
from jsonschema import (
20
20
_legacy_validators ,
21
21
_types ,
22
+ _format ,
22
23
_utils ,
23
24
_validators ,
24
25
exceptions ,
@@ -108,6 +109,7 @@ def create(
108
109
validators = (),
109
110
version = None ,
110
111
type_checker = _types .draft7_type_checker ,
112
+ format_checker = _format .draft7_format_checker ,
111
113
id_of = _id_of ,
112
114
applicable_validators = lambda schema : schema .items (),
113
115
):
@@ -148,6 +150,13 @@ def create(
148
150
If unprovided, a `jsonschema.TypeChecker` will be created
149
151
with a set of default types typical of JSON Schema drafts.
150
152
153
+ format_checker (jsonschema.FormatChecker):
154
+
155
+ a format checker, used when applying the :validator:`format` validator.
156
+
157
+ If unprovided, a `jsonschema.FormatChecker` will be created
158
+ with a set of default formats typical of JSON Schema drafts.
159
+
151
160
id_of (collections.abc.Callable):
152
161
153
162
A function that given a schema, returns its ID.
@@ -162,13 +171,16 @@ def create(
162
171
163
172
a new `jsonschema.protocols.Validator` class
164
173
"""
174
+ # rename to not clash with "format_checker" argument of `Validator.__init__()`
175
+ fmt_checker = format_checker
165
176
166
177
@attr .s
167
178
class Validator :
168
179
169
180
VALIDATORS = dict (validators )
170
181
META_SCHEMA = dict (meta_schema )
171
182
TYPE_CHECKER = type_checker
183
+ FORMAT_CHECKER = fmt_checker
172
184
ID_OF = staticmethod (id_of )
173
185
174
186
schema = attr .ib (repr = reprlib .repr )
@@ -283,7 +295,7 @@ def is_valid(self, instance, _schema=None):
283
295
return Validator
284
296
285
297
286
- def extend (validator , validators = (), version = None , type_checker = None ):
298
+ def extend (validator , validators = (), version = None , type_checker = None , format_checker = None ):
287
299
"""
288
300
Create a new validator class by extending an existing one.
289
301
@@ -321,6 +333,13 @@ def extend(validator, validators=(), version=None, type_checker=None):
321
333
If unprovided, the type checker of the extended
322
334
`jsonschema.protocols.Validator` will be carried along.
323
335
336
+ format_checker (jsonschema.FormatChecker):
337
+
338
+ a format checker, used when applying the :validator:`format` validator.
339
+
340
+ If unprovided, the format checker of the extended
341
+ `jsonschema.protocols.Validator` will be carried along.
342
+
324
343
Returns:
325
344
326
345
a new `jsonschema.protocols.Validator` class extending the one
@@ -342,11 +361,14 @@ def extend(validator, validators=(), version=None, type_checker=None):
342
361
343
362
if type_checker is None :
344
363
type_checker = validator .TYPE_CHECKER
364
+ if format_checker is None :
365
+ format_checker = validator .FORMAT_CHECKER
345
366
return create (
346
367
meta_schema = validator .META_SCHEMA ,
347
368
validators = all_validators ,
348
369
version = version ,
349
370
type_checker = type_checker ,
371
+ format_checker = format_checker ,
350
372
id_of = validator .ID_OF ,
351
373
)
352
374
@@ -377,6 +399,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
377
399
"uniqueItems" : _validators .uniqueItems ,
378
400
},
379
401
type_checker = _types .draft3_type_checker ,
402
+ format_checker = _format .draft3_format_checker ,
380
403
version = "draft3" ,
381
404
id_of = lambda schema : schema .get ("id" , "" ),
382
405
applicable_validators = _legacy_validators .ignore_ref_siblings ,
@@ -413,6 +436,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
413
436
"uniqueItems" : _validators .uniqueItems ,
414
437
},
415
438
type_checker = _types .draft4_type_checker ,
439
+ format_checker = _format .draft4_format_checker ,
416
440
version = "draft4" ,
417
441
id_of = lambda schema : schema .get ("id" , "" ),
418
442
applicable_validators = _legacy_validators .ignore_ref_siblings ,
@@ -454,6 +478,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
454
478
"uniqueItems" : _validators .uniqueItems ,
455
479
},
456
480
type_checker = _types .draft6_type_checker ,
481
+ format_checker = _format .draft6_format_checker ,
457
482
version = "draft6" ,
458
483
applicable_validators = _legacy_validators .ignore_ref_siblings ,
459
484
)
@@ -495,6 +520,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
495
520
"uniqueItems" : _validators .uniqueItems ,
496
521
},
497
522
type_checker = _types .draft7_type_checker ,
523
+ format_checker = _format .draft7_format_checker ,
498
524
version = "draft7" ,
499
525
applicable_validators = _legacy_validators .ignore_ref_siblings ,
500
526
)
@@ -540,6 +566,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
540
566
"uniqueItems" : _validators .uniqueItems ,
541
567
},
542
568
type_checker = _types .draft201909_type_checker ,
569
+ format_checker = _format .draft201909_format_checker ,
543
570
version = "draft2019-09" ,
544
571
)
545
572
@@ -585,6 +612,7 @@ def extend(validator, validators=(), version=None, type_checker=None):
585
612
"uniqueItems" : _validators .uniqueItems ,
586
613
},
587
614
type_checker = _types .draft202012_type_checker ,
615
+ format_checker = _format .draft202012_format_checker ,
588
616
version = "draft2020-12" ,
589
617
)
590
618
0 commit comments