| 111 | return source_action_ref["pattern"] if source_action_ref else None |
| 112 | |
| 113 | def _do_analyze(self, action_ref, rule_links=None, processed=None, depth=0): |
| 114 | if processed is None: |
| 115 | processed = set() |
| 116 | if rule_links is None: |
| 117 | rule_links = [] |
| 118 | processed.add(action_ref) |
| 119 | for rule_link in self._rules.get(action_ref, []): |
| 120 | rule_links.append((depth, rule_link)) |
| 121 | if rule_link._dest_action_ref in processed: |
| 122 | continue |
| 123 | self._do_analyze( |
| 124 | rule_link._dest_action_ref, |
| 125 | rule_links=rule_links, |
| 126 | processed=processed, |
| 127 | depth=depth + 1, |
| 128 | ) |
| 129 | return rule_links |
| 130 | |
| 131 | |
| 132 | class Grapher(object): |