# Pre-commit hooks

A pre-commit hook is a script that is executed before a commit is made in version control systems such as Git. Pre-commit hooks can be used to perform tasks such as running tests, linting code, or checking for formatting errors. The pre-commit hook provides an extra layer of automation to make sure only valid code is committed to the repository.

Pre-commit hooks can be used for the following tasks:

* Running tests
    
* Linting code
    
* Checking formatting errors
    
* Enforcing coding standards
    
* Checkpointing data before making changes to the repository
    
* Undoing undesirable commits.
    

## Installation Instructions

The pre-commit package is available on PyPI and can be installed using the `pip install pre-commit` command.

After installing the package, you can create a `.pre-commit-config.yaml` file in the project's root directory, which contains the configuration for the pre-commit hooks. You can then add the desired pre-commit hooks to this file and include the command(s) that should be executed in each hook. Finally, you can run the `pre-commit install` command from the root directory to install the pre-commit hooks and enable them for the project.

## Example

```yaml
repos:
    - repo: https://github.com/pre-commit/pre-commit-hooks
      rev: v4.4.0
      hooks:
      - id: detect-aws-credentials
        args: ["--allow-missing-credentials"]
      - id: detect-private-key
      - id: check-added-large-files
      - id: check-symlinks
      - id: check-merge-conflict
      - id: check-yaml
      - id: debug-statements
    - repo: https://github.com/ambv/black
      rev: 23.1.0
      hooks:
      - id: black
        args: ["--line-length", "80"]
    - repo: https://github.com/PyCQA/bandit
      rev: "1.7.5"
      hooks:
      - id: bandit
        args: ["--skip", "B101", "B703", "B308"]
    - repo: https://github.com/PyCQA/flake8
      rev: 6.0.0
      hooks:
      - id: flake8
        args: ["--config", "setup.cfg"]
    - repo: https://github.com/pycqa/isort
      rev: 5.12.0
      hooks:
      - id: isort
        args: [ "--profile", "black", "--line-length", "80",]
```

This pre-commit hook configuration will run several checks on your code before it is committed. The `detect-aws-credentials` hook will ensure that AWS credentials are not accidentally added to your project files.

The `detect-private-key` hook will detect any private key files in your changes. The `check-added-large-files` hook will check for large files added to your repo.

The `check-symlinks` hook will make sure no broken symlinks are added.

The `check-merge-conflict` hook will detect merge conflicts in your changes.

The `check-yaml` hook will check YAML files for errors.

The `debug-statements` hook will detect debug statements in your code.

The `black` hook will check your code for formatting using the Black code style.

The `bandit` hook will check your code for any potential security issues.

The `flake8` hook will check for code style compliance. It will also look for configuration files in `setup.cfg`.

And finally, the `isort` hook will check your imports for proper sorting.
