Ran Benita
531416cc5a
code: simplify Code construction
2020-10-31 12:40:25 +02:00
Ran Benita
a1df458e85
code: use properties for derived attributes, use slots
...
Make the objects more light weight.
Remove unused properties.
2020-10-31 12:40:25 +02:00
Anthony Sottile
33d119f71a
py36+: com2ann
2020-10-05 18:33:17 -07:00
Anthony Sottile
66bd44c13a
py36+: pyupgrade: py36+
2020-10-03 12:46:54 -07:00
Anthony Sottile
fb1d550aac
py36+: remove rexport of Path and PurePath
2020-10-03 12:16:52 -07:00
Anthony Sottile
7f0d2beb50
py36+: remove _pytest.compat.overload
2020-10-03 08:01:22 -07:00
Anthony Sottile
bfadd4060e
py36+: from typing import Type: no longer need guard
2020-10-02 19:50:10 -07:00
Anthony Sottile
ced0a52a87
Merge pull request #7837 from asottile/py36_union_pattern_match
...
py36+: remove workaround for Union[Pattern/Match] bug
2020-10-02 19:47:50 -07:00
Anthony Sottile
e622cb7c41
py36+: remove workaround for Union[Pattern/Match] bug
2020-10-02 15:06:02 -07:00
Anthony Sottile
a238d1f37d
py36+: remove TYPE_CHECKING from _pytest.compat
...
automated with:
```bash
git grep -l 'from .* import TYPE_CHECKING' |
xargs reorder-python-imports \
--application-directories .:src \
--remove-import 'from _pytest.compat import TYPE_CHECKING' \
--add-import 'from typing import TYPE_CHECKING'
```
2020-10-02 15:03:24 -07:00
Ran Benita
32bb8f3a63
Bump attrs requirement from >=17.4.0 to >=19.2.0
...
This allows us to remove the `ATTRS_EQ_FIELD` thing which is causing
some annoyance.
2020-09-27 13:17:59 +03:00
Ran Benita
a99ca879e7
Mark some public and to-be-public classes as @final
...
This indicates at least for people using type checkers that these
classes are not designed for inheritance and we make no stability
guarantees regarding inheritance of them.
Currently this doesn't show up in the docs. Sphinx does actually support
`@final`, however it only works when imported directly from `typing`,
while we import from `_pytest.compat`.
In the future there might also be a `@sealed` decorator which would
cover some more cases.
2020-09-22 12:40:40 +03:00
Anthony Sottile
96a17b1683
Fix INTERNALERROR when accessing locals / globals with faulty exec
2020-09-11 18:13:48 -07:00
Bruno Oliveira
9f672c85c5
Fix handle of exceptions in ReprEntry with tb=line
...
Fix #7707
2020-09-03 07:44:45 -03:00
Ran Benita
f28af14457
Don't use NotImplementedError in @overloads
...
We used it as a shortcut for avoiding coverage, but pylint has a special
interpretation of it as an abstract method which we don't want.
2020-08-14 13:54:46 +03:00
Ran Benita
f8c4e038fd
Replace some usages of py.path.local
2020-08-06 18:46:17 +03:00
Ran Benita
9ab14c6d9c
typing: set warn_unreachable
...
This makes mypy raise an error whenever it detects code which is
statically unreachable, e.g.
x: int
if isinstance(x, str):
... # Statement is unreachable [unreachable]
This is really neat and finds quite a few logic and typing bugs.
Sometimes the code is intentionally unreachable in terms of types, e.g.
raising TypeError when a function is given an argument with a wrong
type. In these cases a `type: ignore[unreachable]` is needed, but I
think it's a nice code hint.
2020-08-04 09:59:46 +03:00
Ran Benita
be656dd4e4
typing: set disallow_any_generics
...
This prevents referring to a generic type without filling in its generic
type parameters.
The FixtureDef typing might need some more refining in the future.
2020-08-01 20:39:15 +03:00
Ran Benita
0242de4f56
Format docstrings in a consistent style
2020-08-01 17:14:37 +03:00
Ran Benita
8d98de8f8a
typing: set no_implicit_reexport
...
In Python, if module A defines a name `name`, and module B does `import
name from A`, then another module C can `import name from B`.
Sometimes it is intentional -- module B is meant to "reexport" `name`.
But sometimes it is just confusion/inconsistency on where `name` should
be imported from.
mypy has a flag `--no-implicit-reexport` which puts some order into
this. A name can only be imported from a module if
1. The module defines the name
2. The module's `__all__` includes the name
3. The module imports the name as `from ... import .. as name`.
This flag is included in mypy's `--strict` flag.
I like this flag, but I realize it is a bit controversial, and in
particular item 3 above is a bit unfriendly to contributors who don't
know about it. So I didn't intend to add it to pytest.
But while investigating issue 7589 I came upon mypy issue 8754 which
causes `--no-implicit-reexport` to leak into installed libraries and
causes some unexpected typing differences *in pytest* if the user uses
this flag.
Since the diff mostly makes sense, let's just conform to it.
2020-07-31 10:09:11 +03:00
Zac Hatfield-Dodds
3a060b77e8
Revert change to traceback repr ( #7535 )
...
* Revert change to traceback repr
* Add test and changelog entry
* Restore *exact* prev output
Co-authored-by: Bruno Oliveira <nicoddemus@gmail.com >
2020-07-24 13:30:38 +02:00
Lewis Cowles
71ab6236a1
Clearer guidance on pytest.raise(match=...) failure ( #7499 )
2020-07-15 22:26:47 +03:00
Ran Benita
c8676002a7
code/code: remove redundant __ne__ implementation
...
This implementation is the default when __eq__ is implemented.
2020-07-10 13:08:56 +03:00
Ran Benita
85ef2bf698
code/code: remove Frame.exec_() method
...
Not used.
2020-07-10 13:08:56 +03:00
Ran Benita
c3864bc12b
code/code: remove Frame.is_true() method
...
Really odd one, let's just inline it.
2020-07-10 13:08:56 +03:00
Ran Benita
77f3cb4baa
code/code: type annotations & doc cleanups
2020-07-10 13:08:56 +03:00
Ran Benita
fb2640b82f
Stop using ExceptionInfo.errisinstance internally
...
It does the same as a simple isinstance check, but adds a little layer
of obscurity on top, which the type checker can't penetrate.
2020-07-10 13:08:48 +03:00
Ran Benita
f5c69f3eb2
code/source: inline getsource()
...
The recursive way in which Source and getsource interact is a bit
confusing, just inline it.
2020-07-01 20:20:13 +03:00
Ran Benita
ef39115001
code/source: remove compiling functions
...
A lot of complex code that isn't used anymore outside of tests after
the previous commit.
2020-07-01 20:20:12 +03:00
Ran Benita
4a27d7d973
code/source: remove unused method Source.putaround()
2020-07-01 20:20:11 +03:00
Ran Benita
a7303b52db
code/source: remove unused method Source.isparseable()
2020-07-01 20:20:11 +03:00
Ran Benita
a127a22d13
code/source: remove support for comparing Source with str
...
Cross-type comparisons like this are a bad idea. This isn't used.
2020-07-01 20:20:10 +03:00
Ran Benita
2b99bfbc60
code/source: remove support for passing multiple parts to Source
...
It isn't used, so keep it simple.
2020-07-01 20:20:09 +03:00
Ran Benita
c83e16ab2e
code/source: remove unneeded assert
...
inspect.getsource() definitely returns str.
2020-07-01 20:20:09 +03:00
Ran Benita
c6083ab970
code/source: remove old IndentationError workaround in getsource()
...
This has been there since as far as the git history goes (2007), is not
covered by any test, and says "Buggy python version consider upgrading".
Hopefully everyone have upgraded...
2020-07-01 20:20:08 +03:00
Ran Benita
4108174777
code/source: remove Source(deindent: bool) parameter
...
Not used, except in tests.
2020-07-01 20:20:07 +03:00
Ran Benita
2fe178488a
code/source: expose deindent kwarg in signature
...
Probably was done to avoid the shadowing issue, but work around it
instead.
2020-07-01 20:20:06 +03:00
Ran Benita
4655b79985
config: improve typing
2020-06-22 16:39:14 +03:00
Ram Rachum
dd446bee5e
Fix exception causes all over the codebase
2020-06-19 22:02:24 +03:00
Bruno Oliveira
ab6dacf1d1
Introduce --import-mode=importlib ( #7246 )
...
Fix #5821
Co-authored-by: Ran Benita <ran@unusedvar.com >
2020-06-13 11:29:01 -03:00
Ran Benita
0256cb3aae
hookspec: type annotate pytest_internalerror
...
Also switch to using ExceptionRepr instead of
`Union[ReprExceptionInfo, ExceptionChainRepr]`
which is somewhat annoying and less future proof.
2020-06-12 17:34:31 +03:00
Ran Benita
2b05faff0a
Improve types around repr_failure()
2020-06-05 11:34:20 +03:00
Ran Benita
54ad048be7
Enable check_untyped_defs mypy option for testing/ too
2020-06-05 11:34:20 +03:00
Katarzyna Król
94c7b8b47c
Issue 1316 - longrepr is a string when pytrace=False ( #7100 )
2020-05-30 14:10:58 +03:00
Ran Benita
2ee90887b7
code: remove last usage of py.error
...
`str(self.path)` can't raise at all, so it can just be removed.
2020-05-28 12:12:10 +03:00
Ran Benita
23c9856857
Remove no longer needed noqa's
2020-05-12 09:29:47 +03:00
Ran Benita
59a12e9ab3
Replace bare excepts with except BaseException
...
Mostly I wanted to remove uses of `noqa`.
In Python 3 the two are the same.
2020-05-12 09:29:47 +03:00
Ran Benita
69143fe5b0
code: fix import cycles between code.py and source.py
...
These two files were really intertwined. Make it so code.py depends on
source.py without a reverse dependency.
No functional changes.
2020-05-06 11:01:32 +03:00
Daniel Hahler
20f6331afd
Fix TerminalRepr instances to be hashable ( #6988 )
...
pytest-xdist assumes `ExceptionChainRepr` is hashable.
Fixes https://github.com/pytest-dev/pytest/issues/6925 .
Fixes https://github.com/pytest-dev/pytest-xdist/issues/515 .
2020-04-03 00:56:53 +02:00
Ran Benita
a785754523
Change EnvironmentError, IOError to OSError - they are aliases
...
Since Python 3.3, these are aliases for OSError:
https://docs.python.org/3/whatsnew/3.3.html#pep-3151-reworking-the-os-and-io-exception-hierarchy
2020-03-27 18:40:23 +03:00