Skip to main content

ihook

codecov PyPI - Python Version GitHub

ihook is a Python module that allows you to configure functions to call when importing modules. It supports both case-sensitive and case-insensitive module names and can handle hooks for modules that are imported using methods of importlib.

Features

  • Hook for modules that are imported.
  • Support for case-sensitive and case-insensitive module names.
  • Chain multiple hooks for the same or different modules.
  • Handle hooks for sub-packages and namespace packages.

Installation

You can install ihook using pip:

pip install ihook

Usage

Registering Hooks

You can register hooks using the @on_import decorator or by calling the on_import function directly.

Using the Decorator

import ihook

@ihook.on_import('math')
def on_math_import():
    print('math module imported')

import math  # This will trigger the hook and print 'math module imported'

Using the Function Directly

import ihook

def on_socket_import():
    print('socket module imported')

ihook.on_import('socket', on_socket_import)

import socket  # This will trigger the hook and print 'socket module imported'

Case-Insensitive Hooks

You can register hooks for module names in a case-insensitive manner by setting the case_sensitive parameter to False.

import ihook

@ihook.on_import('SocKet', case_sensitive=False)
def on_socket_import():
    print('socket module imported (case-insensitive)')

import socket  # This will trigger the hook and print 'socket module imported (case-insensitive)'

Hooks with Module Information

You can define hooks that take a ModuleInfo parameter, which provides more detailed information about the imported module. You can handle direct access to the module object using the module_object attribute.

import ihook

@ihook.on_import('socket')
def on_socket_import(module_info: ihook.ModuleInfo):
    print(f'{module_info.module_name} module imported')
    print(f'Module object: {module_info.module_object}')

import socket  # This will trigger the hook and print module information

Clearing Hooks

You can clear all registered hooks using the clear_hooks function.

import ihook

ihook.clear_hooks()  # This will clear all registered hooks

Un-patching

If you want to disable the hooking mechanism, you can use unpatch_meta_path to restore the original import mechanism. This function does not remove the registered hooks but disables the hooking mechanism.

import ihook

ihook.unpatch_meta_path()  # This will restore the original import mechanism

You can use patch_meta_path to re-enable the hooking mechanism. The registered hooks will still be available.

Advanced Usage

Handling Importlib

You can register hooks for modules that are imported or reloaded using importlib.

import ihook

@ihook.on_import('hashlib')
def on_hashlib_import():
    print('hashlib module imported')

import importlib
hashlib = importlib.import_module('hashlib')  # This will trigger the hook and print 'hashlib module imported'
importlib.reload(hashlib)  # This will trigger the hook again and print 'hashlib module imported'

License

This project is licensed under the MIT License. See the LICENSE file for details.

Metadata

Release files for ihook 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ihook 0.2.1
File Size Uploaded
ihook-0.2.1.tar.gz 12.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ihook 0.2.1
File Interpreter ABI Platform
ihook-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 19.7 kB

Release files / ihook-0.2.1.tar.gz

Download URL ihook-0.2.1.tar.gz
Size 12.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6f09a5f3d043097b30123082ebae7af42158a80a779fc49dfbbcd6966e0ac01a
BLAKE2b-256 checksum
How to use checksums
44bad3b86bf84ead73ce8a70a14681fc46f77626eb56a3776c55ce49b203b339
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2025.

Transparency log

Release files / ihook-0.2.1-py3-none-any.whl

Download URL ihook-0.2.1-py3-none-any.whl
Size 7.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5831159c49c4c13fe4cdd510e397f0485d76e9f0eeab0ea89e6939e66ea79c1c
BLAKE2b-256 checksum
How to use checksums
cf0eb2a79cdc4052fb47b95cfcfb599df5ba12104bb8386d1e698f05423844a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2

2 release files

0.1.1

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page