diff --git a/setup.py b/setup.py index da14759ca..cd6d1f180 100644 --- a/setup.py +++ b/setup.py @@ -93,6 +93,8 @@ def _get_class_info_from_source(source: str) -> Tuple[str, Optional[str]]: base = class_def.bases[0] if isinstance(base, ast.Name): parent_class = base.id + elif isinstance(base, ast.Subscript): + parent_class = base.value.id else: # NOTE: SSZ definition derives from earlier phase... # e.g. `phase0.SignedBeaconBlock` @@ -216,10 +218,19 @@ def get_spec(file_name: Path, preset: Dict[str, str], config: Dict[str, str], pr class_name, parent_class = _get_class_info_from_source(source) # check consistency with spec assert class_name == current_name + ignore_type = False if parent_class: - assert parent_class == "Container" + if parent_class == "Container": + pass + elif parent_class == "Vector": + ignore_type = True # Avoid Mypy error: Invalid base class "Vector" + else: + raise Exception("unrecognized parent class: " + source) # NOTE: trim whitespace from spec - ssz_objects[current_name] = "\n".join(line.rstrip() for line in source.splitlines()) + lines = [line.rstrip() for line in source.splitlines()] + if ignore_type: + lines[0] += " # type: ignore" + ssz_objects[current_name] = "\n".join(lines) else: raise Exception("unrecognized python code element: " + source) elif isinstance(child, Table):