• 
      

    Modernize BaseProperty, AliasProperty, and TypedProperty and add typing.

    Review Request #13062 — Created May 24, 2023 and submitted

    Information

    Djblets
    release-3.x

    Reviewers

    Djblets provides a few useful property classes for marshalling data or
    ensuring strict typing at runtime. These have been updated to support
    type hints, in order to help developers provide the right typing
    information when working with these classes.

    There are a couple caveats in the implementation:

    1. Due to the current lack of widespread support for PEP 696 (Type
      defaults for TypeVarLikes), we can't add any defaults for any of the
      types, meaning that get/set types must be specified.

    2. Pyright and MyPy behave differently when it comes to determining the
      correct type during assignment. MyPy implicitly uses the type of the
      assignment, while Pyright will happily allow other assignments to
      override that type. This means that conusmers need to explicitly type
      the descriptors.

    Examples are now present in the docs to help define these correctly.
    Best practices here will evolve after PEP 696 is landed, and hopefully
    once Pyright and MyPy come closer on implementations.

    Some other modernization is present:

    1. Properties now define a __set_name__() in order to know their attribute
      name, rather than having to scan for it. This is safer and faster than the
      old method.

    2. Most arguments to these properties are now keyword-only arguments.

    The old behavior/methods are now deprecated, scheduled to be removed in
    Djblets 5.0.

    Unit tests pass.

    Made use of this with some upcoming changes in Review Board for better type
    safety.

    Summary ID
    Modernize BaseProperty, AliasProperty, and TypedProperty and add typing.
    Djblets provides a few useful property classes for marshalling data or ensuring strict typing at runtime. These have been updated to support type hints, in order to help developers provide the right typing information when working with these classes. There are a couple caveats in the implementation: 1. Due to the current lack of widespread support for PEP 696 (Type defaults for TypeVarLikes), we can't add any defaults for any of the types, meaning that get/set types must be specified. 2. Pyright and MyPy behave differently when it comes to determining the correct type during assignment. MyPy implicitly uses the type of the assignment, while Pyright will happily allow other assignments to override that type. This means that conusmers need to explicitly type the descriptors. Examples are now present in the docs to help define these correctly. Best practices here will evolve after PEP 696 is landed, and hopefully once Pyright and MyPy come closer on implementations. Some other modernization is present: 1. Properties now define a `__set_name__()` in order to know their attribute name, rather than having to scan for it. This is safer and faster than the old method. 2. Most arguments to these properties are now keyword-only arguments. The old behavior/methods are now deprecated, scheduled to be removed in Djblets 5.0.
    55d82813b2e76569566b7e2fd53ec44a736e0ef2
    david
    1. Ship It!
    2. 
        
    chipx86
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-3.x (708a54f)