Skip to main content

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 poetry or UV

UV project

Installation

Run the following command in the console:

uv add norminette_prune

Running the norminette

To run the package, simply enter in the console:

norminette_prune

Display rules in the project

To list all the rule checks in the project, run the following command:

norminette_display_rules

Updating the norminette

Don't hesitate to regularly run uv sync --upgrade, as the norminette evolves with time and our practices!

Poetry project

Installation

Run the following command:

poetry add norminette_prune

Running the norminette

poetry run norminette_prune

Display rules in the project

To list all the rule checks in the project, run the following command:

poetry run norminette_display_rules

Updating the norminette

Don't hesitate to regularly run poetry update, as the norminette evolves with time and our practices!

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 .py extension.
  • 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 and README-FR.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.

Documentation

If you want to download it directly, here is the link:

Download

Available Versions

Version Date Notes
0.1.0 2025-03-13 Initial release
0.1.1 2025-03-14 Fixed import bug and added rules
1.0.0 2025-03-14 Added rules to readme
1.1.0 2025-03-17 added command to display rules on terminal
1.2.0 2025-03-28 Improved compatibility, added checks, and fixed issues

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_in_settings 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 .py extension.
  • 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

norminette_prune-1.2.7.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

norminette_prune-1.2.7-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file norminette_prune-1.2.7.tar.gz.

File metadata

  • Download URL: norminette_prune-1.2.7.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for norminette_prune-1.2.7.tar.gz
Algorithm Hash digest
SHA256 fcf202d79846ab66d35238eecfdc07bdf42e41aed3fb8b6fcc04fe5b710a1440
MD5 7e368efbfb1d34c0ca659b281d5eba34
BLAKE2b-256 f1fb76a8555e3568d7fb34eed363dc34c161657592ef7eff1a92ce2fe01aa27b

See more details on using hashes here.

File details

Details for the file norminette_prune-1.2.7-py3-none-any.whl.

File metadata

File hashes

Hashes for norminette_prune-1.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 9d6e856dd671025ebda58ff1364dbdc87fd74f0c8e30f78a04dc9c35d2e73612
MD5 643f1a022952d01700a16bd7168f6a2d
BLAKE2b-256 d968312abf48dcdd3cef82280f2dfb61857d627d3663a2a3c44882219b774b3d

See more details on using hashes here.

Supported by

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