Skip to main content

A Python framework (and CLI) for creating, managing, and installing Git hooks with python

Project description

githooklib

A Python framework for creating, managing, and installing Git hooks with automatic discovery and CLI tools.

Installation

pip install githooklib

Quick Start

1. Create a Hook

Create a hook by subclassing GitHook in a githooks/ directory:

# githooks/pre_commit.py
from githooklib import GitHook, HookResult, GitHookContext


class PreCommitHook(GitHook):
    @property
    def hook_name(self) -> str:
        return "pre-commit"

    def execute(self, context: GitHookContext) -> HookResult:
        self.logger.info("Running pre-commit checks...")
        result = self.command_executor.run(["python", "-m", "pytest"])
        if not result.success:
            return HookResult(
                success=False,
                message="Tests failed. Commit aborted.",
                exit_code=1
            )
        return HookResult(success=True, message="All checks passed!")

2. Install the Hook

githooklib install pre-commit

3. Seed Example Hooks

githooklib seed                    # List available examples
githooklib seed pre_commit_black   # Seed an example

CLI Commands

githooklib list                    # List available hooks
githooklib show                    # Show installed hooks
githooklib install <hook-name>     # Install a hook
githooklib uninstall <hook-name>   # Uninstall a hook
githooklib run <hook-name>         # Run a hook manually
githooklib run <hook-name> --debug # Run with debug logging
githooklib seed [example-name]     # Seed example hooks

API Reference

GitHook

Base class for all Git hooks. Subclass and implement:

  • hook_name (property): The name of the Git hook (e.g., "pre-commit", "pre-push")
  • execute(context: GitHookContext) -> HookResult: Your hook logic

Available attributes:

  • logger: Logger instance for logging messages
  • command_executor: CommandExecutor instance for running shell commands

GitHookContext

Provides context when a hook is executed:

  • hook_name: The name of the hook being executed
  • stdin_lines: List of lines from stdin
  • project_root: Path to the project root
  • get_stdin_line(index: int, default: Optional[str]) -> Optional[str]: Get a specific line from stdin
  • has_stdin() -> bool: Check if stdin contains data

HookResult

Return value from execute():

  • success: Whether the hook passed (bool)
  • message: Optional message to display (str)
  • exit_code: Exit code (0 for success, non-zero for failure)

Requirements

  • Python 3.8+

License

See LICENSE file for details.

Homepage

https://github.com/danielnachumdev/githooklib

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

githooklib-0.1.3.tar.gz (18.7 kB view details)

Uploaded Source

File details

Details for the file githooklib-0.1.3.tar.gz.

File metadata

  • Download URL: githooklib-0.1.3.tar.gz
  • Upload date:
  • Size: 18.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for githooklib-0.1.3.tar.gz
Algorithm Hash digest
SHA256 06403044107a87ef28a2197443a6a93b3131421b29bf253a85783d59e00780e1
MD5 eaed7a8a804c53eddc374ebd3805127e
BLAKE2b-256 418e6788350ad1a97b8106432912e4e30f1d439a05ed61d3e224dec1fe729d4a

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