On Tue, May 28, 2019 at 9:57 PM Shivani Bhardwaj <shivanib134@xxxxxxxxx> wrote: > > On Tue, May 28, 2019 at 5:21 AM Shekhar Sharma <shekhar250198@xxxxxxxxx> wrote: > > > > This patch converts the 'nft-test.py' file to run on both python 2 and python3. > > > > The version hystory of this patch is: > > v1:conversion to py3 by changing the print statements. > > v2:add the '__future__' package for compatibility with py2 and py3. > > v3:solves the 'version' problem in argparse by adding a new argument. > > v4:uses .format() method to make print statements clearer. > > v5: updated the shebang and corrected the sequence of import statements. > > > > > > Signed-off-by: Shekhar Sharma <shekhar250198@xxxxxxxxx> > > --- > > tests/py/nft-test.py | 44 +++++++++++++++++++++++--------------------- > > 1 file changed, 23 insertions(+), 21 deletions(-) > > > > diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py > > index 1c0afd0e..fe56340c 100755 > > --- a/tests/py/nft-test.py > > +++ b/tests/py/nft-test.py > > @@ -1,4 +1,4 @@ > > -#!/usr/bin/python2 > > +#!/usr/bin/python > > # > > # (C) 2014 by Ana Rey Botello <anarey@xxxxxxxxx> > > # > > @@ -13,6 +13,7 @@ > > # Thanks to the Outreach Program for Women (OPW) for sponsoring this test > > # infrastructure. > > > > +from __future__ import print_function > > import sys > > import os > > import argparse > > @@ -436,7 +437,7 @@ def set_delete(table, filename=None, lineno=None): > > ''' > > Deletes set and its content. > > ''' > > - for set_name in all_set.keys(): > > + for set_name in list(all_set.keys()): > What exactly is this list() for? This is not a generator expression. > The .keys() method returns a list in python2 whereas in python3 it does not do that. So, i just wanted to be sure that whatever is returned is used as a list. (but now it turns out that even without that, the code is running perfectly in python3!) > > # Check if exists the set > > if not set_exist(set_name, table, filename, lineno): > > reason = "The set %s does not exist, " \ > > @@ -1002,9 +1003,9 @@ def execute_cmd(cmd, filename, lineno, stdout_log=False, debug=False): > > :param debug: temporarily set these debug flags > > ''' > > global log_file > > - print >> log_file, "command: %s" % cmd > > + print("command: {}".format(cmd), file = log_file) > > if debug_option: > > - print cmd > > + print(cmd) > > > > if debug: > > debug_old = nftables.get_debug() > > @@ -1198,7 +1199,7 @@ def run_test_file(filename, force_all_family_option, specific_file): > > sys.stdout.flush() > > > > if signal_received == 1: > > - print "\nSignal received. Cleaning up and Exitting..." > > + print("\nSignal received. Cleaning up and Exitting...") > > cleanup_on_exit() > > sys.exit(0) > > > > @@ -1305,13 +1306,13 @@ def run_test_file(filename, force_all_family_option, specific_file): > > > > if specific_file: > > if force_all_family_option: > > - print print_result_all(filename, tests, total_warning, total_error, > > - total_unit_run) > > + print(print_result_all(filename, tests, total_warning, total_error, > > + total_unit_run)) > > else: > > - print print_result(filename, tests, total_warning, total_error) > > + print(print_result(filename, tests, total_warning, total_error)) > > else: > > if tests == passed and tests > 0: > > - print filename + ": " + Colors.GREEN + "OK" + Colors.ENDC > > + print(filename + ": " + Colors.GREEN + "OK" + Colors.ENDC) > > > > f.close() > > del table_list[:] > > @@ -1322,7 +1323,7 @@ def run_test_file(filename, force_all_family_option, specific_file): > > > > > > def main(): > > - parser = argparse.ArgumentParser(description='Run nft tests', version='1.0') > > + parser = argparse.ArgumentParser(description='Run nft tests') > > > > parser.add_argument('filenames', nargs='*', metavar='path/to/file.t', > > help='Run only these tests') > > @@ -1341,6 +1342,10 @@ def main(): > > dest='enable_json', > > help='test JSON functionality as well') > > > > + parser.add_argument('-v', '--version', action='version', > > + version= '1.0', > > + help='prints the version information') > Since this message is for the user, it should be "print" IMO. > True. Will change it. > > + > > args = parser.parse_args() > > global debug_option, need_fix_option, enable_json_option > > debug_option = args.debug > > @@ -1353,15 +1358,15 @@ def main(): > > signal.signal(signal.SIGTERM, signal_handler) > > > > if os.getuid() != 0: > > - print "You need to be root to run this, sorry" > > + print("You need to be root to run this, sorry") > > return > > > > # Change working directory to repository root > > os.chdir(TESTS_PATH + "/../..") > > > > if not os.path.exists('src/.libs/libnftables.so'): > > - print "The nftables library does not exist. " \ > > - "You need to build the project." > > + print("The nftables library does not exist. " > > + "You need to build the project.") > > return > > > > global nftables > > @@ -1411,18 +1416,15 @@ def main(): > > run_total += file_unit_run > > > > if test_files == 0: > > - print "No test files to run" > > + print("No test files to run") > > else: > > if not specific_file: > > if force_all_family_option: > > - print "%d test files, %d files passed, %d unit tests, " \ > > - "%d total executed, %d error, %d warning" \ > > - % (test_files, files_ok, tests, run_total, errors, > > - warnings) > > + print("{} test files, {} files passed, {} unit tests,".format(test_files, files_ok, tests)) > > + print("{} total executed, {} error, {} warning".format(run_total, errors, warnings)) > > else: > > - print "%d test files, %d files passed, %d unit tests, " \ > > - "%d error, %d warning" \ > > - % (test_files, files_ok, tests, errors, warnings) > > + print("{} test files, {} files passed, {} unit tests".format(test_files, files_ok, tests)) > > + print("{} error, {} warning".format(errors, warnings)) > > > > > > if __name__ == '__main__': > > -- > > 2.17.1 > > > > > -- > Shivani > https://about.me/shivani.bhardwaj Thanks! Shekhar