Return a generator representing the lineage of the resource object implied by the resource argument. The generator first returns resource unconditionally. Then, if resource supplies a __parent__ attribute, return the resource represented by resource.__parent__. If that resource has a __parent__ attribute, return that resource's parent, and so on, until the resource being inspected either has no __parent__ attribute or which has a __parent__ attribute of None. For example, if the resource tree is:

thing1 = Thing()
thing2 = Thing()
thing2.__parent__ = thing1

Calling lineage(thing2) will return a generator. When we turn it into a list, we will get:

[ <Thing object at thing2>, <Thing object at thing1> ]
inside(resource1, resource2)[source]

Is resource1 'inside' resource2? Return True if so, else False.

resource1 is 'inside' resource2 if resource2 is a lineage ancestor of resource1. It is a lineage ancestor if its parent (or one of its parent's parents, etc.) is an ancestor.