django-stubs
Flake8
Our great sponsors
django-stubs | Flake8 | |
---|---|---|
7 | 33 | |
1,448 | 3,252 | |
1.9% | 1.7% | |
9.6 | 7.5 | |
6 days ago | 9 days ago | |
Python | Python | |
MIT License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
django-stubs
-
Mypy 1.6 Released
Pyright doesn't work with Django, as Django's so dynamic that it requires a plugin to infer all types correctly. Sadly, even mypy with plugins is a mess to get set up in vscode, especially if you want it to use the same config as you use for ci checks from the command line.
We use mypy + [django-stubs](https://github.com/typeddjango/django-stubs) (in a huge Django + drf project at day job) which includes a plugin for mypy allowing it to recognize all reverse relations and manager methods. Mypy is still really rough around the edges. The cli args are poorly documented, and how they correspond to declarations in a mypy.ini / pyproject.toml is mysterious. Match-statements still have bugs even a year after release. Exclusion of untyped / partially typed files and packages we've had to solve with grep filtering mypy's output for our whitelisted set of files, as it's been unable to separate properly between errors you care about (in your own codebase) and errors in others code (dependencies, untypable dynamic python packages etc).
The largest issue IMO is that mypy tried to adapt a java / OOP style way of type system onto python, instead of recognizing the language's real power within duck typing and passing structural types around. Typescript chose the right approach here, modelling javascript the way it is actually written, favoring structural over nominal typing, instead of the archaic and now left-behind way of Java-style OOP that has influenced mypy.
There was a recently accepted PEP which allowed for limited dataclass transforms, enough to cover the @attr.s usecase for both mypy and pyright, but nowhere near expressive enough to cover django's models and ORM sadly. It's probably impossible / undesirable to allow for such rich plugins, so i see the future for proper pluginless typing to be more akin to how pydantic / normal dataclasses solve typing, by starting with a specification of the types, deriving its runtime implementation, instead of plugins having to reverse the type representation of a custom DSL.
-
Boring Python: Code Quality
You can annotate the manager and get some typing help in the editor. And there’s django-stubs which helps a little when running mypy. It’s not as good as pycharm though.
https://github.com/typeddjango/django-stubs/tree/master
-
Python 3.11.0 final is now available
> Yes, there are type stubs for these libraries but they’re either forced to be more strict, preventing use of dynamism, or opt for being less strict but allowing you to use all the library features, at the cost of safety.
There are type stubs for Django that somewhat avoid these compromises: https://github.com/typeddjango/django-stubs
To be able to do this they have to use a Mypy plugin though. And even then it's still far from perfect.
- Welcome to hassle free coding
-
Is Rust Web Yet?
Mypy together with this plug-in gives you typing for django. https://github.com/TypedDjango/django-stubs
-
Django projects with type hints?
Have you looked at stubs for Django?
- Neovim + Django - LSP config
Flake8
-
To Review or Not to Review: The Debate on Mandatory Code Reviews
Automating code checks with static code analysis allows us to enforce code styling effectively. By integrating tools into our workflow, we can identify errors at an early stage, while coding instead of blocking us at the end. For instance, flake8 checks Python code for style and errors, eslint performs similar checks for JavaScript, and prettier automatically formats code to maintain consistency.
-
Enhance Your Project Quality with These Top Python Libraries
Flake8. This library is a wrapper around pycodestyle (PEP8), pyflakes, and Ned Batchelder’s McCabe script. It is a great toolkit for checking your code base against coding style (PEP8), programming errors (like SyntaxError, NameError, etc) and to check cyclomatic complexity.
- Django Code Formatting and Linting Made Easy: A Step-by-Step Pre-commit Hook Tutorial
-
Enhancing Python Code Quality: A Comprehensive Guide to Linting with Ruff
Flake8 combines the functionalities of the PyFlakes, pycodestyle, and McCabe libraries. It provides a streamlined approach to code linting by detecting coding errors, enforcing style conventions, and measuring code complexity.
-
Which is your favourite or go-to YouTube channel for being up-to-date on Python?
He made yesqa and pyupgrade (among others), and also works on flake8. His main job is for https://sentry.io/.
-
The Power of Pre-Commit for Python Developers: Tips and Best Practices
repos: - repo: https://github.com/psf/black rev: 21.7b0 hooks: - id: black language_version: python3.8 - repo: https://github.com/PyCQA/flake8 rev: 3.9.2 hooks: - id: flake8
-
Is it considered rude to completely change the formatting of someone else's code when making a PR?
https://github.com/psf/black it’s a PEP8 compliant formatter for Python codebases. If you don’t like auto formatting files you can use https://github.com/PyCQA/flake8 it just lists out all of the style issues so you can fix them manually.
-
Ruff: one Python linter to rule them all
I have no stake in that, but my observation is that the actual discussion appears to have both supporters and detractors rather than overwhelming support. Either way, it has nothing to do with whether or not it is realistic to say that Ruff is the "one Python linter to rule them all".
- Improve your Django Code with pre-commit
What are some alternatives?
strawberry - A GraphQL library for Python that leverages type annotations 🍓
Pylint - It's not just a linter that annoys you!
pandas-stubs - Pandas type stubs. Helps you type-check your code.
black - The uncompromising Python code formatter [Moved to: https://github.com/psf/black]
phantom-types - Phantom types for Python.
autopep8 - A tool that automatically formats Python code to conform to the PEP 8 style guide.
lagom - 📦 Autowiring dependency injection container for python 3
pylama - Code audit tool for python.
returns - Make your functions return something meaningful, typed, and safe!
autoflake - Removes unused imports and unused variables as reported by pyflakes
pandas-stubs - Public type stubs for pandas
prospector - Inspects Python source files and provides information about type and location of classes, methods etc