Package: lazy-object-proxy
A fast and thorough lazy object proxy.Free software: BSD 2-Clause LicenseNote that this is based onwrapt’s ObjectProxy with one big change: it calls a function the first time the proxy object is
used, whilewrapt.ObjectProxyjust forwards the method calls to the target object.In other words, you uselazy-object-proxywhen you only have the object way later and you usewrapt.ObjectProxywhen you
want to override few methods (by subclassing) and forward everything else to the target object.Example:import lazy_object_proxy

def expensive_func():
    from time import sleep
    print('starting calculation')
    # just as example for a very slow computation
    sleep(2)
    print('finished calculation')
    # return the result of the calculation
    return 10

obj = lazy_object_proxy.Proxy(expensive_func)
# function is called only when object is actually used
print(obj)  # now expensive_func is called

print(obj)  # the result without calling the expensive_funcInstallationpip install lazy-object-proxyDocumentationhttps://python-lazy-object-proxy.readthedocs.io/DevelopmentTo run all the tests run:toxAcknowledgementsThis project is based on some code fromwraptas you can see in the git history.Changelog1.10.0 (2023-12-15)Added Python 3.12 wheels.Dropped support for Python 3.7.Applied some reformatting and lint fixes using ruff to the codebase (mostly more Python 2 leftover cleanups).1.9.0 (2023-01-04)Added support for matrix multiplication operator (@).Should have all the wheels now (including the manylinux ones).Bumped minimum version requirements for setuptools and setuptools-scm.Switched the default pure python fallback implementation to the “simple” one (when youfrom lazy_object_proxy import Proxyand the C extension is not available).
Previously the “slots” implementation was used but as it turns out it is slower on Python 3.1.8.0 (2022-10-26)Cleaned up use of cPickle. Contributed by Sandro Tosi in#62.Cleaned up more dead Python 2 code.Added Python 3.11 wheels.Dropped support for Python 3.6.1.7.1 (2021-12-15)Removed most of the Python 2 support code and fixedpython_requiresto require at least Python 3.6.Note that 1.7.0 has been yanked because it could not install on Python 2.7.
Installing lazy-object-proxy on Python 2.7 should automatically fall back to the 1.6.0 release now.1.7.0 (2021-12-15)Switched CI to GitHub Actions, this has a couple consequences:Support for Python 2.7 is dropped. You can still install it there but it’s not tested anymore and
Python 2 specific handling will be removed at some point.Linux wheels are now provided inmusllinuxandmanylinux2014variants.Fixed__index__to fallback tointif the wrapped object doesn’t have an__index__method.
This prevents situations where code using a proxy would otherwise likely just callinthad the object
not have an__index__method.1.6.0 (2021-03-22)Added support for async special methods (__aiter__,__anext__,__await__,__aenter__,__aexit__).
These are used in theasync for,await` and ``async withstatements.Note that__await__returns a wrapper that tries to emulate the crazy
stuff going on in the ceval loop, so there will be a small performance overhead.Added the__resolved__property. You can use it to check if the factory has
been called.1.5.2 (2020-11-26)Added Python 3.9 wheels.Removed Python 2.7 Windows wheels
(not supported on newest image with Python 3.9).1.5.1 (2020-07-22)Added ARM64 wheels (manylinux2014).1.5.0 (2020-06-05)Added support for__fspath__.Dropped support for Python 3.4.1.4.3 (2019-10-26)Added binary wheels for Python 3.8.Fixed license metadata.1.4.2 (2019-08-22)Included apyproject.tomlto allow users install the sdist with old python/setuptools, as the
setuptools-scm dep will be fetched by pip instead of setuptools.
Fixes#30.1.4.1 (2019-05-10)Fixed wheels being built with-coveragecflags. No more issues about boguscext.gcdafiles.Removed useless C file from wheels.Changedsetup.pyto use setuptools-scm.1.4.0 (2019-05-05)Fixed__mod__for the slots backend. Contributed by Ran Benita in#28.Dropped support for Python 2.6 and 3.3. Contributed by “hugovk” in#24.1.3.1 (2017-05-05)Fix broken release (sdisthad a brokenMANIFEST.in).1.3.0 (2017-05-02)Speed up arithmetic operations involvingcext.Proxysubclasses.1.2.2 (2016-04-14)Addedmanylinuxwheels.Minor cleanup in readme.1.2.1 (2015-08-18)Fix a memory leak (the wrapped object would get bogus references). Contributed by Astrum Kuo in#10.1.2.0 (2015-07-06)Don’t instantiate the object when __repr__ is called. This aids with debugging (allows one to see exactly in
what state the proxy is).1.1.0 (2015-07-05)Added support for pickling. The pickled value is going to be the wrapped objectwithoutany Proxy container.Fixed a memory management issue in the C extension (reference cycles weren’t garbage collected due to improper
handling in the C extension). Contributed by Alvin Chow in#8.1.0.2 (2015-04-11)First release on PyPI.