About the memoized decorator - my understanding is that it will always return the same value after calling it the first time, which would cause a stale parent case to be returned after a while.  The behavior I wanted here was to  only allow the cached version to be returned from within the context that I was working (i.e., as long as I'm using the same ParentCaseCache object, I know that all subsequent calls to parent could be stale, but will not be stale the next time I instantiate a new ParentCaseCache object).