Skip to main content

Execute code when certain modules are imported

Project description

Importhook

PyPI version

importhook is a Python package that lets you configure functions to call whenever a specific module is imported.

Installation

pip install importhook

Usage

Configure a hook to be called when socket module is imported.

import importhook

# Setup hook to be called any time the `socket` module is imported and loaded into module cache
@importhook.on_import('socket')
def on_socket_import(socket):
    print('"socket" module has been imported')

# Import module
import socket

You can also use importhook to intercept and modify a module on import by returning a Python module from your hook function.

import importhook

# Setup hook to be called any time the `socket` module is imported and loaded into module cache
@importhook.on_import('socket')
def on_socket_import(socket):
    new_socket = importhook.copy_module(socket)
    setattr(new_socket, 'gethostname', lambda: 'patched-hostname')
    return new_socket

# Import module
import socket

# Prints: 'patched-hostname'
print(socket.gethostname())

importhook also comes with helpers to reload modules that have already been imported.

import socket
import importhook


# Setup hook to be called any time the `socket` module is imported and loaded into module cache
# DEV: `on_socket_import` will be called immediately because the `socket` module is already loaded
@importhook.on_import('socket')
def on_socket_import(socket):
    print('"socket" module has been imported')


# Reload the socket module
# DEV: Reassign to `socket` in case one of our hooks modifies the module
socket = importhook.reload_module(socket)

Design decisions

Overwriting sys.meta_path

If a Python developer wants to modify the import behavior they can do so by adding a new importlib.abc.Finder class into sys.meta_path.

import sys

# Add our custom `importlib.abc.Finder` to `sys.meta_path`
sys.meta_path.append(MyCustomFinder)

One of the major design decisions we have taken with importhook is to wrap/overwrite sys.meta_path. What it means is that importhook will continue to work as expected regardless of any other modifications of sys.meta_path.

There is however one caveat, if you were to do sys.meta_path = [MyCustomFinder] + sys.meta_path then sys.meta_path will get converted back into a list. Existing modifications to the finders in sys.meta_path will still work as expected, but any new finders added will not get hooked.

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

importhook-1.0.4.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

importhook-1.0.4-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file importhook-1.0.4.tar.gz.

File metadata

  • Download URL: importhook-1.0.4.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.7.0

File hashes

Hashes for importhook-1.0.4.tar.gz
Algorithm Hash digest
SHA256 3994b90d60453ffae3a95ac154f09d768ec27664411523e6b9690d412e9d2789
MD5 a1de19b886d9721c59ab26b27210f70d
BLAKE2b-256 8c415080c98df05a42ce814d668da1b2fe68d781f74de6eb45e3a1cd44b1b4f4

See more details on using hashes here.

File details

Details for the file importhook-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: importhook-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.7.0

File hashes

Hashes for importhook-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 2b31547faa52da68bb41d7a3b50230c0a6a95119674fc5bffede93027cc48a83
MD5 83b730b759e062510cad3fcaf211ca78
BLAKE2b-256 e23daf1f3ae3fccf742e3bdf17bbef64267682b32ae5b733025760029bb28479

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page