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-1.0.1.tar.gz
(19.9 kB
view details)
File details
Details for the file githooklib-1.0.1.tar.gz.
File metadata
- Download URL: githooklib-1.0.1.tar.gz
- Upload date:
- Size: 19.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9bda822b448d3555acd36f5d3e8ca2c9e0530108731323362882d3833c291a81
|
|
| MD5 |
a99cb837f84ecad2d51db436f6a06e40
|
|
| BLAKE2b-256 |
d1a358854042a96e8b715a502d77eea1ab2a6cbc5a2ac1859ef6f70d3fd88038
|