Oida is Oda's linter that enforces code style and modularization in our Django projects.
Project description
๐
Oida
Oida is Oda's linter that enforces code style and modularization in our Django projects.
Warning This project is still in early development. Expect breaking changes.
Installation
Oida requires Python 3.10 or newer and can be installed from PyPI:
pip install oida
Usage
Oida is mainly intended to be used as a flake8 plugin. Once you have installed Oida and flake8 you can enable the linting rules in the flake8 config:
[flake8]
extend-select = ODA
This will enable all our linting rules. You can also enable them one by one, for a complete list of the various violations we report on see the oida/checkers/base.py file.
Oida also provides its own command line tool. This can also be used to run the
linting rules, but its main purpose is to provide tools to help transitioning
an existing codebase into one that's modularized. For details see oida --help
, but below is a quick summary of the provided commands:
oida lint
This command is just another way of running the same checks that can be run
through flake8
. Note that this does not support # noqa
comments.
oida config
This command will generate configuration files for components, which will be automatically pre-filled with ignore rules for isolation violations. See below for details on the configuration files.
oida componentize
This command moves or renames a Django app, for example for moving an app into a component. In addition to moving the files in the app it also updates (or adds if needed) the app config and updates imports elsewhere in the project.
Concepts
Oida is a static code analyzer, that also looks at the project structure. The codebase is expected to be structured with a project as the top package and then Django apps or components as submodules below this, something like this:
project/
โโโ pyproject.toml
โโโ setup.cfg
โโโ project/
โโโ __init__.py
โโโ my_component/
โ โโโ __init__.py
โ โโโ first_app/
โ โ โโโ __init__.py
โ โ โโโ models.py
โ โ โโโ ...
โ โโโ second_app/
โ โ โโโ __init__.py
โ โ โโโ ....
โ โโโ ...
โโโ third_app/
โ โโโ __init__.py
โ โโโ ...
โโโ ...
A component is basically a collection of Django apps. Oida will enforce isolation of the apps inside the component, meaning that no code elsewhere in the project will be allowed to import from the apps inside a component. Instead a component should expose a public interface at the top level.
Because Oida is intended to be introduced in mature projects it's also possible
to grandfather in existing violations. That's done through a confcomponent.py
file placed at the root of the component. The only allowed statement in this
file is assigning a list of string literals to ALLOWED_IMPORTS
:
ALLOWED_IMPORTS = ["my_component.app.models.MyModel"]
This will silence any warnings when importing my_component.app.models.MyModel
in the current app/component.
Checks
These are the checks currently implemented in Oida:
- component-isolation: Checks that relative imports do not cross app boundaries.
- config: Checks that component configuration files are valid
- relative-imports: Checks that no imports are done across components.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file oida-0.2.1.tar.gz
.
File metadata
- Download URL: oida-0.2.1.tar.gz
- Upload date:
- Size: 18.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/6.5.0-1018-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2324fe424d74ce276e65e3ad5aea1276a3f8f1bc892355b5ac078d346961d88d |
|
MD5 | 2524b7728979d4f2ecc9bb11e8f08280 |
|
BLAKE2b-256 | 8d32c5d014c8dddd22c31c799b40296cf1e17f5cf271a148d19f040a37fbe995 |
File details
Details for the file oida-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: oida-0.2.1-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/6.5.0-1018-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74db36124f495cfcd17c30e46fd184811b3518ccf612e0a3d0da5b6208075c60 |
|
MD5 | b7c0f64e2b34751987c95b018dc4e59e |
|
BLAKE2b-256 | c13cb929af5932686c629fa539a7ec28cae65a0bff05ea4f9499b5b5755ebff9 |