Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lz_import-0.1.0.tar.gz (4.2 kB view details)

Uploaded Source

Built Distribution

lz_import-0.1.0-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

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

Hashes for lz_import-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e8f0e7da78be21b43f2b3d0155ded7905fb15f4f87e79ebeed4c0d87b1412549
MD5 f001d9b7d5819b7cb659695f61012a56
BLAKE2b-256 6ffadd8b4175abff0b707ff559db0346fc31e790b80128edded3746811ac8ecc

See more details on using hashes here.

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

Hashes for lz_import-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ba37fee4452fbdad285e706b19afdc0ed8171760fdd01aec6f84261ee876dfb1
MD5 fd6ae4888ea40e9924f483f20cbff6e6
BLAKE2b-256 8f9128f15c9a84b37d6c13156517a4bca092c58246b4bb57d9bf8a68652e9b7d

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