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.9.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

importhook-1.0.9-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: importhook-1.0.9.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.8.0 tqdm/4.27.0 CPython/3.7.7

File hashes

Hashes for importhook-1.0.9.tar.gz
Algorithm Hash digest
SHA256 635ad367225fa022221025545c167b09d09ada671821b6e587df0d5ae4bf0aab
MD5 a48f163a2aa6d5234554d1310794c2d0
BLAKE2b-256 da20ba0146cefd926dd6bff3657418b467a3c227af6b4a9c2e1b5fc68d8a1deb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: importhook-1.0.9-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.8.0 tqdm/4.27.0 CPython/3.7.7

File hashes

Hashes for importhook-1.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 64500997b59abf054ddd5037c5133879a4b3ee2091370b46af30befd0be331c1
MD5 0008f897bc40bf5dece771ff012010b0
BLAKE2b-256 4276e833efe967ee1e18a54ce6a2e8e58d351c2844fec3afeedb5ea368406f67

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