Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Align behavior with objects raising in __getattr__ #157

Merged
merged 3 commits into from
Oct 9, 2024

Commits on Oct 9, 2024

  1. Configuration menu
    Copy the full SHA
    0d62399 View commit details
    Browse the repository at this point in the history
  2. Align behavior with objects raising in __getattr__

    The observed problem was a behavior different between C and python
    implementation on python 3, happening with Zope python script. When the
    context can not be accessed by the current user, Zope binds a
    `Shared.DC.Scripts.Bindings.UnauthorizedBinding`, a class that raises an
    Unauthorized error when the context is actually accessed, in order to
    postpone the Unauthorized if something is actually accessed. This class
    does implements this by raising Unauthorized in `__getattr__`.
    
    The python implementation of `rolesForPermissionOn` used `hasattr` and
    `hasattr` has changed between python2 and python3, on python2 it was
    ignoring all exceptions, including potential Unauthorized errors and
    just returning False, but on python3 these errors are now raised.
    This change of behavior of python causes `rolesForPermissionOn` to
    behave differently: when using python implementation on python2 or when
    using C implementation, such Unauthorized errors were gracefully handled
    and caused `checkPermission` to return False, but on python3 the
    Unauthorized is raised.
    
    The C implementation of `rolesForPermissionOn` uses a construct
    equivalent to the python2 version of `hasattr`. For consistency - and
    because ignoring errors is usually not good - we also want to change it
    to be have like the python3 implementation.
    
    This change make this scenario behave the same between python and C
    implementations:
     - `Unauthorized` errors raised in `__getattr__` are supported on py3.
     - Other errors  than `AttributeError` and `Unauthorized` raised in
        `__getattr__` are no longer ignored in the C implementation.
    perrinjerome committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    52994b3 View commit details
    Browse the repository at this point in the history
  3. Update CHANGES.rst

    Co-authored-by: Dieter Maurer <[email protected]>
    perrinjerome and d-maurer authored Oct 9, 2024
    Configuration menu
    Copy the full SHA
    510e507 View commit details
    Browse the repository at this point in the history