summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2022-03-22 17:52:55 +0000
committerDaniel P. Berrangé <berrange@redhat.com>2022-04-21 15:00:29 +0000
commitf850a9f9e67c4ec73515748b95f17efaa3e39da2 (patch)
tree5f3498ff2c1d1e9ec1247f1a8c5d8a253c538a53
parent4ae177d49c48fb941656fded4bb036f0754cf6fc (diff)
downloadlibvirt-python-f850a9f9e67c4ec73515748b95f17efaa3e39da2.tar.gz
sanitytest: move initial class method mapping 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>
-rw-r--r--sanitytest.py140
1 files changed, 72 insertions, 68 deletions
diff --git a/sanitytest.py b/sanitytest.py
index ba086e2..856b663 100644
--- a/sanitytest.py
+++ b/sanitytest.py
@@ -119,82 +119,85 @@ for klassname in gottypes:
gotfunctions[klassname].append(name)
-# Phase 3: First cut at mapping of C APIs to python classes + methods
-basicklassmap = {} # type: Dict[str, Tuple[str, str, str]]
-
-for cname in wantfunctions:
- name = cname
- # Some virConnect APIs have stupid names
- if name[0:7] == "virNode" and name[0:13] != "virNodeDevice":
- name = "virConnect" + name[7:]
- if name[0:7] == "virConn" and name[0:10] != "virConnect":
- name = "virConnect" + name[7:]
-
- # The typed param APIs are only for internal use
- if name[0:14] == "virTypedParams":
- continue
+# First cut at mapping of C APIs to python classes + methods
+def basic_class_method_mapping(wantfunctions, gottypes):
+ basicklassmap = {} # type: Dict[str, Tuple[str, str, str]]
+
+ for cname in wantfunctions:
+ name = cname
+ # Some virConnect APIs have stupid names
+ if name[0:7] == "virNode" and name[0:13] != "virNodeDevice":
+ name = "virConnect" + name[7:]
+ if name[0:7] == "virConn" and name[0:10] != "virConnect":
+ name = "virConnect" + name[7:]
+
+ # The typed param APIs are only for internal use
+ if name[0:14] == "virTypedParams":
+ continue
- if name[0:23] == "virNetworkDHCPLeaseFree":
- continue
+ if name[0:23] == "virNetworkDHCPLeaseFree":
+ continue
- if name[0:28] == "virDomainStatsRecordListFree":
- continue
+ if name[0:28] == "virDomainStatsRecordListFree":
+ continue
- if name[0:19] == "virDomainFSInfoFree":
- continue
+ if name[0:19] == "virDomainFSInfoFree":
+ continue
- if name[0:25] == "virDomainIOThreadInfoFree":
- continue
+ if name[0:25] == "virDomainIOThreadInfoFree":
+ continue
- if name[0:22] == "virDomainInterfaceFree":
- continue
+ if name[0:22] == "virDomainInterfaceFree":
+ continue
- if name[0:21] == "virDomainListGetStats":
- name = "virConnectDomainListGetStats"
+ if name[0:21] == "virDomainListGetStats":
+ name = "virConnectDomainListGetStats"
- # These aren't functions, they're callback signatures
- if name in ["virConnectAuthCallbackPtr", "virConnectCloseFunc",
- "virStreamSinkFunc", "virStreamSourceFunc", "virStreamEventCallback",
- "virEventHandleCallback", "virEventTimeoutCallback", "virFreeCallback",
- "virStreamSinkHoleFunc", "virStreamSourceHoleFunc", "virStreamSourceSkipFunc"]:
- continue
- if name[0:21] == "virConnectDomainEvent" and name[-8:] == "Callback":
- continue
- if name[0:22] == "virConnectNetworkEvent" and name[-8:] == "Callback":
- continue
- if (name.startswith("virConnectStoragePoolEvent") and
- name.endswith("Callback")):
- continue
- if (name.startswith("virConnectNodeDeviceEvent") and
- name.endswith("Callback")):
- continue
- if (name.startswith("virConnectSecretEvent") and
- name.endswith("Callback")):
- continue
-
- # virEvent APIs go into main 'libvirt' namespace not any class
- if name[0:8] == "virEvent":
- if name[-4:] == "Func":
+ # These aren't functions, they're callback signatures
+ if name in ["virConnectAuthCallbackPtr", "virConnectCloseFunc",
+ "virStreamSinkFunc", "virStreamSourceFunc", "virStreamEventCallback",
+ "virEventHandleCallback", "virEventTimeoutCallback", "virFreeCallback",
+ "virStreamSinkHoleFunc", "virStreamSourceHoleFunc", "virStreamSourceSkipFunc"]:
+ continue
+ if name[0:21] == "virConnectDomainEvent" and name[-8:] == "Callback":
+ continue
+ if name[0:22] == "virConnectNetworkEvent" and name[-8:] == "Callback":
continue
- basicklassmap[name] = ("libvirt", name, cname)
- else:
- found = False
- # To start with map APIs to classes based on the
- # naming prefix. Mistakes will be fixed in next
- # loop
- for klassname in gottypes:
- klen = len(klassname)
- if name[0:klen] == klassname:
- found = True
- if name not in basicklassmap:
- basicklassmap[name] = (klassname, name[klen:], cname)
- elif len(basicklassmap[name]) < klen:
- basicklassmap[name] = (klassname, name[klen:], cname)
-
- # Anything which can't map to a class goes into the
- # global namespaces
- if not found:
- basicklassmap[name] = ("libvirt", name[3:], cname)
+ if (name.startswith("virConnectStoragePoolEvent") and
+ name.endswith("Callback")):
+ continue
+ if (name.startswith("virConnectNodeDeviceEvent") and
+ name.endswith("Callback")):
+ continue
+ if (name.startswith("virConnectSecretEvent") and
+ name.endswith("Callback")):
+ continue
+
+ # virEvent APIs go into main 'libvirt' namespace not any class
+ if name[0:8] == "virEvent":
+ if name[-4:] == "Func":
+ continue
+ basicklassmap[name] = ("libvirt", name, cname)
+ else:
+ found = False
+ # To start with map APIs to classes based on the
+ # naming prefix. Mistakes will be fixed in next
+ # loop
+ for klassname in gottypes:
+ klen = len(klassname)
+ if name[0:klen] == klassname:
+ found = True
+ if name not in basicklassmap:
+ basicklassmap[name] = (klassname, name[klen:], cname)
+ elif len(basicklassmap[name]) < klen:
+ basicklassmap[name] = (klassname, name[klen:], cname)
+
+ # Anything which can't map to a class goes into the
+ # global namespaces
+ if not found:
+ basicklassmap[name] = ("libvirt", name[3:], cname)
+
+ return basicklassmap
# Deal with oh so many special cases in C -> python mapping
@@ -376,6 +379,7 @@ def validate_c_api_bindings_present(finalklassmap):
try:
+ basicklassmap = basic_class_method_mapping(wantfunctions, gottypes)
finalklassmap = fixup_class_method_mapping(basicklassmap)
usedfunctions = validate_c_to_python_api_mappings(finalklassmap, gotfunctions)
validate_python_to_c_api_mappings(gotfunctions, usedfunctions)