want (<bound method LazyPredecessor._expand of <LazyPredecessor 41139664>>, ())
(<bound method AttributeRef._expand of <AttributeRef 40565968>>, ())
(<bound method AttributeRef._get_key of <AttributeRef 40565968>>, ('searchpath',))
(<bound method PythonicWrapper._get_key of <root>/yaybu>, ('searchpath',))
(<bound method AttributeRef._expand of <AttributeRef 40566160>>, ())
(<bound method PythonicWrapper._expand of <root>/yaybu/searchpath>, ())
(<bound method Include._expand of <Include 41070416>>, ())
(<bound method Include._expand of <Include 41123792>>, ())
(<bound method Include._expand of <Include 41136656>>, ())
(<bound method Directives._expand of <Directives 41070224>>, ())
LOOP (<bound method LazyPredecessor._expand of <LazyPredecessor 41139664>>, ())
(<bound method AttributeRef._expand of <AttributeRef 40611344>>, ())
(<bound method AttributeRef._get_key of <AttributeRef 40611344>>, ('options',))
(<bound method PythonicWrapper._get_key of <root>/yaybu>, ('options',))
(<bound method AttributeRef._expand of <AttributeRef 41138320>>, ())
(<bound method PythonicWrapper._expand of <root>/yaybu/options>, ())
<ROOT>
In master calling expand() on a dict will chain expansion to predecessors. This ensures that Include's happen in the right order. So accessing yaybu.options
will cause all the imports to happen. Unfortunately the includes need yaybu.searchpath
, so this call will call expand on the dicts too, triggering cycles.