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 messagescommand_executor: CommandExecutor instance for running shell commands
GitHookContext
Provides context when a hook is executed:
hook_name: The name of the hook being executedstdin_lines: List of lines from stdinproject_root: Path to the project rootget_stdin_line(index: int, default: Optional[str]) -> Optional[str]: Get a specific line from stdinhas_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
Project details
Release history Release notifications | RSS feed
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.2.tar.gz
(18.7 kB
view details)
File details
Details for the file githooklib-0.1.2.tar.gz.
File metadata
- Download URL: githooklib-0.1.2.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43f87825d94b894c989c0f7dc7b5a69a245c38834c0b3c81f6e1429c80939383
|
|
| MD5 |
1f1a1ccdce8a21fecebeaa44bbb1f0e9
|
|
| BLAKE2b-256 |
693b7be0a45afe26d742b5eed84dd92e436397ac6e3beb519d79d462c5e6af8b
|