Add typing structures for the diff viewer context.

Review Request #13666 — Created March 25, 2024 and submitted

Information

Review Board
release-7.x

Reviewers

The context that's assembled and used to render the diff viewer page
(both the HTML-based UI and the diff context API endpoint) has grown
organically since the very earliest days of Review Board, and is a
pretty big hairy mess. In order to bring at least a little bit of sanity
to it, this change adds typing structures so that type checkers can
verify that we're always assigning things correctly.

The only actual change to the content of the context is that we can no
longer end up with non-bool types for the is_draft_diff and
is_draft_interdiff fields.

Ran unit tests.

Summary ID
Add typing structures for the diff viewer context.
The context that's assembled and used to render the diff viewer page (both the HTML-based UI and the diff context API endpoint) has grown organically since the very earliest days of Review Board, and is a pretty big hairy mess. In order to bring at least a little bit of sanity to it, this change adds typing structures so that type checkers can verify that we're always assigning things correctly. The only actual change to the content of the context is that we can no longer end up with non-`bool` types for the `is_draft_diff` and `is_draft_interdiff` fields. Testing Done: - Ran unit tests.
eaf2f91109549ee9bfe835fbac9bc42b86f397aa
Description From Last Updated

Missing Returns.

chipx86chipx86

Might be a good time to deprecate non-keyword-only arguments.

chipx86chipx86

Can you add Args for these?

chipx86chipx86

If we're not documenting these, we don't need blank lines between them.

chipx86chipx86

Blank line between these.

chipx86chipx86

These can be assertFalse.

chipx86chipx86
chipx86
  1. Overall looks good, but I have two broad thoughts:

    1. Discussion point: I wonder if we should consider putting at least some of these serialized types into a module that can own them. This wouldn't make sense everywhere, but might help keep some things organized? It'd be a fine line, so I don't really have anything more to offer on this.

    2. I think we probably should document these serialized types, if they're intended to be consumed outside of the module. I know we talked about this in the context of TypeScript, consuming APIs, but when we're providing them in a situation where changes may impact a caller's use, we should document them so there's a clear path to versioning and deprecating.

      1. Hmm. I'll have to think about this. For now I think keeping those definitions close to the views that use them is best.
      2. Adding docs isn't too much of a burden, though the amount that we "use" these is pretty limited outside of the code that's changed in here, plus the templates that render the pages.
  2. reviewboard/diffviewer/views.py (Diff revision 1)
     
     
     
     
     
     
     
     
     
    Show all issues

    Missing Returns.

  3. reviewboard/reviews/context.py (Diff revision 1)
     
     
     
    Show all issues

    Might be a good time to deprecate non-keyword-only arguments.

  4. reviewboard/reviews/context.py (Diff revision 1)
     
     
     
     
     
     
     
     
     
     
    Show all issues

    Can you add Args for these?

  5. reviewboard/reviews/models/review_request.py (Diff revision 1)
     
     
     
     
     
     
    Show all issues

    If we're not documenting these, we don't need blank lines between them.

  6. reviewboard/reviews/views/diffviewer.py (Diff revision 1)
     
     
     
    Show all issues

    Blank line between these.

  7. Show all issues

    These can be assertFalse.

  8. 
      
david
maubin
  1. Ship It!
  2. 
      
david
Review request changed
Status:
Completed
Change Summary:
Pushed to release-7.x (73c3882)