Source code for swimlane.core.resolver

import weakref


[docs]class SwimlaneResolver(object): """Provides automatic weakref resolution for Swimlane client to avoid circular references and memory leaks """ def __init__(self, swimlane): self.__ref_swimlane = weakref.ref(swimlane) if swimlane else swimlane @property def _swimlane(self): """Transparently resolve the swimlane weakref""" if not self.__ref_swimlane: referent = self.__ref_swimlane else: referent = self.__ref_swimlane() if referent is None: raise ReferenceError("The swimlane object has been garbage collected. The Swimlane " "object uses weak references to avoid memory leaks. The object " "gets garbage collected when there are no more references to it. " "See the weakref documentation for more information.") return referent
[docs]class AppResolver(SwimlaneResolver): """Provides automatic weakref resolution for Swimlane client and App instance""" def __init__(self, app): super(AppResolver, self).__init__(app._swimlane) self.__ref_app = weakref.ref(app) if app else app @property def _app(self): if not self.__ref_app: referent = self.__ref_app else: referent = self.__ref_app() if referent is None: raise ReferenceError( "The App object of the Swimlane Object has been garbage collected. Both the App " "object and the Swimlane object use weak references to avoid memory leaks. The " "instance gets garbage collected when there are no more strong references to it. " "See the weakref documentation for more information.") return referent