From 425fac634312dab910d2fc6ae161ed461e16bab3 Mon Sep 17 00:00:00 2001 From: dmontagu <35119617+dmontagu@users.noreply.github.com> Date: Mon, 7 Oct 2019 10:02:34 -0700 Subject: [PATCH] Automatically add no-cover to TYPE_CHECKING blocks (#874) * Automatically add no-cover to TYPE_CHECKING blocks * Add changes file --- changes/874-dmontagu.md | 1 + pydantic/class_validators.py | 2 +- pydantic/color.py | 2 +- pydantic/dataclasses.py | 4 ++-- pydantic/error_wrappers.py | 2 +- pydantic/fields.py | 2 +- pydantic/main.py | 6 +++--- pydantic/networks.py | 2 +- pydantic/schema.py | 2 +- pydantic/types.py | 2 +- pydantic/typing.py | 2 +- pydantic/utils.py | 4 ++-- pydantic/validators.py | 2 +- setup.cfg | 1 + 14 files changed, 18 insertions(+), 16 deletions(-) create mode 100644 changes/874-dmontagu.md diff --git a/changes/874-dmontagu.md b/changes/874-dmontagu.md new file mode 100644 index 0000000..5eb3a40 --- /dev/null +++ b/changes/874-dmontagu.md @@ -0,0 +1 @@ +Add `if TYPE_CHECKING:` to the excluded lines for test coverage diff --git a/pydantic/class_validators.py b/pydantic/class_validators.py index 0c468b4..fbe940e 100644 --- a/pydantic/class_validators.py +++ b/pydantic/class_validators.py @@ -29,7 +29,7 @@ class Validator: self.check_fields = check_fields -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .main import BaseConfig from .fields import ModelField from .types import ModelOrDc diff --git a/pydantic/color.py b/pydantic/color.py index 314ebab..1562a8f 100644 --- a/pydantic/color.py +++ b/pydantic/color.py @@ -15,7 +15,7 @@ from typing import TYPE_CHECKING, Any, Optional, Tuple, Union, cast from .errors import ColorError from .utils import almost_equal_floats -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .typing import CallableGenerator ColorTuple = Union[Tuple[int, int, int], Tuple[int, int, int, float]] diff --git a/pydantic/dataclasses.py b/pydantic/dataclasses.py index 535eff4..3136030 100644 --- a/pydantic/dataclasses.py +++ b/pydantic/dataclasses.py @@ -8,7 +8,7 @@ from .fields import Required from .main import create_model, validate_model from .typing import AnyType -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .main import BaseConfig, BaseModel # noqa: F401 class DataclassType: @@ -105,7 +105,7 @@ def _process_class( return cls -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: # see https://github.com/python/mypy/issues/6239 for explanation of why we do this from dataclasses import dataclass as dataclass else: diff --git a/pydantic/error_wrappers.py b/pydantic/error_wrappers.py index 944db8d..d86affd 100644 --- a/pydantic/error_wrappers.py +++ b/pydantic/error_wrappers.py @@ -1,7 +1,7 @@ import json from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional, Sequence, Tuple, Type, Union -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .main import BaseConfig # noqa: F401 from .types import ModelOrDc # noqa: F401 diff --git a/pydantic/fields.py b/pydantic/fields.py index 8075174..11c5b2d 100644 --- a/pydantic/fields.py +++ b/pydantic/fields.py @@ -35,7 +35,7 @@ except ImportError: Required: Any = Ellipsis NoneType = type(None) -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .class_validators import ValidatorsList # noqa: F401 from .error_wrappers import ErrorList from .main import BaseConfig, BaseModel # noqa: F401 diff --git a/pydantic/main.py b/pydantic/main.py index c90fdc0..5677ffb 100644 --- a/pydantic/main.py +++ b/pydantic/main.py @@ -20,7 +20,7 @@ from .types import PyObject, StrBytes from .typing import AnyCallable, AnyType, ForwardRef, is_classvar, resolve_annotations, update_field_forward_refs from .utils import GetterDict, ValueItems, truncate, validate_field_name -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .class_validators import ValidatorListDict from .types import ModelOrDc from .typing import CallableGenerator, TupleGenerator, DictStrAny, DictAny, SetStr @@ -224,7 +224,7 @@ class ModelMetaclass(ABCMeta): class BaseModel(metaclass=ModelMetaclass): - if TYPE_CHECKING: # pragma: no cover + if TYPE_CHECKING: # populated by the metaclass, defined here to help IDEs only __fields__: Dict[str, ModelField] = {} __validators__: Dict[str, AnyCallable] = {} @@ -241,7 +241,7 @@ class BaseModel(metaclass=ModelMetaclass): def __init__(__pydantic_self__, **data: Any) -> None: # Uses something other than `self` the first arg to allow "self" as a settable attribute - if TYPE_CHECKING: # pragma: no cover + if TYPE_CHECKING: __pydantic_self__.__dict__: Dict[str, Any] = {} __pydantic_self__.__fields_set__: 'SetStr' = set() values, fields_set, validation_error = validate_model(__pydantic_self__.__class__, data) diff --git a/pydantic/networks.py b/pydantic/networks.py index 7a6d11d..c62b09d 100644 --- a/pydantic/networks.py +++ b/pydantic/networks.py @@ -14,7 +14,7 @@ from typing import TYPE_CHECKING, Any, Dict, Generator, Optional, Set, Tuple, Ty from . import errors from .validators import constr_length_validator, str_validator -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .fields import ModelField from .main import BaseConfig # noqa: F401 from .typing import AnyCallable diff --git a/pydantic/schema.py b/pydantic/schema.py index c5fa81e..a1a2bb1 100644 --- a/pydantic/schema.py +++ b/pydantic/schema.py @@ -40,7 +40,7 @@ from .types import ( from .typing import Literal, is_callable_type, is_literal_type, is_new_type, literal_values, new_type_supertype from .utils import lenient_issubclass -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .main import BaseModel # noqa: F401 default_prefix = '#/definitions/' diff --git a/pydantic/types.py b/pydantic/types.py index 7bbd7ac..f8d8e57 100644 --- a/pydantic/types.py +++ b/pydantic/types.py @@ -73,7 +73,7 @@ OptionalInt = Optional[int] OptionalIntFloat = Union[OptionalInt, float] OptionalIntFloatDecimal = Union[OptionalIntFloat, Decimal] -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .dataclasses import DataclassType # noqa: F401 from .main import BaseModel, BaseConfig # noqa: F401 from .typing import CallableGenerator diff --git a/pydantic/typing.py b/pydantic/typing.py index 096c06a..7e83ba4 100644 --- a/pydantic/typing.py +++ b/pydantic/typing.py @@ -52,7 +52,7 @@ except ImportError: Literal = None # type: ignore -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .fields import ModelField TupleGenerator = Generator[Tuple[str, Any], None, None] diff --git a/pydantic/utils.py b/pydantic/utils.py index 0ba8250..8c2d226 100644 --- a/pydantic/utils.py +++ b/pydantic/utils.py @@ -10,7 +10,7 @@ except ImportError: Literal = None # type: ignore -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .main import BaseModel # noqa: F401 from .typing import SetIntStr, DictIntStrAny, IntStr # noqa: F401 @@ -157,7 +157,7 @@ class ValueItems: __slots__ = ('_items', '_type') def __init__(self, value: Any, items: Union['SetIntStr', 'DictIntStrAny']) -> None: - if TYPE_CHECKING: # pragma: no cover + if TYPE_CHECKING: self._items: Union['SetIntStr', 'DictIntStrAny'] self._type: Type[Union[set, dict]] # type: ignore diff --git a/pydantic/validators.py b/pydantic/validators.py index 7dc16bc..ae1365c 100644 --- a/pydantic/validators.py +++ b/pydantic/validators.py @@ -29,7 +29,7 @@ from .datetime_parse import parse_date, parse_datetime, parse_duration, parse_ti from .typing import AnyCallable, AnyType, ForwardRef, display_as_type, get_class, is_callable_type, is_literal_type from .utils import almost_equal_floats, lenient_issubclass, sequence_like -if TYPE_CHECKING: # pragma: no cover +if TYPE_CHECKING: from .fields import ModelField from .main import BaseConfig from .types import ConstrainedDecimal, ConstrainedFloat, ConstrainedInt diff --git a/setup.cfg b/setup.cfg index 3c85499..856a828 100644 --- a/setup.cfg +++ b/setup.cfg @@ -25,6 +25,7 @@ exclude_lines = pragma: no cover raise NotImplementedError raise NotImplemented + if TYPE_CHECKING: [isort] line_length=120