A tool to ensure that code adheres to Prune's coding standards.
Project description
Prune's Norminette
What is it for?
The norminette automatically checks the organization of files in a Django project as well as code rules. This allows for the same code standard between projects and makes it easier to navigate.
Prerequisites
- To be installed on a Prune Django project that uses UV
Installation
Run the following command in the console:
uv add prune_norminette
Running the norminette
To run the package, simply enter in the console:
uv run prune_norminette
Display rules in the project
To list all the rule checks in the project, run the following command:
uv run norminette_display_rules
Norminette version
Don't hesitate to regularly run uv sync --upgrade, as the norminette evolves with time and our practices!
You can also pin the norminette to a specific version to avoid breaking changes, as the norminette is changing quickly.
Publish a new version
To publish a new version of the norminette, run ./publish.sh from the main branch. It will update pyproject.toml, create a git tab and push it to gitlab. This will trigger a CI/CD job to release the new version of the norminette on pypi.
For developers: add new rule
The rules are located in the rules/ folder.
To add a new rule based on a function's docstring, follow this format:
"""
Id: 10
Description: Describe what the rule checks.
Tags:
- Use relevant tags from the list below.
Args:
app (str): The name of the Django app to check.
errors (list): A list to store error messages if the structure is incorrect.
"""
Available Tags
The currently available tags are:
- web_files: HTML, JS, and CSS files.
- python_files: Python files with
.pyextension. - architecture: Checks folder and file placement consistency.
- format: Directly modifies file formatting.
- files_content: Inspects file contents.
Integration Steps
- Import the new function in
utils/run_checks.py. (Remember to add errors in args) - Sync the new rules to update
README.md.
To sync rules after adding them to the project, run:
python -m norminette_prune.utils.rules.generate_readme
For adding a tag, add it to the get_tags_descriptions() function in utils/rules/extract_rules.py file.
Project architecture at Prune
To access the documentation, please go to the link where you can find documentation in English and French.
If you want to download it directly, here is the link:
Rules
| Id | Name | Description | Tags |
|---|---|---|---|
| 01 | check_view_function_naming | Verify that the name of rendering functions for views ends with '_view'. | python_files files_content |
| 02 | check_pages_folder_structure | Verify if page.html files are inside the pages/ folder and ensure files in pages/ are named page (except in components, sections, and layouts folders). |
web_files architecture |
| 03 | check_templates_static_structure | Verify that the static/ and templates/ folders contain only one subfolder named after the app. |
architecture |
| 04 | remove_double_empty_lines | Remove double empty lines in HTML, JS, and CSS files. | format files_content web_files |
| 05 | normalize_django_tags_spacing | Normalize spaces in Django tags (with exactly one space between the tag and its content). | format web_files files_content |
| 06 | check_component_and_layout_file_placement | Verify that layout, component, and section files are correctly placed based on their include references. |
web_files architecture |
| 07 | check_svg_inclusion_paths | Ensure that SVG includes use absolute paths. | web_files files_content |
| 08 | check_svg_files_location_and_extension | Verify that SVG files are inside the svg/ folder and use the .html extension. |
web_files architecture |
| 09 | check_uv_use | Verify if UV is used in the project by checking for 'uv.lock' in the current directory or subdirectories. | configuration |
| 10 | check_pyproject_configuration | Verify if pyproject.toml exist and contain pydantic, ipython and whitenoise | configuration |
| 11 | check_for_envsettings_class_in_settings | Verify if class EnvSettings exists in settings.py |
configuration content_settings |
| 12 | check_environment_class | Verify if class Environment exists in settings.py |
configuration content_settings |
| 13 | check_valid_whitenoise_and_static_paths | Verify if WHITENOISE_ROOT and STATIC_ROOT have the correct paths. | configuration content_settings |
| 14 | check_gitignore_content | Verify if ".env", ".venv", "pycache/", "node_modules/" and "static_root" are in .gitignore file |
configuration |
| 15 | check_core_model_usage | Checks if a model directly inherits from other than CoreModels. | python_files files_content |
| 17 | check_textchoices_in_enums | Checks if TextChoices classes are defined in a file named 'enums.py'. | python_files files_content |
| 18 | check_missing_str_method | Checks if 'str' method is present on models.py. |
python_files files_content |
| 19 | check_urls_name_parameter | Checks if all URL patterns in urls.py have a 'name' parameter. | python_files files_content |
| 20 | check_basemodel_in_payloads | Checks if BaseModel (Pydantic) classes are defined in a file named 'payloads.py'. | python_files files_content |
Tags
- web_files : HTML, JS, and CSS files.
- python_files : Python files with
.pyextension. - architecture : Checks folder and file placement consistency.
- format : Directly modifies file formatting.
- files_content : Inspects file contents.
- configuration : Verify project configuration.
- content_settings : Verify settings.py configuration.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file prune_norminette-2.0.7.tar.gz.
File metadata
- Download URL: prune_norminette-2.0.7.tar.gz
- Upload date:
- Size: 23.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dd66ff9b6d16e2baac6e1bea195e4687056410c19a914e7fd126d53c078f4bb
|
|
| MD5 |
23a86a9594b88d73e42c2fcbb719fbe8
|
|
| BLAKE2b-256 |
12c965fe08590c20e59622b68a27b50d35fb857db646d8d7ae6e6e10e5d301a0
|
File details
Details for the file prune_norminette-2.0.7-py3-none-any.whl.
File metadata
- Download URL: prune_norminette-2.0.7-py3-none-any.whl
- Upload date:
- Size: 44.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fec46e85af4eb04e170cac981226a5337371b804e22d0b250768e6d05b1d2446
|
|
| MD5 |
e88805e972e9bfba7bfafaee2fcafc2d
|
|
| BLAKE2b-256 |
d8d82e087654e9f990591152b1a207fad544d8c8eb182b8e9efea29a9b64fcb8
|