From nobody Tue Jul 1 10:28:35 2025 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1621452483; cv=none; d=zohomail.com; s=zohoarc; b=bgeeuOuTq04+LMTrwvOpO4/frfva5Soqcox3WSFqsjOm2r8guX7lw+uTsdCQh6ytnoSl2yVxJfvVTlwp4dtww5S7uz+N/P7aWHSxwafCn/8Fq9VK9uho7K4Ig7jEHPxu9yAt/qVzZ+k6cwmo8Y5K2JAyZ0Y90Ft4x5kg8MB9ey4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621452483; h=Content-Type:Content-Transfer-Encoding:Cc: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=5Won4SmCvj7mYBAtSANGNEVYeQbkzdlBm3wPfV06Ta4=; b=PoVdkcid1OhbhPkfXZd69LUl1Cs6Sl8vZlJrmGBwRAa35ecqX21b2XLnhHMKclnMa7qXXfKzo93XGb7EGmdSllPy1DFal/51zPbH3RqmNx3jBRcFFgE1Fxom75YdYa/0QGb+52YfYJioVfsYd05ELaYkkUftkp3tOy4ZmU18IRg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1621452483536634.7926365756555; Wed, 19 May 2021 12:28:03 -0700 (PDT) Received: from localhost ([::1]:42080 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ljRrO-0007gy-BF for importer2@patchew.org; Wed, 19 May 2021 15:28:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55358) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ljR7H-00064m-T0 for qemu-devel@nongnu.org; Wed, 19 May 2021 14:40:24 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:25722) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ljR77-00025A-Bl for qemu-devel@nongnu.org; Wed, 19 May 2021 14:40:23 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-173-qm4z5I1QOxyxnI7Cl7jRnw-1; Wed, 19 May 2021 14:40:09 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 416411007477; Wed, 19 May 2021 18:40:08 +0000 (UTC) Received: from scv.redhat.com (ovpn-117-64.rdu2.redhat.com [10.10.117.64]) by smtp.corp.redhat.com (Postfix) with ESMTP id 88EC450FA2; Wed, 19 May 2021 18:40:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621449612; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5Won4SmCvj7mYBAtSANGNEVYeQbkzdlBm3wPfV06Ta4=; b=DAdU2Jt/x58Qu1xw985/I6rZvB42ZzVSfUzzQy4OzRr9GeqlmHXTDDidMvH3MFvjYP4+2R eIlk0lywq6dfM6HY2/Mv0IEEki7efRh/Mj/7tqRTDdj8RR8uqp7pN+9EZboNBBlZi6UOUF QGjLjwvx/258q2YH2dXr1KaknLFpUMc= X-MC-Unique: qm4z5I1QOxyxnI7Cl7jRnw-1 From: John Snow To: qemu-devel@nongnu.org Subject: [PATCH v3 11/15] qapi/parser: Rework _check_pragma_list_of_str as a TypeGuard Date: Wed, 19 May 2021 14:39:47 -0400 Message-Id: <20210519183951.3946870-12-jsnow@redhat.com> In-Reply-To: <20210519183951.3946870-1-jsnow@redhat.com> References: <20210519183951.3946870-1-jsnow@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jsnow@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=jsnow@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -31 X-Spam_score: -3.2 X-Spam_bar: --- X-Spam_report: (-3.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.39, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michael Roth , Cleber Rosa , John Snow , Eduardo Habkost , Markus Armbruster Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" TypeGuards wont exist in Python proper until 3.10. Ah well. We can hack up our own by declaring this function to return the type we claim it checks for and using this to safely downcast object -> List[str]. In so doing, I bring this function under _pragma so it can use the 'info' object in its closure. Having done this, _pragma also now no longer needs to take a 'self' parameter, so drop it. To help with line-length, and with the context evident from its new scope, rename the function to the shorter check_list_str(). Signed-off-by: John Snow --- I left (name, value) as args to avoid creating a fully magic "macro", because this looked simply too weird: info.pragma.foobar =3D check_list_str() and it looked more reasonable as: info.pragma.foobar =3D check_list_str(name, value) Signed-off-by: John Snow --- scripts/qapi/parser.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/scripts/qapi/parser.py b/scripts/qapi/parser.py index 9f980f75139..8a58e1228f0 100644 --- a/scripts/qapi/parser.py +++ b/scripts/qapi/parser.py @@ -17,6 +17,7 @@ from collections import OrderedDict import os import re +from typing import List =20 from .common import must_match from .error import QAPISemError, QAPISourceError @@ -154,28 +155,29 @@ def _include(include, info, incl_fname, previously_in= cluded): ) from err =20 @staticmethod - def _check_pragma_list_of_str(name, value, info): - if (not isinstance(value, list) - or any([not isinstance(elt, str) for elt in value])): - raise QAPISemError( - info, - "pragma %s must be a list of strings" % name) + def _pragma(name, value, info): + + def check_list_str(name, value) -> List[str]: + if (not isinstance(value, list) or + any([not isinstance(elt, str) for elt in value])): + raise QAPISemError( + info, + "pragma %s must be a list of strings" % name) + return value + + pragma =3D info.pragma =20 - def _pragma(self, name, value, info): if name =3D=3D 'doc-required': if not isinstance(value, bool): raise QAPISemError(info, "pragma 'doc-required' must be boolean") - info.pragma.doc_required =3D value + pragma.doc_required =3D value elif name =3D=3D 'command-name-exceptions': - self._check_pragma_list_of_str(name, value, info) - info.pragma.command_name_exceptions =3D value + pragma.command_name_exceptions =3D check_list_str(name, value) elif name =3D=3D 'command-returns-exceptions': - self._check_pragma_list_of_str(name, value, info) - info.pragma.command_returns_exceptions =3D value + pragma.command_returns_exceptions =3D check_list_str(name, val= ue) elif name =3D=3D 'member-name-exceptions': - self._check_pragma_list_of_str(name, value, info) - info.pragma.member_name_exceptions =3D value + pragma.member_name_exceptions =3D check_list_str(name, value) else: raise QAPISemError(info, "unknown pragma '%s'" % name) =20 --=20 2.30.2