summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2021-08-18 20:23:16 +0100
committerJulian Berman <Julian@GrayVines.com>2021-08-18 20:23:16 +0100
commite463aee10e2e83eed37e1c2d97f5c78c546acd95 (patch)
tree02ff0cdd7185cc1952155ee022791b873e6fbd47
parentee775891043d428c084748dbf435b80401ab64ae (diff)
downloadjsonschema-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.py6
-rw-r--r--jsonschema/_types.py4
-rw-r--r--jsonschema/_utils.py2
-rw-r--r--jsonschema/_validators.py30
-rw-r--r--jsonschema/cli.py2
-rw-r--r--jsonschema/tests/test_cli.py4
-rw-r--r--jsonschema/validators.py2
-rw-r--r--setup.cfg4
-rw-r--r--tox.ini1
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)
diff --git a/setup.cfg b/setup.cfg
index 1d002e3..b8f6659 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -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
diff --git a/tox.ini b/tox.ini
index a0cf3f1..71c7633 100644
--- a/tox.ini
+++ b/tox.ini
@@ -83,6 +83,7 @@ commands = {envbindir}/detect-secrets scan {toxinidir}
[testenv:style]
deps =
flake8
+ flake8-bugbear
flake8-commas
flake8-quotes
flake8-broken-line