No project description provided
Project description
Lazy Import
Usage
# File: company.py
from user import User
class Company:
name = "company"
def get_user(self) -> User:
return User()
# File: user.py
from company import Company
class User:
name = "user"
def get_company(self) -> Company:
return Company()
if __name__ == "__main__":
company = User.get_company()
This file layout will throw a circular import error, but if we can do a lazy import, it's perfectly fine. Just wrap the block of code like follow snippets.
from lazy_import import lazy_import
with lazy_import():
from user import User
...
User will be imported when the __call__
or __getattr__
methods are called.
This example codes are implemented in the tests folder. See tests/test_user.py
and tests/test_company.py
.
NOTE
Keep in mind that the class of lazy imported is not the same class with your original User
class. It is wrapped by another class inside of lazy_imported()
.
Also, this library works with mypy.
TODO
This library currently doesn't support follow syntax:
with lazy_import():
# these are actually possible but currently not implmented...
import user
from user import User as user
How it works?
We can find out which files to import by parsing bytecodes inside the with
syntax. After that, just wrap the value to be imported.
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
Built Distribution
File details
Details for the file lz_import-0.1.0.tar.gz
.
File metadata
- Download URL: lz_import-0.1.0.tar.gz
- Upload date:
- Size: 4.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.2 CPython/3.11.3 Linux/5.15.0-1037-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e8f0e7da78be21b43f2b3d0155ded7905fb15f4f87e79ebeed4c0d87b1412549 |
|
MD5 | f001d9b7d5819b7cb659695f61012a56 |
|
BLAKE2b-256 | 6ffadd8b4175abff0b707ff559db0346fc31e790b80128edded3746811ac8ecc |
File details
Details for the file lz_import-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: lz_import-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.2 CPython/3.11.3 Linux/5.15.0-1037-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba37fee4452fbdad285e706b19afdc0ed8171760fdd01aec6f84261ee876dfb1 |
|
MD5 | fd6ae4888ea40e9924f483f20cbff6e6 |
|
BLAKE2b-256 | 8f9128f15c9a84b37d6c13156517a4bca092c58246b4bb57d9bf8a68652e9b7d |