
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
flake8-typing-imports
Advanced tools
flake8 plugin which checks that typing imports are properly guarded
pip install flake8-typing-imports
Code | Description |
---|---|
TYP001 | guard import by TYPE_CHECKING |
TYP002 | @overload is broken in <3.5.2 |
TYP003 | Union[Match, ...] or Union[Pattern, ...] must be quoted in <3.5.2 |
TYP004 | NamedTuple does not support methods in 3.6.0 |
TYP005 | NamedTuple does not support defaults in 3.6.0 |
TYP006 | guard typing attribute by quoting |
unfortunately, the typing
module has been pretty unstable -- it has seen api
changes in 3.5.0, 3.5.2, 3.5.3, 3.5.4, 3.6.0, 3.6.1, 3.6.2, 3.7.0, and 3.7.2!
depending on your supported version of python, you may need to guard your
imports by if TYPE_CHECKING:
(3.5.2+) or if False:
if the things you are
importing aren't available in all the pythons you support.
as it's pretty difficult to keep track of what version things changed and you can't always test against particular patch versions of python, this plugin helps you statically check this automatically!
# default / --min-python-version 3.5.0
from typing import Type # TYP001
# default / --min-python-version 3.5.0
if False:
from typing import Type # OK!
# default / --min-python-version 3.5.0
from typing import overload # TYP002
# default / --min-python-version 3.5.0
import sys
from typing import overload # OK!
if sys.version_info < (3, 5, 2):
def overload(f):
return f
# default / --min-python-version 3.5.0
def foo(bar: Union[Match, str]) -> None: pass # TYP003
def foo(bar: "Union[Match, str]") -> None: pass # OK!
def foo(bar: Union[Pattern, str]) -> None: pass # TYP003
def foo(bar: "Union[Pattern, str]") -> None: pass # OK!
# --min-python-version 3.6.0
class NT(NamedTuple):
x: int = 5 # TYP005
def f(self) -> int: # TYP004
return self.x + 4
# --min-python-version 3.7.0
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from typing import OrderedDict # OK!
this plugin has a single configuration point (beyond those provided by flake8)
which is the --min-python-version
option.
by default, this option is 3.5.0
. this includes all versions of python
which have the typing
module present.
you can also set this option in the flake8 configuration if you don't want to use the commandline:
[flake8]
min_python_version = 3.6.2
if a >=
is set for python_requires
in setup.cfg
, that value will be used:
# setup.cfg setuptools metadata
[options]
python_requires = >=3.6
See pre-commit for instructions
Sample .pre-commit-config.yaml
:
- repo: https://github.com/pycqa/flake8
rev: 3.7.7
hooks:
- id: flake8
additional_dependencies: [flake8-typing-imports==1.12.0]
FAQs
flake8 plugin which checks that typing imports are properly guarded
We found that flake8-typing-imports demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.