|
15 | 15 |
|
16 | 16 | """
|
17 | 17 |
|
| 18 | +try: |
| 19 | + from collections.abc import Callable |
| 20 | +except ImportError: |
| 21 | + from typing import Callable |
18 | 22 | from copy import copy, deepcopy
|
19 | 23 | from typing import Any, Match, Tuple, Union
|
20 | 24 |
|
@@ -349,17 +353,20 @@ def parse_qsd(*args, **kwargs):
|
349 | 353 |
|
350 | 354 | @singledispatch
|
351 | 355 | def validate(schema, value):
|
352 |
| - if callable(schema): |
353 |
| - if schema(value): |
354 |
| - return value |
355 |
| - else: |
356 |
| - raise ValueError("{0}({1!r}) is not true".format(schema.__name__, value)) |
357 |
| - |
358 |
| - if schema == value: |
359 |
| - return value |
360 |
| - else: |
| 356 | + if schema != value: |
361 | 357 | raise ValueError("{0!r} does not equal {1!r}".format(value, schema))
|
362 | 358 |
|
| 359 | + return value |
| 360 | + |
| 361 | + |
| 362 | +@validate.register(Callable) |
| 363 | +def validate_callable(schema, value): |
| 364 | + # type: (Callable) |
| 365 | + if not schema(value): |
| 366 | + raise ValueError("{0}({1!r}) is not true".format(schema.__name__, value)) |
| 367 | + |
| 368 | + return value |
| 369 | + |
363 | 370 |
|
364 | 371 | @validate.register(any)
|
365 | 372 | def validate_any(schema, value):
|
@@ -410,7 +417,7 @@ def validate_getitem(schema, value):
|
410 | 417 | @validate.register(transform)
|
411 | 418 | def validate_transform(schema, value):
|
412 | 419 | # type: (transform)
|
413 |
| - validate(callable, schema.func) |
| 420 | + validate(Callable, schema.func) |
414 | 421 | return schema.func(value, *schema.args, **schema.kwargs)
|
415 | 422 |
|
416 | 423 |
|
|
0 commit comments