Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oida-0.2.1.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

oida-0.2.1-py3-none-any.whl (22.7 kB view details)

Uploaded Python 3

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

Hashes for oida-0.2.1.tar.gz
Algorithm Hash digest
SHA256 2324fe424d74ce276e65e3ad5aea1276a3f8f1bc892355b5ac078d346961d88d
MD5 2524b7728979d4f2ecc9bb11e8f08280
BLAKE2b-256 8d32c5d014c8dddd22c31c799b40296cf1e17f5cf271a148d19f040a37fbe995

See more details on using hashes here.

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

Hashes for oida-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 74db36124f495cfcd17c30e46fd184811b3518ccf612e0a3d0da5b6208075c60
MD5 b7c0f64e2b34751987c95b018dc4e59e
BLAKE2b-256 c13cb929af5932686c629fa539a7ec28cae65a0bff05ea4f9499b5b5755ebff9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page