From nobody Sat Feb 7 09:37:00 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1570625966; cv=none; d=zoho.com; s=zohoarc; b=NSaeOYjZZ+BeqtuvoKZtGhTbkUYslrrGTJj4ektk/hS4xXORjBUK8WuuaNL/GMblnuH0yNWyE/cWFDj+j6qdwYtLaTkO811A3cYS01GC5XTBdLvzp+tS2zr3q2iLsaLctMHEaaaDgC2AT9EqwHyyfifLpOSNix8FQotqRmpznnk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1570625966; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Bkm6K9cRYcl7YTQ0/VsyuW/48y8OiTrQoucfJtYQURQ=; b=THcBxRdxCisKlfGLVW0X5jf/Cy2twClyOIzSr03eGmfdWfd0WWMgIib4nKmkLvI9FB5LEbuSUmi+vfsrqBhwjvoTXFmqUTDT3SWnVDnnQK47P+LY1trKqa8+MosNR7wo6OI1Y82TfRGeKAiCfUdcmJgAfgL9BJILG5y7XUBRqDg= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1570625966573730.6140682426845; Wed, 9 Oct 2019 05:59:26 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 809952CE90A; Wed, 9 Oct 2019 12:59:24 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 58383165F9; Wed, 9 Oct 2019 12:59:24 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 1193B4EE6A; Wed, 9 Oct 2019 12:59:24 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x99CxG15003012 for ; Wed, 9 Oct 2019 08:59:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id D15D55DAAD; Wed, 9 Oct 2019 12:59:16 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-112-67.ams2.redhat.com [10.36.112.67]) by smtp.corp.redhat.com (Postfix) with ESMTP id E14525DA2C; Wed, 9 Oct 2019 12:59:10 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Wed, 9 Oct 2019 13:58:41 +0100 Message-Id: <20191009125844.18202-8-berrange@redhat.com> In-Reply-To: <20191009125844.18202-1-berrange@redhat.com> References: <20191009125844.18202-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 07/10] python: sanitize blank line usage X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 09 Oct 2019 12:59:25 +0000 (UTC) Coding style expects 1 blank line between each method and 2 blank lines before each class. docs/apibuild.py:171:5: E303 too many blank lines (2) def set_header(self, header): ^ docs/apibuild.py:230:1: E302 expected 2 blank lines, found 1 class index: ^ docs/apibuild.py:175:5: E301 expected 1 blank line, found 0 def set_module(self, module): ^ ...more... Signed-off-by: Daniel P. Berrang=C3=A9 --- build-aux/syntax-check.mk | 2 - docs/apibuild.py | 26 ++++++++-- docs/reformat-news.py | 1 + src/esx/esx_vi_generator.py | 81 ------------------------------ src/hyperv/hyperv_wmi_generator.py | 23 +-------- tests/cputestdata/cpu-cpuid.py | 1 + 6 files changed, 25 insertions(+), 109 deletions(-) diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index c66183c1b0..c6d7ad1b9d 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -881,13 +881,11 @@ sc_require_enum_last_marker: # Validate many python style rules FLAKE8_INDENTATION =3D E114,E115,E116,E121,E125,E126,E127,E128,E129,E131 FLAKE8_WHITESPACE =3D E211,E221,E222,E225,E226,E231,E261 -FLAKE8_BLANK_LINES =3D E301,E302,E303,E305 FLAKE8_LINE_LENGTH =3D E501 FLAKE8_WARNINGS =3D W504 =20 FLAKE8_IGNORE =3D $(FLAKE8_INDENTATION),$\ $(FLAKE8_WHITESPACE),$\ - $(FLAKE8_BLANK_LINES),$\ $(FLAKE8_LINE_LENGTH),$\ $(FLAKE8_WARNINGS) \ $(NULL) diff --git a/docs/apibuild.py b/docs/apibuild.py index 86163c20b1..e944c01321 100755 --- a/docs/apibuild.py +++ b/docs/apibuild.py @@ -123,6 +123,7 @@ hidden_macros =3D { "VIR_EXPORT_VAR": "internal macro to mark exported vars", } =20 + def escape(raw): raw =3D raw.replace('&', '&') raw =3D raw.replace('<', '<') @@ -131,9 +132,11 @@ def escape(raw): raw =3D raw.replace('"', '"') return raw =20 + def uniq(items): return sorted(set(items)) =20 + class identifier: def __init__(self, name, header=3DNone, module=3DNone, type=3DNone, li= neno=3D0, info=3DNone, extra=3DNone, conditionals=3DNone): @@ -167,21 +170,27 @@ class identifier: r =3D r + " " + repr(self.conditionals) return r =20 - def set_header(self, header): self.header =3D header + def set_module(self, module): self.module =3D module + def set_type(self, type): self.type =3D type + def set_info(self, info): self.info =3D info + def set_extra(self, extra): self.extra =3D extra + def set_lineno(self, lineno): self.lineno =3D lineno + def set_static(self, static): self.static =3D static + def set_conditionals(self, conditionals): if conditionals is None or len(conditionals) =3D=3D 0: self.conditionals =3D None @@ -190,20 +199,28 @@ class identifier: =20 def get_name(self): return self.name + def get_header(self): return self.module + def get_module(self): return self.module + def get_type(self): return self.type + def get_info(self): return self.info + def get_lineno(self): return self.lineno + def get_extra(self): return self.extra + def get_static(self): return self.static + def get_conditionals(self): return self.conditionals =20 @@ -225,6 +242,7 @@ class identifier: if conditionals is not None: self.set_conditionals(conditionals) =20 + class index: def __init__(self, name=3D"noname"): self.name =3D name @@ -409,7 +427,6 @@ class index: elif count !=3D 0: print(" %d public %s" % (count, type)) =20 - def analyze(self): if not quiet: self.analyze_dict("functions", self.functions) @@ -419,6 +436,7 @@ class index: self.analyze_dict("typedefs", self.typedefs) self.analyze_dict("macros", self.macros) =20 + class CLexer: """A lexer for the C language, tokenize the input by reading and analyzing it line by line""" @@ -584,6 +602,7 @@ class CLexer: self.last =3D tok return tok =20 + class CParser: """The C module parser""" def __init__(self, filename, idx=3DNone): @@ -745,6 +764,7 @@ class CParser: % name) =20 return desc + # # Parse a comment block associate to a macro # @@ -945,7 +965,6 @@ class CParser: if desc =3D=3D "": self.warning("Function comment for %s lacks description of= the function" % name) =20 - return (ret[0], retdesc), args, desc =20 def parsePreproc(self, token): @@ -1434,7 +1453,6 @@ class CParser: if token[0] =3D=3D "comment": token =3D self.token() =20 - if token[0] =3D=3D "sep" and token[1] =3D=3D ';': token =3D self.token() =20 diff --git a/docs/reformat-news.py b/docs/reformat-news.py index 955ce2d45b..a06f945c02 100755 --- a/docs/reformat-news.py +++ b/docs/reformat-news.py @@ -24,6 +24,7 @@ import sys =20 COLUMNS =3D 80 =20 + def reformat_with_indent(text, initial_indent, indent): =20 res =3D "" diff --git a/src/esx/esx_vi_generator.py b/src/esx/esx_vi_generator.py index 28d440a6df..2310b56ad0 100755 --- a/src/esx/esx_vi_generator.py +++ b/src/esx/esx_vi_generator.py @@ -29,7 +29,6 @@ import os import os.path =20 =20 - OCCURRENCE__REQUIRED_ITEM =3D "r" OCCURRENCE__REQUIRED_LIST =3D "rl" OCCURRENCE__OPTIONAL_ITEM =3D "o" @@ -47,30 +46,24 @@ autobind_names =3D set() separator =3D "/* " + ("* " * 37) + "*\n" =20 =20 - def aligned(left, right, length=3D59): return left.ljust(length, ' ') + right =20 =20 - class Member: def __init__(self, type, occurrence): self.type =3D type self.occurrence =3D occurrence =20 - def is_enum(self): return self.type in predefined_enums or self.type in enums_by_name =20 - def is_object(self): return self.type in predefined_objects or self.type in objects_by_= name =20 - def is_type_generated(self): return self.type in enums_by_name or self.type in objects_by_name =20 - def get_occurrence_comment(self): occurrence_map =3D { OCCURRENCE__REQUIRED_ITEM: "/* required */", @@ -84,8 +77,6 @@ class Member: raise ValueError("unknown occurrence value '%s'" % self.occurr= ence) =20 =20 - - class Parameter(Member): def __init__(self, type, name, occurrence): Member.__init__(self, type, occurrence) @@ -96,7 +87,6 @@ class Parameter(Member): self.name =3D name self.autobind_name =3D None =20 - def generate_parameter(self, is_last=3DFalse, is_header=3DTrue, offset= =3D0): if self.occurrence =3D=3D OCCURRENCE__IGNORED: raise ValueError("invalid function parameter occurrence value = '%s'" @@ -118,7 +108,6 @@ class Parameter(Member): =20 return aligned(string, self.get_occurrence_comment() + "\n") =20 - def generate_return(self, offset=3D0, end_of_line=3D";"): if self.occurrence =3D=3D OCCURRENCE__IGNORED: raise ValueError("invalid function parameter occurrence value = '%s'" @@ -131,7 +120,6 @@ class Parameter(Member): =20 return aligned(string, self.get_occurrence_comment() + "\n") =20 - def generate_require_code(self): if self.occurrence in [OCCURRENCE__REQUIRED_ITEM, OCCURRENCE__REQUIRED_LIST]: @@ -139,7 +127,6 @@ class Parameter(Member): else: return "" =20 - def generate_serialize_code(self): if self.occurrence in [OCCURRENCE__REQUIRED_LIST, OCCURRENCE__OPTIONAL_LIST]: @@ -152,7 +139,6 @@ class Parameter(Member): return " ESX_VI__METHOD__PARAMETER__SERIALIZE(%s, %s)\n" \ % (self.type, self.name) =20 - def get_type_string(self, as_return_value=3DFalse): string =3D "" =20 @@ -173,7 +159,6 @@ class Parameter(Member): =20 return string =20 - def get_occurrence_short_enum(self): if self.occurrence =3D=3D OCCURRENCE__REQUIRED_ITEM: return "RequiredItem" @@ -187,7 +172,6 @@ class Parameter(Member): raise ValueError("unknown occurrence value '%s'" % self.occurrence) =20 =20 - class Method: def __init__(self, name, parameters, returns): self.name =3D name @@ -201,7 +185,6 @@ class Method: else: self.autobind_parameter =3D parameter =20 - def generate_header(self): header =3D "int esxVI_%s\n" % self.name header +=3D " (esxVI_Context *ctx" @@ -224,7 +207,6 @@ class Method: =20 return header =20 - def generate_source(self): source =3D "/* esxVI_%s */\n" % self.name source +=3D "ESX_VI__METHOD(%s," % self.name @@ -288,14 +270,12 @@ class Method: return source =20 =20 - class Property(Member): def __init__(self, type, name, occurrence): Member.__init__(self, type, occurrence) =20 self.name =3D name =20 - def generate_struct_member(self): if self.occurrence =3D=3D OCCURRENCE__IGNORED: return " /* FIXME: %s is currently ignored */\n" % self.name @@ -304,7 +284,6 @@ class Property(Member): =20 return aligned(string, self.get_occurrence_comment() + "\n") =20 - def generate_free_code(self): if self.type =3D=3D "String" and \ self.occurrence not in [OCCURRENCE__REQUIRED_LIST, @@ -319,7 +298,6 @@ class Property(Member): else: return " esxVI_%s_Free(&item->%s);\n" % (self.type, sel= f.name) =20 - def generate_validate_code(self, managed=3DFalse): if managed: macro =3D "ESX_VI__TEMPLATE__PROPERTY__MANAGED_REQUIRE" @@ -334,7 +312,6 @@ class Property(Member): else: return "" =20 - def generate_deep_copy_code(self): if self.occurrence =3D=3D OCCURRENCE__IGNORED: return " /* FIXME: %s is currently ignored */\n" % self.name @@ -351,7 +328,6 @@ class Property(Member): return " ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY(%s, %s)\n" \ % (self.type, self.name) =20 - def generate_serialize_code(self): if self.occurrence =3D=3D OCCURRENCE__IGNORED: return " /* FIXME: %s is currently ignored */\n" % self.name @@ -366,7 +342,6 @@ class Property(Member): return " ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(%s, %s)\n" \ % (self.type, self.name) =20 - def generate_deserialize_code(self): if self.occurrence =3D=3D OCCURRENCE__IGNORED: return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_IGNORE(%s)= /* FIXME */\n" \ @@ -382,7 +357,6 @@ class Property(Member): return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(%s, %s)\n"= \ % (self.type, self.name) =20 - def generate_lookup_code(self): if self.occurrence =3D=3D OCCURRENCE__IGNORED: return " ESX_VI__TEMPLATE__PROPERTY__CAST_FROM_ANY_TYPE_IGN= ORE(%s) /* FIXME */\n" \ @@ -398,7 +372,6 @@ class Property(Member): return " ESX_VI__TEMPLATE__PROPERTY__CAST_FROM_ANY_TYPE(%s,= %s)\n" \ % (self.type, self.name) =20 - def get_type_string(self): if self.type =3D=3D "String" and \ self.occurrence not in [OCCURRENCE__REQUIRED_LIST, @@ -410,29 +383,24 @@ class Property(Member): return "esxVI_%s *" % self.type =20 =20 - class Type: def __init__(self, kind, name): self.kind =3D kind self.name =3D name =20 - def generate_typedef(self): return "typedef %s _esxVI_%s esxVI_%s;\n" \ % (self.kind, self.name, self.name) =20 - def generate_typeenum(self): return " esxVI_Type_%s,\n" % self.name =20 - def generate_typetostring(self): string =3D " case esxVI_Type_%s:\n" % self.name string +=3D " return \"%s\";\n\n" % self.name =20 return string =20 - def generate_typefromstring(self): string =3D " if (STREQ(type, \"%s\"))\n" % self.name string +=3D " return esxVI_Type_%s;\n" % self.name @@ -448,14 +416,12 @@ class GenericObject(Type): FEATURE__SERIALIZE =3D (1 << 5) FEATURE__DESERIALIZE =3D (1 << 6) =20 - def __init__(self, name, category, managed, generic_objects_by_name): Type.__init__(self, "struct", name) self.category =3D category self.managed =3D managed self.generic_objects_by_name =3D generic_objects_by_name =20 - def generate_comment(self): comment =3D separator comment +=3D " * %s: %s\n" % (self.category, self.name) @@ -480,7 +446,6 @@ class GenericObject(Type): =20 return comment =20 - def generate_struct_members(self, add_banner=3DFalse, struct_gap=3DFal= se): members =3D "" =20 @@ -503,7 +468,6 @@ class GenericObject(Type): =20 return members =20 - def generate_dispatch(self, suffix, is_first=3DTrue): source =3D "" =20 @@ -523,7 +487,6 @@ class GenericObject(Type): =20 return source =20 - def generate_free_code(self, add_banner=3DFalse): source =3D "" =20 @@ -549,7 +512,6 @@ class GenericObject(Type): =20 return source =20 - def generate_validate_code(self, add_banner=3DFalse): source =3D "" =20 @@ -576,7 +538,6 @@ class GenericObject(Type): return source =20 =20 - class Object(GenericObject): def __init__(self, name, extends, properties, features=3D0, extended_b= y=3DNone): GenericObject.__init__(self, name, 'VI Object', False, objects_by_= name) @@ -589,7 +550,6 @@ class Object(GenericObject): if self.extended_by is not None: self.extended_by.sort() =20 - def generate_dynamic_cast_code(self, is_first=3DTrue): source =3D "" =20 @@ -609,7 +569,6 @@ class Object(GenericObject): =20 return source =20 - def generate_deep_copy_code(self, add_banner=3DFalse): source =3D "" =20 @@ -635,7 +594,6 @@ class Object(GenericObject): =20 return source =20 - def generate_serialize_code(self, add_banner=3DFalse): source =3D "" =20 @@ -654,7 +612,6 @@ class Object(GenericObject): =20 return source =20 - def generate_deserialize_code(self, add_banner=3DFalse): source =3D "" =20 @@ -673,7 +630,6 @@ class Object(GenericObject): =20 return source =20 - def generate_header(self): header =3D self.generate_comment() =20 @@ -754,7 +710,6 @@ class Object(GenericObject): =20 return header =20 - def generate_source(self): source =3D separator source +=3D " * VI Object: %s\n" % self.name @@ -916,7 +871,6 @@ class Object(GenericObject): return source =20 =20 - class ManagedObject(GenericObject): def __init__(self, name, extends, properties, features=3D0, extended_b= y=3DNone): GenericObject.__init__(self, name, 'VI Managed Object', True, @@ -929,7 +883,6 @@ class ManagedObject(GenericObject): if self.extended_by is not None: self.extended_by.sort() =20 - def generate_lookup_code1(self, add_banner=3DFalse): source =3D "" =20 @@ -955,7 +908,6 @@ class ManagedObject(GenericObject): =20 return source =20 - def generate_lookup_code2(self, add_banner=3DFalse): source =3D "" =20 @@ -981,7 +933,6 @@ class ManagedObject(GenericObject): =20 return source =20 - def generate_header(self): header =3D self.generate_comment() =20 @@ -1017,7 +968,6 @@ class ManagedObject(GenericObject): =20 return header =20 - def generate_helper_header(self): # functions return ( @@ -1030,7 +980,6 @@ class ManagedObject(GenericObject): % {"name": self.name} ) =20 - def generate_source(self): source =3D self.generate_comment() =20 @@ -1084,7 +1033,6 @@ class ManagedObject(GenericObject): =20 return source =20 - def generate_helper_source(self): # lookup return ( @@ -1106,13 +1054,11 @@ class Enum(Type): FEATURE__SERIALIZE =3D (1 << 2) FEATURE__DESERIALIZE =3D (1 << 3) =20 - def __init__(self, name, values, features=3D0): Type.__init__(self, "enum", name) self.values =3D values self.features =3D features =20 - def generate_header(self): header =3D separator header +=3D " * VI Enum: %s\n" % self.name @@ -1145,7 +1091,6 @@ class Enum(Type): =20 return header =20 - def generate_source(self): source =3D separator source +=3D " * VI Enum: %s\n" % self.name @@ -1183,18 +1128,15 @@ class Enum(Type): return source =20 =20 - def report_error(message): print("error: " + message) sys.exit(1) =20 =20 - def capitalize_first(string): return string[:1].upper() + string[1:] =20 =20 - def parse_object(block): # expected format: [managed] object [extends ] header_items =3D block[0][1].split() @@ -1239,7 +1181,6 @@ def parse_object(block): return Object(name=3Dname, extends=3Dextends, properties=3Dpropert= ies) =20 =20 - def parse_enum(block): # expected format: enum header_items =3D block[0][1].split() @@ -1260,7 +1201,6 @@ def parse_enum(block): return Enum(name=3Dname, values=3Dvalues) =20 =20 - def parse_method(block): # expected format: method [returns ] header_items =3D block[0][1].split() @@ -1298,7 +1238,6 @@ def parse_method(block): return Method(name=3Dname, parameters=3Dparameters, returns=3Dreturns) =20 =20 - def is_known_type(type): return type in predefined_objects or \ type in predefined_enums or \ @@ -1307,7 +1246,6 @@ def is_known_type(type): type in enums_by_name =20 =20 - def open_and_print(filename): if filename.startswith("./"): print(" GEN " + filename[2:]) @@ -1317,7 +1255,6 @@ def open_and_print(filename): return open(filename, "wt") =20 =20 - predefined_enums =3D ["Boolean"] =20 predefined_objects =3D ["AnyType", @@ -1380,7 +1317,6 @@ additional_object_features =3D { removed_object_features =3D {} =20 =20 - if "srcdir" in os.environ: input_filename =3D os.path.join(os.environ["srcdir"], "esx/esx_vi_gene= rator.input") output_dirname =3D os.path.join(os.environ["srcdir"], "esx") @@ -1389,7 +1325,6 @@ else: output_dirname =3D os.getcwd() =20 =20 - types_typedef =3D open_and_print(os.path.join(output_dirname, "esx_vi_type= s.generated.typedef")) types_typeenum =3D open_and_print(os.path.join(output_dirname, "esx_vi_typ= es.generated.typeenum")) types_typetostring =3D open_and_print(os.path.join(output_dirname, "esx_vi= _types.generated.typetostring")) @@ -1403,7 +1338,6 @@ helpers_header =3D open_and_print(os.path.join(output= _dirname, "esx_vi.generated.h helpers_source =3D open_and_print(os.path.join(output_dirname, "esx_vi.gen= erated.c")) =20 =20 - number =3D 0 objects_by_name =3D {} managed_objects_by_name =3D {} @@ -1412,7 +1346,6 @@ methods_by_name =3D {} block =3D None =20 =20 - # parse input file for line in open(input_filename, "rt").readlines(): number +=3D 1 @@ -1452,7 +1385,6 @@ for line in open(input_filename, "rt").readlines(): block.append((number, line)) =20 =20 - for method in methods_by_name.values(): # method parameter types must be serializable for parameter in method.parameters: @@ -1492,7 +1424,6 @@ for method in methods_by_name.values(): objects_by_name[method.returns.type].features |=3D Object.= FEATURE__LIST =20 =20 - for enum in enums_by_name.values(): # apply additional features if enum.name in additional_enum_features: @@ -1502,7 +1433,6 @@ for enum in enums_by_name.values(): enum.features |=3D Enum.FEATURE__DESERIALIZE =20 =20 - for obj in objects_by_name.values(): for property in obj.properties: if property.occurrence !=3D OCCURRENCE__IGNORED and \ @@ -1554,7 +1484,6 @@ for obj in objects_by_name.values(): extended_obj.extended_by.sort() =20 =20 - for obj in objects_by_name.values(): # if an object is a candidate (it is used directly as parameter or ret= urn # type or is a member of another object) and it is extended by another @@ -1563,7 +1492,6 @@ for obj in objects_by_name.values(): obj.features |=3D Object.FEATURE__DYNAMIC_CAST =20 =20 - def propagate_feature(obj, feature): global features_have_changed =20 @@ -1593,7 +1521,6 @@ def propagate_feature(obj, feature): propagate_feature(objects_by_name[property.type], feature) =20 =20 - def inherit_features(obj): global features_have_changed =20 @@ -1617,7 +1544,6 @@ def inherit_features(obj): inherit_features(objects_by_name[extended_by]) =20 =20 - # there are two directions to spread features: # 1) up and down the inheritance chain # 2) from object types to their member property types @@ -1637,7 +1563,6 @@ while features_have_changed: inherit_features(obj) =20 =20 - for obj in managed_objects_by_name.values(): for property in obj.properties: if property.occurrence !=3D OCCURRENCE__IGNORED and \ @@ -1661,7 +1586,6 @@ for obj in managed_objects_by_name.values(): extended_obj.extended_by.sort() =20 =20 - notice =3D "/* Generated by esx_vi_generator.py */\n\n\n\n" =20 types_typedef.write(notice) @@ -1677,7 +1601,6 @@ helpers_header.write(notice) helpers_source.write(notice) =20 =20 - # output enums types_typedef.write(separator + " * VI Enums\n" + @@ -1694,7 +1617,6 @@ for name in names: types_source.write(enums_by_name[name].generate_source()) =20 =20 - # output objects types_typedef.write("\n\n\n" + separator + @@ -1715,7 +1637,6 @@ for name in names: types_source.write(objects_by_name[name].generate_source()) =20 =20 - # output managed objects types_typedef.write("\n\n\n" + separator + @@ -1736,7 +1657,6 @@ for name in names: types_source.write(managed_objects_by_name[name].generate_source()) =20 =20 - # output methods names =3D sorted(methods_by_name.keys()) =20 @@ -1755,7 +1675,6 @@ for name in names: methods_macro.write(string) =20 =20 - # output helpers names =3D sorted(managed_objects_by_name.keys()) =20 diff --git a/src/hyperv/hyperv_wmi_generator.py b/src/hyperv/hyperv_wmi_gen= erator.py index 4f486913bd..64a198a12c 100755 --- a/src/hyperv/hyperv_wmi_generator.py +++ b/src/hyperv/hyperv_wmi_generator.py @@ -30,6 +30,7 @@ separator =3D "/*" + ("*" * 50) + "*\n" wmi_version_separator =3D "/" wmi_classes_by_name =3D {} =20 + class WmiClass: """Represents WMI class and provides methods to generate C code. =20 @@ -49,7 +50,6 @@ class WmiClass: self.versions =3D versions if versions else list() self.common =3D None =20 - def prepare(self): """Prepares the class for code generation =20 @@ -73,7 +73,6 @@ class WmiClass: # are in the same order - to ensure C struct member alignment self._align_property_members() =20 - def generate_classes_header(self): """Generate C header code and return it as string =20 @@ -102,7 +101,6 @@ class WmiClass: =20 return header =20 - def generate_classes_source(self): """Returns a C code string defining wsman data structs =20 @@ -132,13 +130,11 @@ class WmiClass: source +=3D ' { "", "", 0 },\n' # null terminated source +=3D '};\n\n' =20 - source +=3D self._define_WmiInfo_struct() source +=3D "\n\n" =20 return source =20 - def generate_classes_typedef(self): """Returns C string for typdefs""" =20 @@ -152,8 +148,6 @@ class WmiClass: =20 return typedef =20 - - def _declare_data_structs(self): """Returns string C code declaring data structs. =20 @@ -184,7 +178,6 @@ class WmiClass: =20 return header =20 - def _declare_hypervObject_struct(self): """Return string for C code declaring hypervObject instance""" =20 @@ -211,7 +204,6 @@ class WmiClass: =20 return header =20 - def _define_WmiInfo_struct(self): """Return string for C code defining *_WmiInfo struct =20 @@ -241,7 +233,6 @@ class WmiClass: =20 return source =20 - def _align_property_members(self): """Identifies common properties in all class versions. =20 @@ -308,7 +299,6 @@ class WmiClass: self.common.append(x[0]) =20 =20 - class ClassUriInfo: """Prepares URI information needed for wsman requests.""" =20 @@ -328,7 +318,6 @@ class ClassUriInfo: self.resourceUri =3D "%s/%s" % (baseUri, wmi_name) =20 =20 - class WmiClassVersion: """Represents specific version of WMI class.""" =20 @@ -339,7 +328,6 @@ class WmiClassVersion: self.uri_info =3D uri_info =20 =20 - class Property: typemap =3D { "boolean": "BOOL", @@ -359,7 +347,6 @@ class Property: "uint64": "UINT64" } =20 - def __init__(self, type, name, is_array): if type not in Property.typemap: report_error("unhandled property type %s" % type) @@ -368,7 +355,6 @@ class Property: self.name =3D name self.is_array =3D is_array =20 - def generate_classes_header(self): if self.is_array: return " XML_TYPE_DYN_ARRAY %s;\n" % self.name @@ -376,7 +362,6 @@ class Property: return " XML_TYPE_%s %s;\n" \ % (Property.typemap[self.type], self.name) =20 - def generate_classes_source(self, class_name): if self.is_array: return " SER_NS_DYN_ARRAY(%s_RESOURCE_URI, \"%s\", 0, 0, %s= ),\n" \ @@ -385,12 +370,10 @@ class Property: return " SER_NS_%s(%s_RESOURCE_URI, \"%s\", 1),\n" \ % (Property.typemap[self.type], class_name.upper(), sel= f.name) =20 - def generate_typemap(self): return ' { "%s", "%s", %s },\n' % (self.name, self.type.lower()= , str(self.is_array).lower()) =20 =20 - def open_and_print(filename): if filename.startswith("./"): print(" GEN " + filename[2:]) @@ -400,13 +383,11 @@ def open_and_print(filename): return open(filename, "wt") =20 =20 - def report_error(message): print("error: " + message) sys.exit(1) =20 =20 - def parse_class(block, number): # expected format: class header_items =3D block[0][1].split() @@ -452,7 +433,6 @@ def parse_class(block, number): wmi_classes_by_name[wmi_name] =3D WmiClass(wmi_name, [cls]) =20 =20 - def main(): if "srcdir" in os.environ: input_filename =3D os.path.join(os.environ["srcdir"], "hyperv/hype= rv_wmi_generator.input") @@ -513,6 +493,5 @@ def main(): classes_source.write(cls.generate_classes_source()) =20 =20 - if __name__ =3D=3D "__main__": main() diff --git a/tests/cputestdata/cpu-cpuid.py b/tests/cputestdata/cpu-cpuid.py index ae3cf5996a..40b6c19c23 100755 --- a/tests/cputestdata/cpu-cpuid.py +++ b/tests/cputestdata/cpu-cpuid.py @@ -5,6 +5,7 @@ import sys import json import xmltodict =20 + def checkCPUIDFeature(cpuData, feature): eax_in =3D feature["eax_in"] ecx_in =3D feature["ecx_in"] --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list