• 
      

    Add the ability to lazily import and construct registries.

    Review Request #10511 — Created April 4, 2019 and submitted

    Information

    Djblets
    release-2.0.x

    Reviewers

    Registry instances are commonly constructed in the __init__.py of a
    module, but this can interfere with the Django initialization process if
    the registry's module or population logic requires direct or indirect
    access to modules containing models or some other Django apps.

    The solution to this is to lazily construct the registries on access.
    This can be done through SimpleLazyObject, which will construct an
    instance on first access and then forward on all operations to it. To
    simplify usage of this, this change introduces a
    lazy_import_registry() method, which will set up a function to import
    and construct of the registry and return a SimpleLazyObject with that
    function.

    This should be usable in any place where a registry needs to be
    constructed. It can also help speed up startup times when working with
    more expensive registries.

    Made use of this in Review Board. All unit tests pass there on all
    supported versions of Django.

    Summary ID
    Add the ability to lazily import and construct registries.
    Registry instances are commonly constructed in the `__init__.py` of a module, but this can interfere with the Django initialization process if the registry's module or population logic requires direct or indirect access to modules containing models or some other Django apps. The solution to this is to lazily construct the registries on access. This can be done through `SimpleLazyObject`, which will construct an instance on first access and then forward on all operations to it. To simplify usage of this, this change introduces a `lazy_import_registry()` method, which will set up a function to import and construct of the registry and return a `SimpleLazyObject` with that function. This should be usable in any place where a registry needs to be constructed. It can also help speed up startup times when working with more expensive registries.
    31bb775f06d964351acb9c877f77c22551bfef5c
    david
    1. Ship It!
    2. 
        
    chipx86
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-2.0.x (af28b05)