diff options
author | Julian Berman <Julian@GrayVines.com> | 2021-08-18 20:23:16 +0100 |
---|---|---|
committer | Julian Berman <Julian@GrayVines.com> | 2021-08-18 20:23:16 +0100 |
commit | e463aee10e2e83eed37e1c2d97f5c78c546acd95 (patch) | |
tree | 02ff0cdd7185cc1952155ee022791b873e6fbd47 | |
parent | ee775891043d428c084748dbf435b80401ab64ae (diff) | |
download | jsonschema-e463aee10e2e83eed37e1c2d97f5c78c546acd95.tar.gz |
More strict style, now via bugbear.
The unevaluated* validators will definitely need rewriting,
what they do right now is completely incorrect (which bugbear
points out at least, though poking at them trivially also does).
-rw-r--r-- | jsonschema/_format.py | 6 | ||||
-rw-r--r-- | jsonschema/_types.py | 4 | ||||
-rw-r--r-- | jsonschema/_utils.py | 2 | ||||
-rw-r--r-- | jsonschema/_validators.py | 30 | ||||
-rw-r--r-- | jsonschema/cli.py | 2 | ||||
-rw-r--r-- | jsonschema/tests/test_cli.py | 4 | ||||
-rw-r--r-- | jsonschema/validators.py | 2 | ||||
-rw-r--r-- | setup.cfg | 4 | ||||
-rw-r--r-- | tox.ini | 1 |
9 files changed, 29 insertions, 26 deletions
diff --git a/jsonschema/_format.py b/jsonschema/_format.py index d99c717..db4c2eb 100644 --- a/jsonschema/_format.py +++ b/jsonschema/_format.py @@ -402,8 +402,8 @@ else: @_checks_drafts(draft3="color", raises=(ValueError, TypeError)) def is_css21_color(instance): if ( - not isinstance(instance, str) or - instance.lower() in CSS21_NAMES_TO_HEX + not isinstance(instance, str) + or instance.lower() in CSS21_NAMES_TO_HEX ): return True return is_css_color_code(instance) @@ -450,7 +450,7 @@ else: for i, character in enumerate(instance): if character.isdigit(): # digits with a leading "0" are not allowed - if i > 0 and int(instance[i-1]) == 0: + if i > 0 and int(instance[i - 1]) == 0: return False non_negative_integer.append(character) diff --git a/jsonschema/_types.py b/jsonschema/_types.py index 2f6196c..5e3aa27 100644 --- a/jsonschema/_types.py +++ b/jsonschema/_types.py @@ -180,8 +180,8 @@ draft4_type_checker = draft3_type_checker.remove("any") draft6_type_checker = draft4_type_checker.redefine( "integer", lambda checker, instance: ( - is_integer(checker, instance) or - isinstance(instance, float) and instance.is_integer() + is_integer(checker, instance) + or isinstance(instance, float) and instance.is_integer() ), ) draft7_type_checker = draft6_type_checker diff --git a/jsonschema/_utils.py b/jsonschema/_utils.py index 54f9c22..f9fdd2c 100644 --- a/jsonschema/_utils.py +++ b/jsonschema/_utils.py @@ -332,7 +332,7 @@ def find_evaluated_property_keys_by_schema(validator, instance, schema): if "patternProperties" in schema: for property, value in instance.items(): - for pattern, subschema in schema["patternProperties"].items(): + for pattern, _ in schema["patternProperties"].items(): if re.search(pattern, property) and validator.is_valid( {property: value}, schema["patternProperties"], ): diff --git a/jsonschema/_validators.py b/jsonschema/_validators.py index 2784c09..11bd2a4 100644 --- a/jsonschema/_validators.py +++ b/jsonschema/_validators.py @@ -92,8 +92,8 @@ def items(validator, items, instance, schema): def additionalItems(validator, aI, instance, schema): if ( - not validator.is_type(instance, "array") or - validator.is_type(schema.get("items", {}), "object") + not validator.is_type(instance, "array") + or validator.is_type(schema.get("items", {}), "object") ): return @@ -225,17 +225,17 @@ def maxItems(validator, mI, instance, schema): def uniqueItems(validator, uI, instance, schema): if ( - uI and - validator.is_type(instance, "array") and - not uniq(instance) + uI + and validator.is_type(instance, "array") + and not uniq(instance) ): yield ValidationError(f"{instance!r} has non-unique elements") def pattern(validator, patrn, instance, schema): if ( - validator.is_type(instance, "string") and - not re.search(patrn, instance) + validator.is_type(instance, "string") + and not re.search(patrn, instance) ): yield ValidationError(f"{instance!r} does not match {patrn!r}") @@ -435,14 +435,10 @@ def unevaluatedItems(validator, unevaluatedItems, instance, schema): evaluated_item_indexes = find_evaluated_item_indexes_by_schema( validator, instance, schema, ) - unevaluated_items = [] - for k, v in enumerate(instance): - if k not in evaluated_item_indexes: - for error in validator.descend( - v, unevaluatedItems, schema_path="unevaluatedItems", - ): - unevaluated_items.append(v) - + unevaluated_items = [ + item for index, item in enumerate(instance) + if index not in evaluated_item_indexes + ] if unevaluated_items: error = "Unevaluated items are not allowed (%s %s unexpected)" yield ValidationError(error % extras_msg(unevaluated_items)) @@ -453,9 +449,9 @@ def unevaluatedProperties(validator, unevaluatedProperties, instance, schema): validator, instance, schema, ) unevaluated_property_keys = [] - for property, subschema in instance.items(): + for property in instance: if property not in evaluated_property_keys: - for error in validator.descend( + for _ in validator.descend( instance[property], unevaluatedProperties, path=property, diff --git a/jsonschema/cli.py b/jsonschema/cli.py index cfad6d1..1d7c650 100644 --- a/jsonschema/cli.py +++ b/jsonschema/cli.py @@ -40,7 +40,7 @@ class _Outputter(object): def load(self, path): try: file = open(path) - except (IOError, OSError) as error: + except OSError as error: if error.errno != errno.ENOENT: raise self.filenotfound_error(path=path, exc_info=sys.exc_info()) diff --git a/jsonschema/tests/test_cli.py b/jsonschema/tests/test_cli.py index ce2d298..1a23ea6 100644 --- a/jsonschema/tests/test_cli.py +++ b/jsonschema/tests/test_cli.py @@ -10,6 +10,8 @@ import subprocess import sys import tempfile +from pyrsistent import m + from jsonschema import Draft4Validator, Draft202012Validator, __version__, cli from jsonschema.exceptions import ( RefResolutionError, @@ -59,7 +61,7 @@ def _message_for(non_json): class TestCLI(TestCase): def run_cli( - self, argv, files={}, stdin=StringIO(), exit_code=0, **override, + self, argv, files=m(), stdin=StringIO(), exit_code=0, **override, ): arguments = cli.parse_args(argv) arguments.update(override) diff --git a/jsonschema/validators.py b/jsonschema/validators.py index 371c6f1..3d5e861 100644 --- a/jsonschema/validators.py +++ b/jsonschema/validators.py @@ -719,7 +719,7 @@ class RefResolver(object): if key in schema: results.append(schema) - for k, v in schema.items(): + for v in schema.values(): if isinstance(v, dict): results += self._finditem(v, key) @@ -65,6 +65,10 @@ inline-quotes = " exclude = jsonschema/__init__.py jsonschema/_reflect.py +ignore = + B008, # Barring function calls in default args. Ha, no. + B306, # See https://github.com/PyCQA/flake8-bugbear/issues/131 + W503, # (flake8 default) old PEP8 boolean operator line breaks [pydocstyle] match = (?!(test_|_|compat|cli)).*\.py # see PyCQA/pydocstyle#323 @@ -83,6 +83,7 @@ commands = {envbindir}/detect-secrets scan {toxinidir} [testenv:style] deps = flake8 + flake8-bugbear flake8-commas flake8-quotes flake8-broken-line |