qapi: convert to use python print function instead of statement

Python 3 no longer supports the bare "print" statement, it must be
called as a normal function with round brackets. It is possible to
opt-in to this new syntax with Python 2.6 onwards by importing the
"print_function" from the "__future__" module, making it easy to
support Python 2 and 3 in parallel.

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180116134217.8725-2-berrange@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
Daniel P. Berrange 2018-01-16 13:42:04 +00:00 committed by Eduardo Habkost
parent f24ee107a0
commit ef9d910891
3 changed files with 32 additions and 30 deletions

View File

@ -11,6 +11,7 @@
# This work is licensed under the terms of the GNU GPL, version 2. # This work is licensed under the terms of the GNU GPL, version 2.
# See the COPYING file in the top-level directory. # See the COPYING file in the top-level directory.
from __future__ import print_function
import errno import errno
import getopt import getopt
import os import os
@ -1467,7 +1468,7 @@ class QAPISchema(object):
self._def_exprs() self._def_exprs()
self.check() self.check()
except QAPIError as err: except QAPIError as err:
print >>sys.stderr, err print(err, file=sys.stderr)
exit(1) exit(1)
def _def_entity(self, ent): def _def_entity(self, ent):
@ -1931,7 +1932,7 @@ def parse_command_line(extra_options='', extra_long_options=[]):
['source', 'header', 'prefix=', ['source', 'header', 'prefix=',
'output-dir='] + extra_long_options) 'output-dir='] + extra_long_options)
except getopt.GetoptError as err: except getopt.GetoptError as err:
print >>sys.stderr, "%s: %s" % (sys.argv[0], str(err)) print("%s: %s" % (sys.argv[0], str(err)), file=sys.stderr)
sys.exit(1) sys.exit(1)
output_dir = '' output_dir = ''
@ -1945,9 +1946,8 @@ def parse_command_line(extra_options='', extra_long_options=[]):
if o in ('-p', '--prefix'): if o in ('-p', '--prefix'):
match = re.match(r'([A-Za-z_.-][A-Za-z0-9_.-]*)?', a) match = re.match(r'([A-Za-z_.-][A-Za-z0-9_.-]*)?', a)
if match.end() != len(a): if match.end() != len(a):
print >>sys.stderr, \ print("%s: 'funny character '%s' in argument of --prefix" \
"%s: 'funny character '%s' in argument of --prefix" \ % (sys.argv[0], a[match.end()]), file=sys.stderr)
% (sys.argv[0], a[match.end()])
sys.exit(1) sys.exit(1)
prefix = a prefix = a
elif o in ('-o', '--output-dir'): elif o in ('-o', '--output-dir'):
@ -1964,7 +1964,7 @@ def parse_command_line(extra_options='', extra_long_options=[]):
do_h = True do_h = True
if len(args) != 1: if len(args) != 1:
print >>sys.stderr, "%s: need exactly one argument" % sys.argv[0] print("%s: need exactly one argument" % sys.argv[0], file=sys.stderr)
sys.exit(1) sys.exit(1)
fname = args[0] fname = args[0]

View File

@ -4,6 +4,7 @@
# This work is licensed under the terms of the GNU LGPL, version 2+. # This work is licensed under the terms of the GNU LGPL, version 2+.
# See the COPYING file in the top-level directory. # See the COPYING file in the top-level directory.
"""This script produces the documentation of a qapi schema in texinfo format""" """This script produces the documentation of a qapi schema in texinfo format"""
from __future__ import print_function
import re import re
import sys import sys
@ -274,15 +275,15 @@ def texi_schema(schema):
def main(argv): def main(argv):
"""Takes schema argument, prints result to stdout""" """Takes schema argument, prints result to stdout"""
if len(argv) != 2: if len(argv) != 2:
print >>sys.stderr, "%s: need exactly 1 argument: SCHEMA" % argv[0] print("%s: need exactly 1 argument: SCHEMA" % argv[0], file=sys.stderr)
sys.exit(1) sys.exit(1)
schema = qapi.QAPISchema(argv[1]) schema = qapi.QAPISchema(argv[1])
if not qapi.doc_required: if not qapi.doc_required:
print >>sys.stderr, ("%s: need pragma 'doc-required' " print("%s: need pragma 'doc-required' "
"to generate documentation" % argv[0]) "to generate documentation" % argv[0], file=sys.stderr)
sys.exit(1) sys.exit(1)
print texi_schema(schema) print(texi_schema(schema))
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -10,6 +10,7 @@
# See the COPYING file in the top-level directory. # See the COPYING file in the top-level directory.
# #
from __future__ import print_function
from qapi import * from qapi import *
from pprint import pprint from pprint import pprint
import os import os
@ -18,51 +19,51 @@ import sys
class QAPISchemaTestVisitor(QAPISchemaVisitor): class QAPISchemaTestVisitor(QAPISchemaVisitor):
def visit_enum_type(self, name, info, values, prefix): def visit_enum_type(self, name, info, values, prefix):
print 'enum %s %s' % (name, values) print('enum %s %s' % (name, values))
if prefix: if prefix:
print ' prefix %s' % prefix print(' prefix %s' % prefix)
def visit_object_type(self, name, info, base, members, variants): def visit_object_type(self, name, info, base, members, variants):
print 'object %s' % name print('object %s' % name)
if base: if base:
print ' base %s' % base.name print(' base %s' % base.name)
for m in members: for m in members:
print ' member %s: %s optional=%s' % \ print(' member %s: %s optional=%s' % \
(m.name, m.type.name, m.optional) (m.name, m.type.name, m.optional))
self._print_variants(variants) self._print_variants(variants)
def visit_alternate_type(self, name, info, variants): def visit_alternate_type(self, name, info, variants):
print 'alternate %s' % name print('alternate %s' % name)
self._print_variants(variants) self._print_variants(variants)
def visit_command(self, name, info, arg_type, ret_type, def visit_command(self, name, info, arg_type, ret_type,
gen, success_response, boxed): gen, success_response, boxed):
print 'command %s %s -> %s' % \ print('command %s %s -> %s' % \
(name, arg_type and arg_type.name, ret_type and ret_type.name) (name, arg_type and arg_type.name, ret_type and ret_type.name))
print ' gen=%s success_response=%s boxed=%s' % \ print(' gen=%s success_response=%s boxed=%s' % \
(gen, success_response, boxed) (gen, success_response, boxed))
def visit_event(self, name, info, arg_type, boxed): def visit_event(self, name, info, arg_type, boxed):
print 'event %s %s' % (name, arg_type and arg_type.name) print('event %s %s' % (name, arg_type and arg_type.name))
print ' boxed=%s' % boxed print(' boxed=%s' % boxed)
@staticmethod @staticmethod
def _print_variants(variants): def _print_variants(variants):
if variants: if variants:
print ' tag %s' % variants.tag_member.name print(' tag %s' % variants.tag_member.name)
for v in variants.variants: for v in variants.variants:
print ' case %s: %s' % (v.name, v.type.name) print(' case %s: %s' % (v.name, v.type.name))
schema = QAPISchema(sys.argv[1]) schema = QAPISchema(sys.argv[1])
schema.visit(QAPISchemaTestVisitor()) schema.visit(QAPISchemaTestVisitor())
for doc in schema.docs: for doc in schema.docs:
if doc.symbol: if doc.symbol:
print 'doc symbol=%s' % doc.symbol print('doc symbol=%s' % doc.symbol)
else: else:
print 'doc freeform' print('doc freeform')
print ' body=\n%s' % doc.body.text print(' body=\n%s' % doc.body.text)
for arg, section in doc.args.iteritems(): for arg, section in doc.args.iteritems():
print ' arg=%s\n%s' % (arg, section.text) print(' arg=%s\n%s' % (arg, section.text))
for section in doc.sections: for section in doc.sections:
print ' section=%s\n%s' % (section.name, section.text) print(' section=%s\n%s' % (section.name, section.text))