From 47210e1551675f95b3dd528871d8ce22387f802a Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Fri, 14 Aug 2026 12:21:47 -0400 Subject: [PATCH] better filtering of builtins in check_api --- devtools/check-api | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/devtools/check-api b/devtools/check-api index a85973a3..57b1fd25 100755 --- a/devtools/check-api +++ b/devtools/check-api @@ -5,6 +5,7 @@ import os import os.path import subprocess import sys +import types from collections import OrderedDict # import koji code from our checkout @@ -109,23 +110,28 @@ def dump_module(mod): _type = str(type(value)) if '__future__' in _type: continue + if type(value) in (types.BuiltinFunctionType, types.BuiltinMethodType): + vinfo['is_external'] = True + vinfo['is_builtin'] = True vinfo['type'] = str(type(value)) info[name] = vinfo if inspect.ismodule(value): vinfo['is_module'] = True continue - try: - if inspect.getsourcefile(value) != file: - # don't dig any deeper if it isn't defined in the module + if inspect.isclass(value): + if 'builtins' in value.__module__: + vinfo['is_external'] = True + vinfo['is_builtin'] = True + continue + elif inspect.getsourcefile(value) != file: vinfo['is_external'] = True continue - except TypeError: - # getsourcefile fails for numerous types - pass - if inspect.isclass(value): vinfo['is_class'] = True vinfo.update(dump_class(value)) elif inspect.isfunction(value): + if inspect.getsourcefile(value) != file: + vinfo['is_external'] = True + continue vinfo['is_function'] = True vinfo.update(dump_func(value)) return info @@ -255,6 +261,9 @@ def compare_mod_global(mod, name, old, new): def compare_class(cls, old, new): + if not new.get('is_class'): + error(f'No longer a class: {cls}') + return names1 = set(old['members']) names2 = set(new['members']) added = names2 - names1