Use generator script directly

This commit is contained in:
Joe Farebrother
2025-08-21 14:01:24 +01:00
parent f24f7d5146
commit 9edfd7a6fb
2 changed files with 768 additions and 248 deletions

View File

@@ -0,0 +1,31 @@
from shared_subclass_functions import wrap_in_template
import sys
import yaml
from pathlib import Path
py_version = sys.version.split()[0]
VERSION = f"process-builtin-exceptions 0.0.1; Python {py_version}"
builtins_model_path = Path(__file__).parent.parent.parent.parent / "lib/semmle/python/frameworks/builtins.model.yml"
def write_data(data, path: Path):
f = path.open("w+")
f.write(f"# {VERSION}\n")
yaml.dump(data, indent=2, stream=f, Dumper=yaml.CDumper)
builtin_names = dir(__builtins__)
builtin_dict = {x: getattr(__builtins__,x) for x in builtin_names}
builtin_exceptions = {v for v in builtin_dict.values() if type(v) is type and issubclass(v, BaseException)}
data = []
for sub in builtin_exceptions:
for base in sub.__mro__:
if issubclass(base, BaseException):
basename = base.__name__
subname = sub.__name__
row = [f"builtins.{basename}~Subclass", f"builtins.{subname}", ""]
data.append(row)
write_data(wrap_in_template(data), builtins_model_path)