Developer notes

team developer material

This section is intended to be usefull for team developers only.

Quick installation process

This process describes how to install and run the project locally, e.g. for development purposes.

Nota: command is to be executed through the terminal

pip install rougail

Code quality

We are using pre-commit, there is a .pre-commit-config.yaml pre-commit config file in the root’s project.

You need to:

  • install the pre-commit library:

    pip install pre-commit
    
  • registrer the pre-commit git hooks with this command:

    pre-commit install
    
  • launch the quality code procedure with:

    pre-commit
    

    or simply just commit your changes, pre-commit will automatically be launched.

Attention

If an error is found, the commit will not happen. You must resolve all errors that pre-commit that pre-commit points out to you before.

Note

If you need for some reason to disable pre-commit, just set the PRE_COMMIT_ALLOW_NO_CONFIG environment variable before commiting:

PRE_COMMIT_ALLOW_NO_CONFIG=1 git commit

Coding standard

We use black

- repo: https://github.com/psf/black
  rev: 22.10.0
  hooks:
    - id: black

And some YAML and JSON validators.


The pre commit tool

pre-commit is a fantastic tool for automating code quality checks before you commit your changes. It’s especially useful in Python projects for running linters, formatters, and other checks automatically.

Here’s a practical, minimal example to get you started with a small Python project.

1. Install pre-commit

First, install the pre-commit package:

pip install pre-commit

2. Create a .pre-commit-config.yaml File

In the root of your Python project, create a file named .pre-commit-config.yaml with the following content:

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-added-large-files

  - repo: https://github.com/psf/black
    rev: 23.12.1
    hooks:
      - id: black

  - repo: https://github.com/pycqa/flake8
    rev: 6.1.0
    hooks:
      - id: flake8

This config: - Uses popular pre-commit hooks for basic checks - Adds Black for code formatting - Adds Flake8 for linting

3. Install the Git Hook

Run this command in your project root:

pre-commit install

This sets up a Git hook that runs the checks before each commit.

4. Try It Out

Now, when you try to commit:

git add .
git commit -m "My commit message"

pre-commit will run the hooks. If any check fails, you’ll see output like this:

Trim Trailing Whitespace............................................Passed
Fix End of Files....................................................Passed
Check Yaml..........................................................Passed
Check for added large files..........................................Passed
Black..............................................................Failed
- hook id: black
- exit code: 1

Reformatted /path/to/your/file.py
All done! ✨ 🍰 ✨
1 file reformatted.

If any hook fails, fix the issues and try committing again.

5. (Optional) Run pre-commit Manually

You can run all hooks against all files at any time:

pre-commit run --all-files

6. Update Hooks

To update your hooks to the latest versions:

pre-commit autoupdate

Summary Table

Step

Action

Command

1

Install pre-commit

pip install pre-commit

2

Create config file

.pre-commit-config.yaml

3

Install Git hook

pre-commit install

4

Commit and see checks

git commit -m "..."

5

Run manually

pre-commit run --all-files

6

Update hooks

pre-commit autoupdate

more python linters

Customizing your .pre-commit-config.yaml to include pylint, ruff, and additional hooks is a great way to maintain code quality. Here’s how you can structure your config for a robust setup:

1. Basic Setup with pylint and ruff

Here’s a starting point for your .pre-commit-config.yaml:

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-added-large-files

  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.1.6
    hooks:
      - id: ruff
        args: [--fix, --exit-non-zero-on-fix]

  - repo: https://github.com/pycqa/pylint
    rev: v3.0.3
    hooks:
      - id: pylint
        args: [--rcfile=.pylintrc]  # Optional: specify a pylint config file

2. Adding More Hooks

Here are some popular hooks you might want to add:

a. Black (Code Formatter)

- repo: https://github.com/psf/black
  rev: 23.12.1
  hooks:
    - id: black

b. Mypy (Static Type Checker)

- repo: https://github.com/pre-commit/mirrors-mypy
  rev: v1.8.0
  hooks:
    - id: mypy

c. isort (Import Sorter)

- repo: https://github.com/pycqa/isort
  rev: 5.13.2
  hooks:
    - id: isort

d. Bandit (Security Linter)

- repo: https://github.com/pycqa/bandit
  rev: 1.7.7
  hooks:
    - id: bandit

3. Full Example Config

Here’s a full example with all the above hooks:

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-added-large-files

  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.1.6
    hooks:
      - id: ruff
        args: [--fix, --exit-non-zero-on-fix]

  - repo: https://github.com/pycqa/pylint
    rev: v3.0.3
    hooks:
      - id: pylint
        args: [--rcfile=.pylintrc]

  - repo: https://github.com/psf/black
    rev: 23.12.1
    hooks:
      - id: black

  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v1.8.0
    hooks:
      - id: mypy

  - repo: https://github.com/pycqa/isort
    rev: 5.13.2
    hooks:
      - id: isort

  - repo: https://github.com/pycqa/bandit
    rev: 1.7.7
    hooks:
      - id: bandit

4. Customizing Hooks

  • pylint: You can specify a config file (.pylintrc) or pass arguments directly.

  • ruff: You can customize rules in pyproject.toml or .ruff.toml.

  • Black, isort, mypy: Each can be configured via their respective config files.

5. Installing and Running

  1. Save the config to .pre-commit-config.yaml.

  2. Run:

    pre-commit install
    pre-commit run --all-files