qapi: Rename pragma *-whitelist to *-exceptions

Rename pragma returns-whitelist to command-returns-exceptions, and
name-case-whitelist to member-name-case-exceptions.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20210323094025.3569441-20-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Markus Armbruster 2021-03-23 10:40:16 +01:00
parent ef8b3829f6
commit b86df37478
14 changed files with 32 additions and 32 deletions

View File

@ -147,9 +147,10 @@ prevent incomplete include files.
=== Pragma directives ===
Syntax:
PRAGMA = { 'pragma': { '*doc-required': BOOL,
'*returns-whitelist': [ STRING, ... ],
'*name-case-whitelist': [ STRING, ... ] } }
PRAGMA = { 'pragma': {
'*doc-required': BOOL,
'*command-returns-exceptions': [ STRING, ... ],
'*member-name-exceptions': [ STRING, ... ] } }
The pragma directive lets you control optional generator behavior.
@ -159,11 +160,11 @@ pragma to different values in parts of the schema doesn't work.
Pragma 'doc-required' takes a boolean value. If true, documentation
is required. Default is false.
Pragma 'returns-whitelist' takes a list of command names that may
Pragma 'command-returns-exceptions' takes a list of commands that may
violate the rules on permitted return types. Default is none.
Pragma 'name-case-whitelist' takes a list of names that may violate
rules on use of upper- vs. lower-case letters. Default is none.
Pragma 'member-name-exceptions' takes a list of types whose member
names may contain uppercase letters. Default is none.
=== Enumeration types ===
@ -490,9 +491,9 @@ are the arguments. A union type requires 'boxed': true.
Member 'returns' defines the command's return type. It defaults to an
empty struct type. It must normally be a complex type or an array of
a complex type. To return anything else, the command must be listed
in pragma 'returns-whitelist'. If you do this, extending the command
to return additional information will be harder. Use of
'returns-whitelist' for new commands is strongly discouraged.
in pragma 'commands-returns-exceptions'. If you do this, extending
the command to return additional information will be harder. Use of
the pragma for new commands is strongly discouraged.
A command's error responses are not specified in the QAPI schema.
Error conditions should be documented in comments.
@ -755,7 +756,7 @@ Any name (command, event, type, member, or enum value) beginning with
"x-" is marked experimental, and may be withdrawn or changed
incompatibly in a future release.
Pragma 'name-case-whitelist' lets you violate the rules on use of
Pragma 'member-name-exceptions' lets you violate the rules on use of
upper and lower case. Use for new code is strongly discouraged.

View File

@ -4,13 +4,13 @@
# add to them!
{ 'pragma': {
# Commands allowed to return a non-dictionary:
'returns-whitelist': [
'command-returns-exceptions': [
'human-monitor-command',
'qom-get',
'query-tpm-models',
'query-tpm-types',
'ringbuf-read' ],
'name-case-whitelist': [
'member-name-exceptions': [
'ACPISlotType', # DIMM, visible through query-acpi-ospm-status
'BlockdevVmdkSubformat', # all members, to match VMDK spec spellings
'BlockdevVmdkAdapterType', # legacyESX, to match VMDK spec spellings

View File

@ -20,7 +20,7 @@
# add to them!
{ 'pragma': {
# Commands allowed to return a non-dictionary:
'returns-whitelist': [
'command-returns-exceptions': [
'guest-file-open',
'guest-fsfreeze-freeze',
'guest-fsfreeze-freeze-list',

View File

@ -181,7 +181,7 @@ def check_type(value, info, source,
raise QAPISemError(info,
"%s should be an object or type name" % source)
permit_upper = allow_dict in info.pragma.name_case_whitelist
permit_upper = allow_dict in info.pragma.member_name_exceptions
# value is a dictionary, check that each member is okay
for (key, arg) in value.items():
@ -224,7 +224,7 @@ def check_enum(expr, info):
if prefix is not None and not isinstance(prefix, str):
raise QAPISemError(info, "'prefix' must be a string")
permit_upper = name in info.pragma.name_case_whitelist
permit_upper = name in info.pragma.member_name_exceptions
members[:] = [m if isinstance(m, dict) else {'name': m}
for m in members]

View File

@ -132,12 +132,12 @@ class QAPISchemaParser:
raise QAPISemError(info,
"pragma 'doc-required' must be boolean")
info.pragma.doc_required = value
elif name == 'returns-whitelist':
elif name == 'command-returns-exceptions':
self._check_pragma_list_of_str(name, value, info)
info.pragma.returns_whitelist = value
elif name == 'name-case-whitelist':
info.pragma.command_returns_exceptions = value
elif name == 'member-name-exceptions':
self._check_pragma_list_of_str(name, value, info)
info.pragma.name_case_whitelist = value
info.pragma.member_name_exceptions = value
else:
raise QAPISemError(info, "unknown pragma '%s'" % name)

View File

@ -779,7 +779,7 @@ class QAPISchemaCommand(QAPISchemaEntity):
if self._ret_type_name:
self.ret_type = schema.resolve_type(
self._ret_type_name, self.info, "command's 'returns'")
if self.name not in self.info.pragma.returns_whitelist:
if self.name not in self.info.pragma.command_returns_exceptions:
typ = self.ret_type
if isinstance(typ, QAPISchemaArrayType):
typ = self.ret_type.element_type

View File

@ -21,10 +21,10 @@ class QAPISchemaPragma:
def __init__(self) -> None:
# Are documentation comments required?
self.doc_required = False
# Whitelist of commands allowed to return a non-dictionary
self.returns_whitelist: List[str] = []
# Whitelist of entities allowed to violate case conventions
self.name_case_whitelist: List[str] = []
# Commands allowed to return a non-dictionary
self.command_returns_exceptions: List[str] = []
# Types whose member names may violate case conventions
self.member_name_exceptions: List[str] = []
class QAPISourceInfo:

View File

@ -1,4 +1,4 @@
# Member names should be 'lower-case' unless the enum is whitelisted
{ 'pragma': { 'name-case-whitelist': [ 'UuidInfo' ] } }
{ 'pragma': { 'member-name-exceptions': [ 'UuidInfo' ] } }
{ 'enum': 'UuidInfo', 'data': [ 'Value' ] } # UuidInfo is whitelisted
{ 'enum': 'NoWayThisWillGetWhitelisted', 'data': [ 'Value' ] }

View File

@ -1 +1 @@
pragma-value-not-list-of-str.json:3: pragma returns-whitelist must be a list of strings
pragma-value-not-list-of-str.json:3: pragma command-returns-exceptions must be a list of strings

View File

@ -1,3 +1,3 @@
# pragma value must be list of strings
{ 'pragma': { 'returns-whitelist': [ 'good', [ 'bad' ] ] } }
{ 'pragma': { 'command-returns-exceptions': [ 'good', [ 'bad' ] ] } }

View File

@ -1 +1 @@
pragma-value-not-list.json:3: pragma name-case-whitelist must be a list of strings
pragma-value-not-list.json:2: pragma member-name-exceptions must be a list of strings

View File

@ -1,3 +1,2 @@
# pragma value must be list
{ 'pragma': { 'name-case-whitelist': false } }
{ 'pragma': { 'member-name-exceptions': false } }

View File

@ -7,7 +7,7 @@
# Whitelists to permit QAPI rule violations
{ 'pragma': {
# Commands allowed to return a non-dictionary:
'returns-whitelist': [
'command-returns-exceptions': [
'guest-get-time',
'guest-sync' ] } }

View File

@ -1,6 +1,6 @@
# we enforce that 'returns' be a dict or array of dict unless whitelisted
{ 'pragma': { 'returns-whitelist': [
{ 'pragma': { 'command-returns-exceptions': [
'human-monitor-command', 'query-tpm-models', 'guest-get-time' ] } }
{ 'command': 'human-monitor-command',