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 === === Pragma directives ===
Syntax: Syntax:
PRAGMA = { 'pragma': { '*doc-required': BOOL, PRAGMA = { 'pragma': {
'*returns-whitelist': [ STRING, ... ], '*doc-required': BOOL,
'*name-case-whitelist': [ STRING, ... ] } } '*command-returns-exceptions': [ STRING, ... ],
'*member-name-exceptions': [ STRING, ... ] } }
The pragma directive lets you control optional generator behavior. 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 Pragma 'doc-required' takes a boolean value. If true, documentation
is required. Default is false. 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. violate the rules on permitted return types. Default is none.
Pragma 'name-case-whitelist' takes a list of names that may violate Pragma 'member-name-exceptions' takes a list of types whose member
rules on use of upper- vs. lower-case letters. Default is none. names may contain uppercase letters. Default is none.
=== Enumeration types === === 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 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 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 a complex type. To return anything else, the command must be listed
in pragma 'returns-whitelist'. If you do this, extending the command in pragma 'commands-returns-exceptions'. If you do this, extending
to return additional information will be harder. Use of the command to return additional information will be harder. Use of
'returns-whitelist' for new commands is strongly discouraged. the pragma for new commands is strongly discouraged.
A command's error responses are not specified in the QAPI schema. A command's error responses are not specified in the QAPI schema.
Error conditions should be documented in comments. 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 "x-" is marked experimental, and may be withdrawn or changed
incompatibly in a future release. 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. upper and lower case. Use for new code is strongly discouraged.

View file

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

View file

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

View file

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

View file

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

View file

@ -779,7 +779,7 @@ def check(self, schema):
if self._ret_type_name: if self._ret_type_name:
self.ret_type = schema.resolve_type( self.ret_type = schema.resolve_type(
self._ret_type_name, self.info, "command's 'returns'") 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 typ = self.ret_type
if isinstance(typ, QAPISchemaArrayType): if isinstance(typ, QAPISchemaArrayType):
typ = self.ret_type.element_type typ = self.ret_type.element_type

View file

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

View file

@ -1,4 +1,4 @@
# Member names should be 'lower-case' unless the enum is whitelisted # 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': 'UuidInfo', 'data': [ 'Value' ] } # UuidInfo is whitelisted
{ 'enum': 'NoWayThisWillGetWhitelisted', 'data': [ 'Value' ] } { '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 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 value must be list
{ 'pragma': { 'member-name-exceptions': false } }
{ 'pragma': { 'name-case-whitelist': false } }

View file

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

View file

@ -1,6 +1,6 @@
# we enforce that 'returns' be a dict or array of dict unless whitelisted # 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' ] } } 'human-monitor-command', 'query-tpm-models', 'guest-get-time' ] } }
{ 'command': 'human-monitor-command', { 'command': 'human-monitor-command',