• 
      

    Feature-gate the new class-based actions system and shutdown hooks correctly

    Review Request #9384 — Created Nov. 17, 2017 and submitted

    Information

    Review Board
    release-3.0.x
    035a6a8...

    Reviewers

    Since https://reviews.reviewboard.org/r/9131/ did not make it into the
    release window for RB 3.0, we cannot address the issues in the original
    implementation of class-based actions. So we are gating them behind a
    feature so they can be marked as experimental (and not to be used in
    production). That way we will be able to fix up the issues in the
    implementation for a future release.

    This patch also addresses the issue of the new action hooks not
    unregistering their child actions.

    Documentation on action hooks has been reverted to how it was in
    Review Board 2.5.

    • Unit tests all pass.
    • Wrote a test extension which (1) registered a hook that uses
      class-based actions and (2) registered a hook using dict-based
      actions. The former were not available (and was logged as such) and
      the latter were.
    Description From Last Updated

    E501 line too long (80 > 79 characters)

    reviewbotreviewbot

    I don't think we need the conditional here. In the only case where uses_experimental_actions is True, self.actions is set to …

    daviddavid

    I don't think "Class-Based" needs to be capitalized here.

    daviddavid

    This can remain action-hooks, since that anchor is valid for the "new" (as of this change) docs.

    chipx86chipx86

    This can also now be simplified into a single level: if (not class_based_actions_feature.is_enabled() and not all(isinstance(action, dict) for action in …

    daviddavid

    Let's also state that the API is expected to change in coming patch releases.

    chipx86chipx86

    Blank line between these.

    chipx86chipx86

    This should be toward the end of the class. If we also use self.__class__.__name__, we don't need to override this …

    chipx86chipx86

    E211 whitespace before '('

    reviewbotreviewbot
    Checks run (1 failed, 1 succeeded)
    flake8 failed.
    JSHint passed.

    flake8

    brennie
    david
    1. 
        
    2. reviewboard/extensions/hooks.py (Diff revision 2)
       
       
      Show all issues

      I don't think we need the conditional here. In the only case where uses_experimental_actions is True, self.actions is set to [] (and so calling _register_actions will be a no-op).

    3. reviewboard/reviews/features.py (Diff revision 2)
       
       
      Show all issues

      I don't think "Class-Based" needs to be capitalized here.

    4. 
        
    brennie
    brennie
    david
    1. 
        
    2. reviewboard/extensions/hooks.py (Diff revision 4)
       
       
       
       
       
       
       
       
      Show all issues

      This can also now be simplified into a single level:

      if (not class_based_actions_feature.is_enabled() and
          not all(isinstance(action, dict) for action in actions)):
          logging.error(...)
          actions = []
      
    3. 
        
    chipx86
    1. 
        
    2. docs/manual/extending/index.rst (Diff revision 4)
       
       
      Show all issues

      This can remain action-hooks, since that anchor is valid for the "new" (as of this change) docs.

    3. reviewboard/extensions/hooks.py (Diff revision 4)
       
       
       
      Show all issues

      Let's also state that the API is expected to change in coming patch releases.

    4. reviewboard/extensions/tests.py (Diff revision 4)
       
       
       
      Show all issues

      Blank line between these.

    5. reviewboard/reviews/actions.py (Diff revision 4)
       
       
       
      Show all issues

      This should be toward the end of the class.

      If we also use self.__class__.__name__, we don't need to override this for subclasses.

      1. Oops this was just for me while I was debugging what actions were getting double-released.

    6. 
        
    brennie
    Review request changed
    Change Summary:

    Addressed David & Christian's issues

    Commit:
    d05366149910046d6e8edf62b0d0deae6d30c98e
    c7a91ce55c503451543de824e0b2d2f1a9bbf549

    Checks run (1 failed, 1 succeeded)

    flake8 failed.
    JSHint passed.

    flake8

    brennie
    chipx86
    1. Ship It!
    2. 
        
    david
    1. Ship It!
    2. 
        
    brennie
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-3.0.x (7eaa381)