From: Markus Armbruster <armbru@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: "Michael Roth" <michael.roth@amd.com>,
"Cleber Rosa" <crosa@redhat.com>,
qemu-devel@nongnu.org,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>
Subject: Re: [PATCH v4 05/16] qapi: centralize is_[user|system|builtin]_module methods
Date: Tue, 02 Feb 2021 10:16:35 +0100 [thread overview]
Message-ID: <87r1lyg77w.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20210201193747.2169670-6-jsnow@redhat.com> (John Snow's message of "Mon, 1 Feb 2021 14:37:36 -0500")
John Snow <jsnow@redhat.com> writes:
> Define what a module is and define what kind of a module it is once and
> for all, in one place.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
> scripts/qapi/gen.py | 25 +++++++++++--------------
> scripts/qapi/schema.py | 31 +++++++++++++++++++++++++++++--
> 2 files changed, 40 insertions(+), 16 deletions(-)
>
> diff --git a/scripts/qapi/gen.py b/scripts/qapi/gen.py
> index 3d81b90ab71..2aec6d34365 100644
> --- a/scripts/qapi/gen.py
> +++ b/scripts/qapi/gen.py
> @@ -31,7 +31,11 @@
> guardstart,
> mcgen,
> )
> -from .schema import QAPISchemaObjectType, QAPISchemaVisitor
> +from .schema import (
> + QAPISchemaModule,
> + QAPISchemaObjectType,
> + QAPISchemaVisitor,
> +)
> from .source import QAPISourceInfo
>
>
> @@ -246,21 +250,14 @@ def __init__(self,
> self._main_module: Optional[str] = None
>
> @staticmethod
> - def _is_user_module(name: Optional[str]) -> bool:
> - return bool(name and not name.startswith('./'))
> -
> - @staticmethod
> - def _is_builtin_module(name: Optional[str]) -> bool:
> - return not name
> -
> - def _module_dirname(self, name: Optional[str]) -> str:
> - if self._is_user_module(name):
> + def _module_dirname(name: Optional[str]) -> str:
> + if QAPISchemaModule.is_user_module(name):
> return os.path.dirname(name)
> return ''
>
> def _module_basename(self, what: str, name: Optional[str]) -> str:
> - ret = '' if self._is_builtin_module(name) else self._prefix
> - if self._is_user_module(name):
> + ret = '' if QAPISchemaModule.is_builtin_module(name) else self._prefix
> + if QAPISchemaModule.is_user_module(name):
> basename = os.path.basename(name)
> ret += what
> if name != self._main_module:
> @@ -282,7 +279,7 @@ def _add_module(self, name: Optional[str], blurb: str) -> None:
> self._genc, self._genh = self._module[name]
>
> def _add_user_module(self, name: str, blurb: str) -> None:
> - assert self._is_user_module(name)
> + assert QAPISchemaModule.is_user_module(name)
> if self._main_module is None:
> self._main_module = name
> self._add_module(name, blurb)
> @@ -292,7 +289,7 @@ def _add_system_module(self, name: Optional[str], blurb: str) -> None:
>
> def write(self, output_dir: str, opt_builtins: bool = False) -> None:
> for name in self._module:
> - if self._is_builtin_module(name) and not opt_builtins:
> + if QAPISchemaModule.is_builtin_module(name) and not opt_builtins:
> continue
> (genc, genh) = self._module[name]
> genc.write(output_dir)
> diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
> index 720449feee4..e80d9320eda 100644
> --- a/scripts/qapi/schema.py
> +++ b/scripts/qapi/schema.py
> @@ -141,6 +141,33 @@ def __init__(self, name):
> self.name = name
> self._entity_list = []
>
> + @staticmethod
> + def is_system_module(name: Optional[str]) -> bool:
> + """
> + System modules are internally defined modules.
> +
> + Their names start with the "./" prefix.
> + """
> + return name is None or name.startswith('./')
> +
> + @classmethod
> + def is_user_module(cls, name: Optional[str]) -> bool:
> + """
> + User modules are those defined by the user in qapi JSON files.
> +
> + They do not start with the "./" prefix.
> + """
> + return not cls.is_system_module(name)
> +
> + @staticmethod
> + def is_builtin_module(name: Optional[str]) -> bool:
> + """
> + The built-in module is a single System module for the built-in types.
> +
> + It is presently always the value 'None'.
> + """
> + return name is None
> +
> def add_entity(self, ent):
> self._entity_list.append(ent)
>
Putting these functions into a class feels awkward. But it does the
job.
> @@ -871,8 +898,8 @@ def resolve_type(self, name, info, what):
> return typ
>
> def _module_name(self, fname):
> - if fname is None:
> - return None
> + if QAPISchemaModule.is_system_module(fname):
> + return fname
> return os.path.relpath(fname, self._schema_dir)
>
> def _make_module(self, fname):
next prev parent reply other threads:[~2021-02-02 9:17 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-01 19:37 [PATCH v4 00/16] qapi: static typing conversion, pt1.5 John Snow
2021-02-01 19:37 ` [PATCH v4 01/16] qapi/commands: assert arg_type is not None John Snow
2021-02-01 19:37 ` [PATCH v4 02/16] qapi/events: fix visit_event typing John Snow
2021-02-01 19:37 ` [PATCH v4 03/16] qapi/main: handle theoretical None-return from re.match() John Snow
2021-02-01 19:37 ` [PATCH v4 04/16] qapi/gen: inline _wrap_ifcond into end_if() John Snow
2021-02-01 19:37 ` [PATCH v4 05/16] qapi: centralize is_[user|system|builtin]_module methods John Snow
2021-02-02 9:16 ` Markus Armbruster [this message]
2021-02-02 16:05 ` John Snow
2021-02-01 19:37 ` [PATCH v4 06/16] qapi/gen: Replace ._begin_system_module() John Snow
2021-02-01 19:37 ` [PATCH v4 07/16] qapi: use explicitly internal module names John Snow
2021-02-02 9:16 ` Markus Armbruster
2021-02-02 16:06 ` John Snow
2021-02-02 20:43 ` Markus Armbruster
2021-02-01 19:37 ` [PATCH v4 08/16] qapi: use './builtin' as the built-in module name John Snow
2021-02-01 19:37 ` [PATCH v4 09/16] qapi/gen: Combine ._add_[user|system]_module John Snow
2021-02-01 19:37 ` [PATCH v4 10/16] qapi: centralize the built-in module name definition John Snow
2021-02-01 19:37 ` [PATCH v4 11/16] qapi/gen: write _genc/_genh access shims John Snow
2021-02-01 19:37 ` [PATCH v4 12/16] qapi/gen: Support for switching to another module temporarily John Snow
2021-02-01 19:37 ` [PATCH v4 13/16] qapi/commands: Simplify command registry generation John Snow
2021-02-01 19:37 ` [PATCH v4 14/16] qapi/gen: Drop support for QAPIGen without a file name John Snow
2021-02-01 19:37 ` [PATCH v4 15/16] qapi: type 'info' as Optional[QAPISourceInfo] John Snow
2021-02-01 19:37 ` [PATCH v4 16/16] qapi: enable strict-optional checks John Snow
2021-02-02 9:17 ` [PATCH v4 00/16] qapi: static typing conversion, pt1.5 Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r1lyg77w.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.com \
--cc=jsnow@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=michael.roth@amd.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.