• 
      

    Remove @augment_from when overriding and fix UserQueryError handling.

    Review Request #13392 — Created Nov. 1, 2023 and submitted

    Information

    Review Board
    release-5.0.x

    Reviewers

    The @augment_from decorator is useful in API handlers for attaching
    new decorators to methods defined in parent functions. However, we have
    a couple of API handlers that use it and then override the
    functionality. What happens when you do that is that you run the parent
    function and then you run the new function both, and you end up running
    the decorators for both, hitting the database for some (namely the Local
    Site ones) each time.

    One of the methods doing that in the codebase today isn't operating in
    the way the decorator works, and ends up with the parent implementation
    being called twice. The other method does some checks later in the
    process than we'd want.

    This change fixes up the two methods that are overriding their parents,
    removing the @augment_from decorator, applying their own decorators,
    and then calling the parent methods when most appropriate. We still end
    up with the duplicate decorator handling, but it's the best we can do
    right now without additional work on the base API support.

    One of the methods was meant to catch a UserQueryError and return a
    suitable API error code. This has been broken ever since we sandboxed
    calls to AuthBackend.populate_users(). In the process of fixing this,
    I fixed that issue to avoid sandboxing this particular error.

    All unit tests pass.

    Verified that the resulting API errors and fields for this API match
    what was there before.

    Summary ID
    Remove @augment_from when overriding and fix UserQueryError handling.
    The `@augment_from` decorator is useful in API handlers for attaching new decorators to methods defined in parent functions. However, we have a couple of API handlers that use it and then override the functionality. What happens when you do that is that you run the parent function and then you run the new function both, and you end up running the decorators for both, hitting the database for some (namely the Local Site ones) each time. One of the methods doing that in the codebase today isn't operating in the way the decorator works, and ends up with the parent implementation being called twice. The other method does some checks later in the process than we'd want. This change fixes up the two methods that are overriding their parents, removing the `@augment_from` decorator, applying their own decorators, and then calling the parent methods when most appropriate. We still end up with the duplicate decorator handling, but it's the best we can do right now without additional work on the base API support. One of the methods was meant to catch a `UserQueryError` and return a suitable API error code. This has been broken ever since we sandboxed calls to `AuthBackend.populate_users()`. In the process of fixing this, I fixed that issue to avoid sandboxing this particular error.
    506378ccdae61252d39f9d2f0636a413fdbc3ca7
    david
    1. Ship It!
    2. 
        
    maubin
    1. Ship It!
    2. 
        
    chipx86
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-5.0.x (3102026)