Best Practices I follow during python development in current project.
- Use Virtual Environments to keep dependencies isolated.
- vscode to develop
- Pytest, mockito for tests
- Document Code using MkDocs and publish it as site in gitlab pages. ( Sooner we are moving to Backstage)
- Taskfile , designed to streamline development processes related to testing package building, and publishing for a Python project. task is responsible for creating the source distribution (sdist) and wheel packages of the application using poetry. task also publishes the built package to a specified repository (GitLab in our case).
- Entire org using Renovate to automate the management of software dependencies, ensuring projects remain up-to-date with the latest versions and security patches.
- We use pre-commit on every commit to enforce our linting and style, use
pre-commit install --install-hooks
to enable it. - Mypy a static type checker that helps ensure type correctness in Python code. so we can catch type-related errors before runtime.
- Ruff , a linter and formatter that can check for style issues, potential bugs across Python code.
- some 10+ Pre-commit hooks.
- Strict Commitlint format
- Gitleaks for detecting sensitive information (like API keys and passwords)
- few more for Python project focusing on linting, testing, mutation testing, type checking, and ensuring code quality.
a sample function formatted according to Ruff's style conventions in our project would look like
def calculate_area(radius: float, pi: float = 3.14159) -> float:
"""Calculate the area of a circle.
Args:
radius (float): The radius of the circle.
pi (float, optional): The value of pi. Defaults to 3.14159.
Returns:
float: The area of the circle.
Raises:
ValueError: If the radius is negative.
"""
if radius < 0:
raise ValueError("Radius must be non-negative.")
return pi * (radius ** 2)
Top comments (0)