Conversation
Includes the slots proxy implementation source from lazy-object-proxy. This is necessary to modify the proxy's metaclass to use our custom @proxy_property decorator rather than the native @Property. The corresponding BSD license for lazy-object-proxy has been included in the associated source file and the THIRD_PARTY_LICENSES files. The dependency on lazy-object-proxy has been removed.
d19006b to
c2fe293
Compare
This is no longer needed because the new Proxy implementation hacks its __module__ attribute with a @proxy_property decorator so import lookup by pickle on the type works correctly.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR replaces use of
lazy_object_proxy.slots.Proxywith a new custom slots-basedProxyimplementation. Compared to the priorProxyimplementation with extendedlazy_object_proxy.slots.Proxyto add different pickling mechanics, the newproxystore.proxy.Proxyhas better handling for__module__access, a simpler MRO hierarchy (i.e., less inheritance), correct support for__annotations__, and drops magic methods deprecated in Python 3.Of these changes, the most important is that
__module__now behaves differently if accessed onProxydirectly or an instance ofProxy.This change addresses many long-standing headaches related to using proxies:
help(proxystore.proxy)works correctly and no longer raises a vagueTypeError: '<' not supported between instances of 'str' and 'property'.__module__attribute of object types no longer fail (as in Parsl and Dask).Internally, this required a lot of changes. Most importantly is that
lazy_object_proxy.slots.Proxyneeded to be modified so that source has been copied into ProxyStore's source and modified. The license forlazy-object-proxyis now included inTHIRD_PARTY_LICENSESand included in the relevant source files containing the third-party code.Fixes
Proxyclass #517Type of Change
Testing
Added a lot of new tests.
Pull Request Checklist
Please confirm the PR meets the following requirements.
pre-commit(e.g., mypy, ruff, etc.).