mirror of
https://gitlab.com/libvirt/libvirt-python.git
synced 2025-12-20 00:23:49 +03:00
sanitytest: move class identification into a helper method
This is a step towards turning the sanitytest.py file into a normal python unittest. Best viewed with the '-b' flag to diff. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
@@ -79,44 +79,47 @@ for n in tree.xpath('/api/files/file/exports[@type="enum"]/@symbol'):
|
|||||||
continue
|
continue
|
||||||
wantenums.append(n)
|
wantenums.append(n)
|
||||||
|
|
||||||
# Phase 2: Identify all classes and methods in the 'libvirt' python module
|
# Identify all classes and methods in the 'libvirt' python module
|
||||||
gotenums = [] # type: List[str]
|
def identify_class_methods(wantenums, enumvals):
|
||||||
gottypes = [] # type: List[str]
|
gotenums = [] # type: List[str]
|
||||||
gotfunctions = {"libvirt": []} # type: Dict[str, List[str]]
|
gottypes = [] # type: List[str]
|
||||||
|
gotfunctions = {"libvirt": []} # type: Dict[str, List[str]]
|
||||||
|
|
||||||
for name in dir(libvirt):
|
for name in dir(libvirt):
|
||||||
if name.startswith('_'):
|
|
||||||
continue
|
|
||||||
thing = getattr(libvirt, name)
|
|
||||||
# Special-case libvirtError to deal with python 2.4 difference
|
|
||||||
# in Exception class type reporting.
|
|
||||||
if isinstance(thing, int):
|
|
||||||
gotenums.append(name)
|
|
||||||
elif getattr(thing, "__module__", "") == "typing":
|
|
||||||
continue
|
|
||||||
elif type(thing) == type or name == "libvirtError":
|
|
||||||
gottypes.append(name)
|
|
||||||
gotfunctions[name] = []
|
|
||||||
elif callable(thing):
|
|
||||||
gotfunctions["libvirt"].append(name)
|
|
||||||
|
|
||||||
for enum in wantenums:
|
|
||||||
if enum not in gotenums:
|
|
||||||
fail = True
|
|
||||||
for typ, enumval in enumvals.items():
|
|
||||||
if enum in enumval:
|
|
||||||
print("FAIL Missing exported enum %s of type %s" % (enum, typ))
|
|
||||||
|
|
||||||
for klassname in gottypes:
|
|
||||||
klassobj = getattr(libvirt, klassname)
|
|
||||||
for name in dir(klassobj):
|
|
||||||
if name.startswith('_'):
|
if name.startswith('_'):
|
||||||
continue
|
continue
|
||||||
if name == 'c_pointer':
|
thing = getattr(libvirt, name)
|
||||||
|
# Special-case libvirtError to deal with python 2.4 difference
|
||||||
|
# in Exception class type reporting.
|
||||||
|
if isinstance(thing, int):
|
||||||
|
gotenums.append(name)
|
||||||
|
elif getattr(thing, "__module__", "") == "typing":
|
||||||
continue
|
continue
|
||||||
thing = getattr(klassobj, name)
|
elif type(thing) == type or name == "libvirtError":
|
||||||
if callable(thing):
|
gottypes.append(name)
|
||||||
gotfunctions[klassname].append(name)
|
gotfunctions[name] = []
|
||||||
|
elif callable(thing):
|
||||||
|
gotfunctions["libvirt"].append(name)
|
||||||
|
|
||||||
|
for enum in wantenums:
|
||||||
|
if enum not in gotenums:
|
||||||
|
fail = True
|
||||||
|
for typ, enumval in enumvals.items():
|
||||||
|
if enum in enumval:
|
||||||
|
raise Exception("Missing exported enum %s of type %s" % (enum, typ))
|
||||||
|
|
||||||
|
for klassname in gottypes:
|
||||||
|
klassobj = getattr(libvirt, klassname)
|
||||||
|
for name in dir(klassobj):
|
||||||
|
if name.startswith('_'):
|
||||||
|
continue
|
||||||
|
if name == 'c_pointer':
|
||||||
|
continue
|
||||||
|
thing = getattr(klassobj, name)
|
||||||
|
if callable(thing):
|
||||||
|
gotfunctions[klassname].append(name)
|
||||||
|
|
||||||
|
return gotfunctions, gottypes
|
||||||
|
|
||||||
|
|
||||||
# First cut at mapping of C APIs to python classes + methods
|
# First cut at mapping of C APIs to python classes + methods
|
||||||
@@ -379,6 +382,7 @@ def validate_c_api_bindings_present(finalklassmap):
|
|||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
gotfunctions, gottypes = identify_class_methods(wantenums, enumvals)
|
||||||
basicklassmap = basic_class_method_mapping(wantfunctions, gottypes)
|
basicklassmap = basic_class_method_mapping(wantfunctions, gottypes)
|
||||||
finalklassmap = fixup_class_method_mapping(basicklassmap)
|
finalklassmap = fixup_class_method_mapping(basicklassmap)
|
||||||
usedfunctions = validate_c_to_python_api_mappings(finalklassmap, gotfunctions)
|
usedfunctions = validate_c_to_python_api_mappings(finalklassmap, gotfunctions)
|
||||||
|
|||||||
Reference in New Issue
Block a user