Execute code when certain modules are imported
Project description
Importhook
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
635ad367225fa022221025545c167b09d09ada671821b6e587df0d5ae4bf0aab
|
|
| MD5 |
a48f163a2aa6d5234554d1310794c2d0
|
|
| BLAKE2b-256 |
da20ba0146cefd926dd6bff3657418b467a3c227af6b4a9c2e1b5fc68d8a1deb
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64500997b59abf054ddd5037c5133879a4b3ee2091370b46af30befd0be331c1
|
|
| MD5 |
0008f897bc40bf5dece771ff012010b0
|
|
| BLAKE2b-256 |
4276e833efe967ee1e18a54ce6a2e8e58d351c2844fec3afeedb5ea368406f67
|