(self)
| 939 | return self.source_file(class_name, lines) |
| 940 | |
| 941 | def registration_order(self) -> List[Tuple[object, Optional[str]]]: |
| 942 | entries: List[Tuple[object, Optional[str], List[Message]]] = [] |
| 943 | |
| 944 | def message_path(messages: List[Message]) -> str: |
| 945 | return ".".join(message.name for message in messages) |
| 946 | |
| 947 | def add_message(message: Message, parent_stack: List[Message]) -> None: |
| 948 | owner_path = ".".join(owner.name for owner in parent_stack) or None |
| 949 | entries.append((message, owner_path, parent_stack)) |
| 950 | current_stack = [*parent_stack, message] |
| 951 | for enum in message.nested_enums: |
| 952 | entries.append((enum, message_path(current_stack), current_stack)) |
| 953 | for union in message.nested_unions: |
| 954 | entries.append((union, message_path(current_stack), current_stack)) |
| 955 | for nested in message.nested_messages: |
| 956 | add_message(nested, current_stack) |
| 957 | |
| 958 | for enum in self.schema.enums: |
| 959 | entries.append((enum, None, [])) |
| 960 | for union in self.schema.unions: |
| 961 | entries.append((union, None, [])) |
| 962 | for message in self.schema.messages: |
| 963 | add_message(message, []) |
| 964 | |
| 965 | local_entries: Dict[int, Tuple[object, Optional[str], List[Message]]] = { |
| 966 | id(type_def): (type_def, owner_path, parent_stack) |
| 967 | for type_def, owner_path, parent_stack in entries |
| 968 | if not self.is_imported_type(type_def) |
| 969 | } |
| 970 | ordered: List[Tuple[object, Optional[str]]] = [] |
| 971 | visiting: Set[int] = set() |
| 972 | visited: Set[int] = set() |
| 973 | |
| 974 | def visit(type_def: object) -> None: |
| 975 | key = id(type_def) |
| 976 | if key in visited or key not in local_entries: |
| 977 | return |
| 978 | if key in visiting: |
| 979 | return |
| 980 | visiting.add(key) |
| 981 | _, _, parent_stack = local_entries[key] |
| 982 | for dependency in self.registration_dependencies(type_def, parent_stack): |
| 983 | visit(dependency) |
| 984 | visiting.remove(key) |
| 985 | visited.add(key) |
| 986 | current, owner_path, _ = local_entries[key] |
| 987 | ordered.append((current, owner_path)) |
| 988 | |
| 989 | for type_def, _, _ in entries: |
| 990 | visit(type_def) |
| 991 | return ordered |
| 992 | |
| 993 | def registration_dependencies( |
| 994 | self, type_def: object, parent_stack: List[Message] |
no test coverage detected