From 5e537a6dcf4136e3b9c3905a39f073396e7f044f Mon Sep 17 00:00:00 2001 From: Francisco Date: Thu, 25 Oct 2018 14:07:25 +0200 Subject: [PATCH] Added support for Python 3 (Only 3.6+ tested) while maintaining 2.7+ support. --- BUILD/build_api_examples.py | 16 +- BUILD/build_bin_doc.py | 13 +- BUILD/build_bin_scripts.py | 2 +- BUILD/build_validation_doc.py | 27 ++- __init__py | 0 bin/approve_saved_action.py | 1 + bin/ask_manual.py | 1 + bin/ask_parsed.py | 1 + bin/ask_saved.py | 1 + bin/close_session.py | 1 + bin/create_action_from_json.py | 1 + bin/create_group.py | 1 + bin/create_group_from_json.py | 1 + bin/create_package.py | 1 + bin/create_package_from_json.py | 1 + bin/create_question_from_json.py | 1 + bin/create_saved_question_from_json.py | 1 + bin/create_sensor_from_json.py | 1 + bin/create_user.py | 1 + bin/create_user_from_json.py | 1 + bin/create_whitelisted_url.py | 1 + bin/create_whitelisted_url_from_json.py | 1 + bin/delete_group.py | 1 + bin/delete_package.py | 1 + bin/delete_saved_question.py | 1 + bin/delete_sensor.py | 1 + bin/delete_user.py | 1 + bin/delete_whitelisted_url.py | 1 + bin/deploy_action.py | 1 + bin/get_action.py | 1 + bin/get_client.py | 1 + bin/get_group.py | 1 + bin/get_package.py | 1 + bin/get_question.py | 1 + bin/get_results.py | 1 + bin/get_saved_action.py | 1 + bin/get_saved_question.py | 1 + bin/get_saved_question_history.py | 1 + bin/get_sensor.py | 1 + bin/get_session.py | 1 + bin/get_setting.py | 1 + bin/get_user.py | 1 + bin/get_userrole.py | 1 + bin/get_whitelisted_url.py | 1 + bin/print_sensors.py | 1 + bin/print_server_info.py | 1 + bin/pytan_shell.py | 1 + bin/stop_action.py | 1 + bin/tsat.py | 1 + bin/write_pytan_user_config.py | 1 + lib/ddt.py | 4 +- lib/md_doctester.py | 25 +- lib/pytan/binsupport.py | 226 +++++++++--------- lib/pytan/handler.py | 29 ++- lib/pytan/sessions.py | 21 +- lib/pytan/utils.py | 64 ++--- lib/pytan/xml_clean.py | 19 +- lib/taniumpy/object_types/action.py | 16 +- lib/taniumpy/object_types/action_list.py | 6 +- lib/taniumpy/object_types/action_stop.py | 2 +- lib/taniumpy/object_types/action_stop_list.py | 2 +- lib/taniumpy/object_types/all_objects.py | 178 +++++++------- .../object_types/archived_question_list.py | 2 +- lib/taniumpy/object_types/base.py | 46 ++-- .../object_types/cache_filter_list.py | 2 +- lib/taniumpy/object_types/cache_info.py | 2 +- lib/taniumpy/object_types/computer_group.py | 2 +- .../object_types/computer_group_list.py | 4 +- .../object_types/computer_spec_list.py | 4 +- lib/taniumpy/object_types/error_list.py | 2 +- lib/taniumpy/object_types/filter.py | 2 +- lib/taniumpy/object_types/filter_list.py | 2 +- lib/taniumpy/object_types/group.py | 6 +- lib/taniumpy/object_types/group_list.py | 2 +- lib/taniumpy/object_types/metadata_list.py | 2 +- lib/taniumpy/object_types/object_list.py | 90 +++---- .../object_types/object_list_types.py | 174 +++++++------- lib/taniumpy/object_types/options.py | 2 +- lib/taniumpy/object_types/package_file.py | 2 +- .../object_types/package_file_list.py | 2 +- .../object_types/package_file_status_list.py | 2 +- .../package_file_template_list.py | 2 +- lib/taniumpy/object_types/package_spec.py | 12 +- .../object_types/package_spec_list.py | 4 +- lib/taniumpy/object_types/parameter_list.py | 2 +- lib/taniumpy/object_types/parse_job_list.py | 2 +- lib/taniumpy/object_types/parse_result.py | 2 +- .../object_types/parse_result_group.py | 4 +- .../object_types/parse_result_group_list.py | 2 +- .../object_types/parse_result_list.py | 2 +- lib/taniumpy/object_types/plugin.py | 10 +- .../object_types/plugin_argument_list.py | 2 +- lib/taniumpy/object_types/plugin_list.py | 4 +- lib/taniumpy/object_types/plugin_schedule.py | 6 +- .../object_types/plugin_schedule_list.py | 4 +- lib/taniumpy/object_types/plugin_sql.py | 4 +- lib/taniumpy/object_types/question.py | 12 +- lib/taniumpy/object_types/question_list.py | 6 +- lib/taniumpy/object_types/saved_action.py | 20 +- .../object_types/saved_action_approval.py | 2 +- .../object_types/saved_action_list.py | 4 +- .../object_types/saved_action_policy.py | 4 +- lib/taniumpy/object_types/saved_question.py | 12 +- .../object_types/saved_question_list.py | 4 +- lib/taniumpy/object_types/select.py | 6 +- lib/taniumpy/object_types/select_list.py | 2 +- lib/taniumpy/object_types/sensor.py | 10 +- lib/taniumpy/object_types/sensor_list.py | 4 +- .../object_types/sensor_query_list.py | 2 +- .../object_types/sensor_subcolumn_list.py | 2 +- lib/taniumpy/object_types/system_setting.py | 4 +- .../object_types/system_setting_list.py | 4 +- .../object_types/system_status_aggregate.py | 2 +- .../object_types/system_status_list.py | 6 +- lib/taniumpy/object_types/upload_file_list.py | 2 +- .../object_types/upload_file_status.py | 2 +- lib/taniumpy/object_types/user.py | 6 +- lib/taniumpy/object_types/user_list.py | 2 +- lib/taniumpy/object_types/user_role.py | 2 +- lib/taniumpy/object_types/user_role_list.py | 2 +- .../object_types/version_aggregate_list.py | 2 +- lib/taniumpy/object_types/white_listed_url.py | 2 +- .../object_types/white_listed_url_list.py | 2 +- lib/threaded_http.py | 9 +- requirements.txt | 1 + test/test_pytan_invalid_server_tests.py | 5 +- test/test_pytan_unit.py | 61 +++-- test/test_pytan_valid_server_tests.py | 26 +- 128 files changed, 727 insertions(+), 610 deletions(-) create mode 100644 __init__py create mode 100644 requirements.txt diff --git a/BUILD/build_api_examples.py b/BUILD/build_api_examples.py index 96520f62..925f8b87 100755 --- a/BUILD/build_api_examples.py +++ b/BUILD/build_api_examples.py @@ -3,6 +3,8 @@ # ex: set tabstop=4 # Please do not change the two lines above. See PEP 8, PEP 263. '''generates all of the examples from the test/ddt JSON files''' +from __future__ import print_function +from builtins import object __author__ = 'Jim Olsen (jim.olsen@tanium.com)' __version__ = '2.1.4' @@ -43,7 +45,7 @@ handler = pytan.handler.Handler(**api_info) platform_version = handler.get_server_version() is6_5 = handler.session.platform_is_6_5() -print "Platform Version: {}".format(platform_version) +print("Platform Version: {}".format(platform_version)) BASIC_PY_CODE = script_definitions.BASIC_PY_CODE.format(**api_info) @@ -91,7 +93,7 @@ def clean_up_output_dirs(self): for i in output_dirs: if os.path.isdir(i): - print "Deleting and re-making old output dir: {}".format(i) + print("Deleting and re-making old output dir: {}".format(i)) shutil.rmtree(i) os.makedirs(i) @@ -233,7 +235,7 @@ def write_py_file(self, name, out, desc): filename = self.build_py_filename(name) filepath = os.path.join(self.pytan_example_out_dir, filename) buildsupport.write_file(filepath, out) - os.chmod(filepath, 0755) + os.chmod(filepath, 0o755) self.py_examples.append({'filename': filename, 'desc': desc}) def write_soap_file(self, name, out): @@ -289,7 +291,7 @@ def make_soap_example(self, name, desc, response_objects): def build_args_str(self, args_name, args): args_template = '{}["{}"] = {}'.format args_str_list = [ - args_template(args_name, k, pprint.pformat(v)) for k, v in args.iteritems() + args_template(args_name, k, pprint.pformat(v)) for k, v in args.items() ] args_str = '\n'.join(args_str_list) return args_str @@ -309,10 +311,10 @@ def process_ddt(self, ddt_file): ddt_tests = buildsupport.json_read(ddt) self.ddt_examples = [] - for name, info in sorted(ddt_tests.items(), key=lambda x: x[1]['priority']): + for name, info in sorted(list(ddt_tests.items()), key=lambda x: x[1]['priority']): only_65 = info.get('6_5_only', False) if only_65 and not is6_5: - print "Skipping {} - not valid for 6.2 platform".format(name) + print("Skipping {} - not valid for 6.2 platform".format(name)) continue if 'invalid' in name and 'deploy' in name: @@ -417,7 +419,7 @@ def main(self, skip_files=[], all_json_files=None, clean=True): # all_json_files = all_json_files[0:1] for x in all_json_files: - print "Now processing ddt file: {}".format(x) + print("Now processing ddt file: {}".format(x)) self.process_ddt(x) self.make_pytan_api_index() diff --git a/BUILD/build_bin_doc.py b/BUILD/build_bin_doc.py index c272a01f..488cb2e8 100755 --- a/BUILD/build_bin_doc.py +++ b/BUILD/build_bin_doc.py @@ -3,6 +3,7 @@ # ex: set tabstop=4 # Please do not change the two lines above. See PEP 8, PEP 263. '''Build the markdown docs for the bin/ scripts''' +from __future__ import print_function __author__ = 'Jim Olsen (jim.olsen@tanium.com)' __version__ = '2.1.4' @@ -37,7 +38,7 @@ main_output_dir = script_definitions.staticdoc_source # main_output_dir = '/tmp' -print "Output dir is: {}".format(main_output_dir) +print("Output dir is: {}".format(main_output_dir)) only_run = [] skips = [] @@ -52,12 +53,12 @@ buildsupport.clean_up(ini_output_dir, '*') - print "Re-building INI Files" + print("Re-building INI Files") section_template = string.Template(script_definitions.bin_doc_ini_section) ini_template = string.Template(script_definitions.bin_doc_ini) - for script_name, script_def in script_definitions.scripts.iteritems(): + for script_name, script_def in script_definitions.scripts.items(): if script_name in skips: buildsupport.spew("Skipping examples for {script_name}".format(**script_def), verbose) continue @@ -120,7 +121,7 @@ for x in ini_files: os.chdir(parent_dir) - print "Running MDTest against {}".format(x) + print("Running MDTest against {}".format(x)) mdtest_args = {} mdtest_args['filehandle'] = open(x, 'r') mdtest_args['outdir'] = md_output_dir @@ -131,7 +132,7 @@ toctemplate = " * **[{script_name}]({script_name}.html)**: {docstring}".format tocitems = [ toctemplate(**script_def) - for script_name, script_def in sorted(script_definitions.scripts.iteritems()) + for script_name, script_def in sorted(script_definitions.scripts.items()) if script_def['script_name'] not in script_examples.example_skips ] @@ -141,7 +142,7 @@ index_out = script_definitions.bin_doc_index.format(tocitems=tocitems) buildsupport.write_file(index_file, index_out) - print "Running MDTest against {}".format(index_file) + print("Running MDTest against {}".format(index_file)) mdtest_args = {} mdtest_args['filehandle'] = open(index_file, 'r') mdtest_args['outdir'] = md_output_dir diff --git a/BUILD/build_bin_scripts.py b/BUILD/build_bin_scripts.py index 12902c12..24e05a79 100755 --- a/BUILD/build_bin_scripts.py +++ b/BUILD/build_bin_scripts.py @@ -33,7 +33,7 @@ buildsupport.clean_up(output_bin, '*.py') buildsupport.clean_up(output_winbin, '*.bat') - for script_name, script_def in script_definitions.scripts.iteritems(): + for script_name, script_def in script_definitions.scripts.items(): script_def.update(script_definitions.general_subs) script_def.update(script_definitions.script_templates) buildsupport.create_script( diff --git a/BUILD/build_validation_doc.py b/BUILD/build_validation_doc.py index 73615633..0617c8fa 100755 --- a/BUILD/build_validation_doc.py +++ b/BUILD/build_validation_doc.py @@ -3,12 +3,15 @@ # ex: set tabstop=4 # Please do not change the two lines above. See PEP 8, PEP 263. '''generates all of the examples from the test/ddt JSON files''' +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() __author__ = 'Jim Olsen (jim.olsen@tanium.com)' __version__ = '2.1.4' import os import sys -import StringIO +import io import unittest import tempfile import platform @@ -58,19 +61,19 @@ handler = pytan.Handler(**api_info) platform_version = handler.get_server_version() - print "Determined platform version: {}".format(platform_version) - print "Determined OS version: {}".format(os_version) - print "Determined Python version: {}".format(python_version_full) + print("Determined platform version: {}".format(platform_version)) + print("Determined OS version: {}".format(os_version)) + print("Determined Python version: {}".format(python_version_full)) buildsupport.clean_up(TEST_OUT, '*') loader = unittest.TestLoader() suite = loader.loadTestsFromModule(test_pytan_valid_server_tests) - print "Capturing stderr and stdout and launching unittests for test_pytan_valid_server_tests" + print("Capturing stderr and stdout and launching unittests for test_pytan_valid_server_tests") - val_stdout = StringIO.StringIO() - val_stderr = StringIO.StringIO() + val_stdout = io.StringIO() + val_stderr = io.StringIO() sys.stdout = val_stdout sys.stderr = val_stderr @@ -82,9 +85,9 @@ sys.stderr = sys.__stderr__ val_stdout_val = val_stdout.getvalue() val_stderr_val = val_stderr.getvalue() - print "Exception occurred!!" - print "stdout:\n{}".format(val_stdout_val) - print "stderr:\n{}".format(val_stderr_val) + print("Exception occurred!!") + print("stdout:\n{}".format(val_stdout_val)) + print("stderr:\n{}".format(val_stderr_val)) raise sys.stdout = sys.__stdout__ @@ -96,8 +99,8 @@ # print "stderr:\n{}".format(val_stderr_val) if val_stderr_val: - print val_stderr_val - print "STDERR output from test!" + print(val_stderr_val) + print("STDERR output from test!") dir_base = 'valid_pytan_tests' rst_dir = os.path.join(script_definitions.doc_source, dir_base) diff --git a/__init__py b/__init__py new file mode 100644 index 00000000..e69de29b diff --git a/bin/approve_saved_action.py b/bin/approve_saved_action.py index 046b830c..2064010f 100755 --- a/bin/approve_saved_action.py +++ b/bin/approve_saved_action.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/ask_manual.py b/bin/ask_manual.py index 705174e9..3f104416 100755 --- a/bin/ask_manual.py +++ b/bin/ask_manual.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/ask_parsed.py b/bin/ask_parsed.py index 74c26537..005df8bc 100755 --- a/bin/ask_parsed.py +++ b/bin/ask_parsed.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/ask_saved.py b/bin/ask_saved.py index 8e18cc3d..ae039d67 100755 --- a/bin/ask_saved.py +++ b/bin/ask_saved.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/close_session.py b/bin/close_session.py index fd5b73c9..9aea9325 100755 --- a/bin/close_session.py +++ b/bin/close_session.py @@ -9,6 +9,7 @@ import os import sys import argparse +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_action_from_json.py b/bin/create_action_from_json.py index 701c520b..5ff43b72 100755 --- a/bin/create_action_from_json.py +++ b/bin/create_action_from_json.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_group.py b/bin/create_group.py index a05e61d4..470e7a1b 100755 --- a/bin/create_group.py +++ b/bin/create_group.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_group_from_json.py b/bin/create_group_from_json.py index 079f8fcb..25b77e3c 100755 --- a/bin/create_group_from_json.py +++ b/bin/create_group_from_json.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_package.py b/bin/create_package.py index 622dc69b..93594799 100755 --- a/bin/create_package.py +++ b/bin/create_package.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_package_from_json.py b/bin/create_package_from_json.py index 3357f9bb..9a928da3 100755 --- a/bin/create_package_from_json.py +++ b/bin/create_package_from_json.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_question_from_json.py b/bin/create_question_from_json.py index b806cbdf..a6593acf 100755 --- a/bin/create_question_from_json.py +++ b/bin/create_question_from_json.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_saved_question_from_json.py b/bin/create_saved_question_from_json.py index fd0c8150..a0c6bad7 100755 --- a/bin/create_saved_question_from_json.py +++ b/bin/create_saved_question_from_json.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_sensor_from_json.py b/bin/create_sensor_from_json.py index fb1912b0..f922e856 100755 --- a/bin/create_sensor_from_json.py +++ b/bin/create_sensor_from_json.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_user.py b/bin/create_user.py index 416a0693..60d50996 100755 --- a/bin/create_user.py +++ b/bin/create_user.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_user_from_json.py b/bin/create_user_from_json.py index d445cb52..5dd67b27 100755 --- a/bin/create_user_from_json.py +++ b/bin/create_user_from_json.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_whitelisted_url.py b/bin/create_whitelisted_url.py index 5a4d51b1..58f61093 100755 --- a/bin/create_whitelisted_url.py +++ b/bin/create_whitelisted_url.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/create_whitelisted_url_from_json.py b/bin/create_whitelisted_url_from_json.py index 331d03c5..c791810c 100755 --- a/bin/create_whitelisted_url_from_json.py +++ b/bin/create_whitelisted_url_from_json.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/delete_group.py b/bin/delete_group.py index fe7955bb..3af14d3e 100755 --- a/bin/delete_group.py +++ b/bin/delete_group.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/delete_package.py b/bin/delete_package.py index 18480ae0..c82548c3 100755 --- a/bin/delete_package.py +++ b/bin/delete_package.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/delete_saved_question.py b/bin/delete_saved_question.py index cd07f417..3540366f 100755 --- a/bin/delete_saved_question.py +++ b/bin/delete_saved_question.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/delete_sensor.py b/bin/delete_sensor.py index 8abf60df..90cc7d14 100755 --- a/bin/delete_sensor.py +++ b/bin/delete_sensor.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/delete_user.py b/bin/delete_user.py index 00087151..7abfae7e 100755 --- a/bin/delete_user.py +++ b/bin/delete_user.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/delete_whitelisted_url.py b/bin/delete_whitelisted_url.py index 52113579..62cf4fb1 100755 --- a/bin/delete_whitelisted_url.py +++ b/bin/delete_whitelisted_url.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/deploy_action.py b/bin/deploy_action.py index d789a6a2..6cc84b55 100755 --- a/bin/deploy_action.py +++ b/bin/deploy_action.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_action.py b/bin/get_action.py index b9d4ce2b..a81e088b 100755 --- a/bin/get_action.py +++ b/bin/get_action.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_client.py b/bin/get_client.py index f1414d5b..454c8379 100755 --- a/bin/get_client.py +++ b/bin/get_client.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_group.py b/bin/get_group.py index c40a7382..693a71f1 100755 --- a/bin/get_group.py +++ b/bin/get_group.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_package.py b/bin/get_package.py index e49b3572..5ec4410d 100755 --- a/bin/get_package.py +++ b/bin/get_package.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_question.py b/bin/get_question.py index 0827dd9b..65256522 100755 --- a/bin/get_question.py +++ b/bin/get_question.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_results.py b/bin/get_results.py index 4b8e710e..5b93701c 100755 --- a/bin/get_results.py +++ b/bin/get_results.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_saved_action.py b/bin/get_saved_action.py index 132fb7f1..80a587b5 100755 --- a/bin/get_saved_action.py +++ b/bin/get_saved_action.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_saved_question.py b/bin/get_saved_question.py index 5d65c9de..95ce1573 100755 --- a/bin/get_saved_question.py +++ b/bin/get_saved_question.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_saved_question_history.py b/bin/get_saved_question_history.py index abc05dc3..706b1550 100755 --- a/bin/get_saved_question_history.py +++ b/bin/get_saved_question_history.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_sensor.py b/bin/get_sensor.py index 8fde60ee..3a213f58 100755 --- a/bin/get_sensor.py +++ b/bin/get_sensor.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_session.py b/bin/get_session.py index 066e27a3..ed9a7773 100755 --- a/bin/get_session.py +++ b/bin/get_session.py @@ -8,6 +8,7 @@ import os import sys +import re import argparse sys.dont_write_bytecode = True diff --git a/bin/get_setting.py b/bin/get_setting.py index f9566ef7..4d691666 100755 --- a/bin/get_setting.py +++ b/bin/get_setting.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_user.py b/bin/get_user.py index 8efc1879..a0735edf 100755 --- a/bin/get_user.py +++ b/bin/get_user.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_userrole.py b/bin/get_userrole.py index 3dcb9d56..1ddac7fb 100755 --- a/bin/get_userrole.py +++ b/bin/get_userrole.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/get_whitelisted_url.py b/bin/get_whitelisted_url.py index c09c2928..55b4133b 100755 --- a/bin/get_whitelisted_url.py +++ b/bin/get_whitelisted_url.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/print_sensors.py b/bin/print_sensors.py index c90d5f57..efabd98e 100755 --- a/bin/print_sensors.py +++ b/bin/print_sensors.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/print_server_info.py b/bin/print_server_info.py index 8e85631d..f2e65498 100755 --- a/bin/print_server_info.py +++ b/bin/print_server_info.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/pytan_shell.py b/bin/pytan_shell.py index 865a51a7..27ee528a 100755 --- a/bin/pytan_shell.py +++ b/bin/pytan_shell.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/stop_action.py b/bin/stop_action.py index eedc1d3e..21aa9e4f 100755 --- a/bin/stop_action.py +++ b/bin/stop_action.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/tsat.py b/bin/tsat.py index 409023cc..8bbcc6ec 100755 --- a/bin/tsat.py +++ b/bin/tsat.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/bin/write_pytan_user_config.py b/bin/write_pytan_user_config.py index 9eb6b713..5f6441d2 100755 --- a/bin/write_pytan_user_config.py +++ b/bin/write_pytan_user_config.py @@ -8,6 +8,7 @@ import os import sys +import re sys.dont_write_bytecode = True my_file = os.path.abspath(sys.argv[0]) diff --git a/lib/ddt.py b/lib/ddt.py index c7c447bc..40fa65ad 100644 --- a/lib/ddt.py +++ b/lib/ddt.py @@ -1,3 +1,5 @@ +from builtins import str +from builtins import map import inspect import json import os @@ -104,7 +106,7 @@ def mk_test_name(name, value, index=0): trivial_types = (type(None), bool, str, int, float) try: - trivial_types += (unicode,) + trivial_types += (str,) except NameError: pass diff --git a/lib/md_doctester.py b/lib/md_doctester.py index 9f661b5f..76283f48 100755 --- a/lib/md_doctester.py +++ b/lib/md_doctester.py @@ -7,6 +7,10 @@ Last validated to work with: - Python 2.7.5 ''' +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import object __author__ = 'Jim Olsen (jim@lifehack.com)' __version__ = '2.1.0' @@ -26,10 +30,11 @@ import getpass import fnmatch import glob -from ConfigParser import SafeConfigParser +from configparser import SafeConfigParser from argparse import ArgumentDefaultsHelpFormatter as A1 # noqa from argparse import RawDescriptionHelpFormatter as A2 # noqa -from urllib2 import Request, urlopen, HTTPError, URLError +from urllib.request import Request, urlopen +from urllib.error import HTTPError, URLError reload(sys) sys.setdefaultencoding("utf-8") @@ -40,9 +45,9 @@ pname = os.path.splitext(os.path.basename(sys.argv[0]))[0] -print( +print(( '{} v{} by {}' -).format(pname, __version__, __author__) +).format(pname, __version__, __author__)) ''' @@ -181,7 +186,7 @@ def error(self, message): sys.exit(2) -class MDTest(): +class MDTest(object): C_SECT = 'CONFIG' VALMSG = 'valid_msg' @@ -404,7 +409,7 @@ def create_content(self, sectname): if not content: logging.debug("No content to create in {}".format(sectname)) return - for k, v in content.iteritems(): + for k, v in content.items(): fn = v.get('cname', '') ftext = v.get('ctext', '') if not fn: @@ -621,7 +626,7 @@ def create_md(self): self.md_addmh() self.md_addtoc() - for sectname, sectdict in self.t.iteritems(): + for sectname, sectdict in self.t.items(): self.md_addsecth(sectname, sectdict) self.md_addnotes(sectname, sectdict) self.md_addcontent(sectname, sectdict) @@ -719,7 +724,7 @@ def md_addcontent(self, sectname, sectdict): if not content: logging.debug("No content to output in {}".format(sectname)) return - for k, v in content.iteritems(): + for k, v in content.items(): fn = v.get('cname', '') ftext = v.get('ctext', '') ftype = v.get('ctype', '') @@ -875,8 +880,8 @@ def gfm_urllib(self, markdown_text): logging.error( 'Github API auth failed. Please check your OAuth token.') else: - print e.code - print e + print(e.code) + print(e) logging.error('Github API responded in an unfashion way :/') except URLError: gfm_html = self.gfm_curl(data) diff --git a/lib/pytan/binsupport.py b/lib/pytan/binsupport.py index 7f25e2e6..be5a72d6 100644 --- a/lib/pytan/binsupport.py +++ b/lib/pytan/binsupport.py @@ -3,6 +3,10 @@ # ex: set tabstop=4 # Please do not change the two lines above. See PEP 8, PEP 263. """Collection of classes and methods used throughout :mod:`pytan` for command line support""" +from __future__ import print_function +from builtins import input +from builtins import str +from builtins import object import sys # disable python from creating .pyc files everywhere @@ -76,7 +80,7 @@ def import_readline(self): import readline self.readline = readline if self.debug: - print "imported readline: {}".format(readline.__file__) + print("imported readline: {}".format(readline.__file__)) except: print ( "No readline support in this Python build, auto-completetion will not be enabled!" @@ -84,7 +88,7 @@ def import_readline(self): else: import rlcompleter # noqa if self.debug: - print "imported rlcompleter: {}".format(rlcompleter.__file__) + print("imported rlcompleter: {}".format(rlcompleter.__file__)) def setup_autocomplete(self): readline = self.readline @@ -94,21 +98,21 @@ def setup_autocomplete(self): if 'libedit' in rldoc: if self.debug: - print "osx libedit readline style readline" + print("osx libedit readline style readline") readline.parse_and_bind("bind ^I rl_complete") readline.parse_and_bind("bind ^R em-inc-search-prev") if 'readline.py' in rlfile: if self.debug: - print "pyreadline style readline" + print("pyreadline style readline") readline.parse_and_bind("tab: complete") elif rldoc: if self.debug: - print "normal readline style readline" + print("normal readline style readline") readline.parse_and_bind("tab: complete") elif self.debug: - print "readline module {} is unknown, methods: {}".format( + print("readline module {} is unknown, methods: {}".format( readline, dir(readline), - ) + )) def setup_atexit_write_history(self, histfile): readline = self.readline @@ -117,9 +121,9 @@ def setup_atexit_write_history(self, histfile): atexit = self.atexit atexit.register(self.write_history, histfile) elif self.debug: - print "readline module {} has no write_history_file(), methods: {}".format( + print("readline module {} has no write_history_file(), methods: {}".format( readline, dir(readline), - ) + )) def read_history(self, histfile): readline = self.readline @@ -131,11 +135,11 @@ def read_history(self, histfile): # the file doesn't exist/can't be accessed pass except Exception as e: - print "Unable to read history file '{}', exception: '{}'".format(histfile, e) + print("Unable to read history file '{}', exception: '{}'".format(histfile, e)) elif self.debug: - print "readline module {} has no read_history_file(), methods: {}".format( + print("readline module {} has no read_history_file(), methods: {}".format( readline, dir(readline), - ) + )) def write_history(self, histfile): readline = self.readline @@ -145,11 +149,11 @@ def write_history(self, histfile): try: readline.write_history_file(histfile) # noqa except Exception as e: - print "Unable to write history file '{}', exception: '{}'".format(histfile, e) + print("Unable to write history file '{}', exception: '{}'".format(histfile, e)) elif self.debug: - print "readline module {} has no write_history_file(), methods: {}".format( + print("readline module {} has no write_history_file(), methods: {}".format( readline, dir(readline), - ) + )) class CustomArgFormat(A1, A2): @@ -185,9 +189,9 @@ def print_help(self, **kwargs): if isinstance(action, argparse._SubParsersAction) ] for subparsers_action in subparsers_actions: - print "" + print("") # get all subparsers and print help - for choice, subparser in subparsers_action.choices.items(): + for choice, subparser in list(subparsers_action.choices.items()): # print subparser # print(" ** {} '{}':".format( # subparsers_action.dest, choice)) @@ -2054,26 +2058,26 @@ def process_get_saved_question_history_args(parser, handler, args): else: parser.error("Must supply --id or --name of saved question if not using --all_questions") - print "++ Finding saved question: {}".format(pytan.utils.jsonify(get_args)) + print("++ Finding saved question: {}".format(pytan.utils.jsonify(get_args))) try: saved_question = handler.get(**get_args)[0] except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) - print "Found Saved Question: '{}'".format(saved_question) + print("Found Saved Question: '{}'".format(saved_question)) # get all questions try: all_questions = handler.get_all('question', include_hidden_flag=1) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) - print "Found {} Total Questions".format(len(all_questions)) + print("Found {} Total Questions".format(len(all_questions))) if not all_questions_bool: all_questions = [ @@ -2081,11 +2085,11 @@ def process_get_saved_question_history_args(parser, handler, args): if getattr(x.saved_question, 'id', '') == saved_question.id ] - print ( + print(( "Found {} Questions asked for Saved_question '{}'" - ).format(len(all_questions), saved_question) + ).format(len(all_questions), saved_question)) - print "Getting ResultInfo for {} Questions".format(len(all_questions)) + print("Getting ResultInfo for {} Questions".format(len(all_questions))) # store the ResultInfo for each question as x.result_info [ @@ -2098,7 +2102,7 @@ def process_get_saved_question_history_args(parser, handler, args): x for x in all_questions if x.result_info.row_count ] - print "Found {} Questions that actually have data".format(len(all_questions)) + print("Found {} Questions that actually have data".format(len(all_questions))) # flatten out saved_question.id [ @@ -2167,7 +2171,7 @@ def process_get_saved_question_history_args(parser, handler, args): report_dir=args.report_dir, ) - print "Wrote {} bytes to report file: '{}'".format(len(all_question_csv), report_file) + print("Wrote {} bytes to report file: '{}'".format(len(all_question_csv), report_file)) return report_file @@ -2202,11 +2206,11 @@ def process_create_json_object_args(parser, handler, obj, args): response = handler.create_from_json(obj, **obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(100) for i in response: obj_id = getattr(i, 'id', 'unknown') - print "Created item: {}, ID: {}".format(i, obj_id) + print("Created item: {}, ID: {}".format(i, obj_id)) return response @@ -2334,7 +2338,7 @@ def show_sensors(self): ] for param in params: - for k, v in sorted(param.iteritems()): + for k, v in sorted(param.items()): if k in skip_attrs: continue out.append(" * Parameter '{}' - '{}': {}".format(param['key'], k, v)) @@ -2385,7 +2389,7 @@ def remove_file_log(self, logfile): basename = os.path.basename(logfile) root_logger = logging.getLogger() all_loggers = pytan.utils.get_all_loggers() - for k, v in all_loggers.items(): + for k, v in list(all_loggers.items()): for x in v.handlers: if x.name == basename: root_logger.removeHandler(x) @@ -2400,7 +2404,7 @@ def add_file_log(self, logfile): file_handler.set_name(basename) file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(logging.Formatter(self.FILE_INFO_FORMAT)) - for k, v in all_loggers.items(): + for k, v in list(all_loggers.items()): v.addHandler(file_handler) v.propagate = False @@ -2612,10 +2616,10 @@ def param_type_prompt(self, sensor, param_def): param_section = None while True: - ptype = raw_input(typeprompt) + ptype = input(typeprompt) if ptype not in typemap: m = "\n!! Invalid choice '{}', must be one of: {}\n".format - print m(ptype, ', '.join(typemap.keys())) + print(m(ptype, ', '.join(list(typemap.keys())))) continue if param_section == 'global': @@ -2623,7 +2627,7 @@ def param_type_prompt(self, sensor, param_def): else: ptxt = 'sensor specific' - print "\n~~ Will store value as {}".format(ptxt) + print("\n~~ Will store value as {}".format(ptxt)) param_section = typemap[ptype] break return param_section @@ -2695,26 +2699,26 @@ def param_value_prompt(self, sensor, param_def, param_section=None): param_value = None while True: - param_value = raw_input(valueprompt) + param_value = input(valueprompt) if not param_value: if defval: - print "\n~~ Using default value of: '{}'".format(defval) + print("\n~~ Using default value of: '{}'".format(defval)) param_value = defval break if valid_values: - print "\n~~ Using first valid value of: '{}'".format(valid_values[0]) + print("\n~~ Using first valid value of: '{}'".format(valid_values[0])) param_value = valid_values[0] break if valid_values and param_value not in valid_values: m = "\n!! Invalid choice '{}', must be one of: {}\n".format - print m(param_value, valid_values) + print(m(param_value, valid_values)) continue if not param_value: m = "\n!! No default value defined, must supply a value!\n".format - print m() + print(m()) continue if param_value: @@ -2789,7 +2793,7 @@ def run_sensor(self, idx, sensor): continue if param_dict: - for k, v in param_dict.iteritems(): + for k, v in param_dict.items(): if v.startswith('eval:'): orig_v = v.replace('eval:', '') try: @@ -2970,7 +2974,7 @@ def process_tsat_args(parser, handler, args): tsatworker.start() except Exception as e: traceback.print_exc() - print "\nError occurred: {}".format(e) + print("\nError occurred: {}".format(e)) sys.exit(100) @@ -3004,10 +3008,10 @@ def process_delete_object_args(parser, handler, obj, args): response = handler.delete(**obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(100) for i in response: - print "Deleted item: ", i + print("Deleted item: ", i) return response @@ -3033,10 +3037,10 @@ def process_approve_saved_action_args(parser, handler, args): approve_action = handler.approve_saved_action(**q_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) - print "++ Saved Action ID approved successfully: {0.id!r}".format(approve_action) + print("++ Saved Action ID approved successfully: {0.id!r}".format(approve_action)) return approve_action @@ -3062,10 +3066,10 @@ def process_stop_action_args(parser, handler, args): action_stop = handler.stop_action(**q_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) - print "++ Action ID stopped successfully: {0.id!r}".format(action_stop) + print("++ Action ID stopped successfully: {0.id!r}".format(action_stop)) return action_stop @@ -3090,7 +3094,7 @@ def process_get_results_args(parser, handler, args): obj = handler.get(**args.__dict__)[0] except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) m = "++ Found object: {}".format @@ -3100,14 +3104,14 @@ def process_get_results_args(parser, handler, args): try: results_obj = handler.get_result_data_sse(obj=obj, **args.__dict__) except Exception as e: - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) else: try: results_obj = handler.get_result_data(obj=obj, **args.__dict__) except Exception as e: - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) if isinstance(results_obj, taniumpy.object_types.result_set.ResultSet): @@ -3121,7 +3125,7 @@ def process_get_results_args(parser, handler, args): ) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) m = "++ Report file {!r} written with {} bytes".format @@ -3167,7 +3171,7 @@ def process_create_user_args(parser, handler, args): response = handler.create_user(**obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) roles_txt = ', '.join([x.name for x in response.roles]) @@ -3205,7 +3209,7 @@ def process_create_package_args(parser, handler, args): response = handler.create_package(**obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) m = "New package {0.name!r} created with ID {0.id!r}, command: {0.command!r}".format @@ -3238,7 +3242,7 @@ def process_create_sensor_args(parser, handler, args): response = handler.create_sensor(**obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) m = "New sensor {0.name!r} created with ID {0.id!r}".format @@ -3271,7 +3275,7 @@ def process_create_whitelisted_url_args(parser, handler, args): response = handler.create_whitelisted_url(**obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) m = "New Whitelisted URL {0.url_regex!r} created with ID {0.id!r}".format @@ -3304,7 +3308,7 @@ def process_create_group_args(parser, handler, args): response = handler.create_group(**obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) m = ( @@ -3328,7 +3332,7 @@ def process_write_pytan_user_config_args(parser, handler, args): """ puc = handler.write_pytan_user_config(pytan_user_config=args.file) m = "PyTan User config file successfully written: {} ".format - print m(puc) + print(m(puc)) def process_print_server_info_args(parser, handler, args): @@ -3346,9 +3350,9 @@ def process_print_server_info_args(parser, handler, args): si = handler.session.get_server_info() if args.json: - print pytan.utils.jsonify(si['diags_flat']) + print(pytan.utils.jsonify(si['diags_flat'])) else: - print str(handler) + print(str(handler)) print_obj(si['diags_flat']) @@ -3369,17 +3373,17 @@ def process_print_sensors_args(parser, handler, args): ) real_sensors = filter_sourced_sensors(all_sensors) - print "Filtered out sourced sensors: {}".format(len(real_sensors)) + print("Filtered out sourced sensors: {}".format(len(real_sensors))) filtered_sensors = filter_sensors( sensors=real_sensors, filter_platforms=args.platforms, filter_categories=args.categories, ) - print "Filtered out sensors based on user filters: {}".format(len(filtered_sensors)) + print("Filtered out sensors based on user filters: {}".format(len(filtered_sensors))) if args.json: for x in filtered_sensors: result = handler.export_obj(obj=x, export_format='json') - print "{}:\n{}".format(x, result) + print("{}:\n{}".format(x, result)) sys.exit() for x in sorted(filtered_sensors, key=lambda x: x.category): @@ -3390,7 +3394,7 @@ def process_print_sensors_args(parser, handler, args): try: param_def = json.loads(param_def) except: - print "Error loading JSON parameter definition {}".format(param_def) + print("Error loading JSON parameter definition {}".format(param_def)) param_def = {} params = param_def.get('parameters', []) @@ -3398,10 +3402,10 @@ def process_print_sensors_args(parser, handler, args): continue desc = (x.description or '').replace('\n', ' ').strip() - print ( + print(( "\n * Sensor Name: '{0.name}', Platforms: {1}, Category: {0.category}" - ).format(x, ', '.join(platforms)) - print " * Description: {}".format(desc) + ).format(x, ', '.join(platforms))) + print(" * Description: {}".format(desc)) if args.hide_params: continue @@ -3415,13 +3419,13 @@ def process_print_sensors_args(parser, handler, args): ] for param in params: - print " * Parameter '{}':".format(param['key']) - for k, v in sorted(param.iteritems()): + print(" * Parameter '{}':".format(param['key'])) + for k, v in sorted(param.items()): if k in skip_attrs: continue if not v: continue - print " - '{}': {}".format(k, v) + print(" - '{}': {}".format(k, v)) def process_get_object_args(parser, handler, obj, args, report=True): @@ -3458,17 +3462,17 @@ def process_get_object_args(parser, handler, obj, args, report=True): response = handler.get_all(**o_dict) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(100) else: try: response = handler.get(**obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(100) - print "Found items: ", response + print("Found items: ", response) if report: report_file, result = handler.export_to_report_file(obj=response, **args.__dict__) @@ -3502,18 +3506,18 @@ def process_ask_parsed_args(parser, handler, args): obj_grp_opts = get_grp_opts(parser=parser, grp_names=obj_grp_names) obj_grp_args = {k: getattr(args, k) for k in obj_grp_opts if getattr(args, k, None)} - print "++ Asking parsed question:\n{}".format(pytan.utils.jsonify(obj_grp_args)) + print("++ Asking parsed question:\n{}".format(pytan.utils.jsonify(obj_grp_args))) try: response = handler.ask(qtype='parsed', **obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) question = response['question_object'] results = response['question_results'] - print "++ Asked Question {0.query_text!r} ID: {0.id!r}".format(question) + print("++ Asked Question {0.query_text!r} ID: {0.id!r}".format(question)) if results: try: @@ -3521,13 +3525,13 @@ def process_ask_parsed_args(parser, handler, args): obj=results, **args.__dict__ ) except Exception as e: - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) m = "++ Report file {!r} written with {} bytes".format print(m(report_file, len(report_contents))) else: - print "++ No action results returned, run get_results.py to get the results" + print("++ No action results returned, run get_results.py to get the results") return response @@ -3553,33 +3557,33 @@ def process_ask_manual_args(parser, handler, args): obj_grp_names = ['Manual Question Options'] obj_grp_opts = get_grp_opts(parser=parser, grp_names=obj_grp_names) obj_grp_args = {k: getattr(args, k) for k in obj_grp_opts} - other_args = {a: b for a, b in args.__dict__.iteritems() if a not in obj_grp_args} + other_args = {a: b for a, b in args.__dict__.items() if a not in obj_grp_args} - print "++ Asking manual question:\n{}".format(pytan.utils.jsonify(obj_grp_args)) + print("++ Asking manual question:\n{}".format(pytan.utils.jsonify(obj_grp_args))) try: response = handler.ask(qtype='manual', **obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) question = response['question_object'] results = response['question_results'] - print "++ Asked Question {0.query_text!r} ID: {0.id!r}".format(question) + print("++ Asked Question {0.query_text!r} ID: {0.id!r}".format(question)) if results: try: report_file, report_contents = handler.export_to_report_file(obj=results, **other_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) m = "++ Report file {!r} written with {} bytes".format print(m(report_file, len(report_contents))) else: - print "++ No action results returned, run get_results.py to get the results" + print("++ No action results returned, run get_results.py to get the results") return response @@ -3606,23 +3610,23 @@ def process_deploy_action_args(parser, handler, args): obj_grp_opts = get_grp_opts(parser=parser, grp_names=obj_grp_names) obj_grp_args = {k: getattr(args, k) for k in obj_grp_opts} - print "++ Deploying action:\n{}".format(pytan.utils.jsonify(obj_grp_args)) + print("++ Deploying action:\n{}".format(pytan.utils.jsonify(obj_grp_args))) try: response = handler.deploy_action(**obj_grp_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) action = response['action_object'] - print "++ Deployed Action {0.name!r} ID: {0.id!r}".format(action) - print "++ Command used in Action: {0.package_spec.command!r}".format(action) + print("++ Deployed Action {0.name!r} ID: {0.id!r}".format(action)) + print("++ Command used in Action: {0.package_spec.command!r}".format(action)) if response['action_result_map']: - print "++ Deploy action progress results:" - for k, v in sorted(response['action_result_map'].iteritems()): - print "Total {}: {}".format(k, v['total']) + print("++ Deploy action progress results:") + for k, v in sorted(response['action_result_map'].items()): + print("Total {}: {}".format(k, v['total'])) results = response['action_results'] if results: @@ -3634,7 +3638,7 @@ def process_deploy_action_args(parser, handler, args): obj=results, **obj_grp_args ) except Exception as e: - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) response['report_file'] = report_file @@ -3678,7 +3682,7 @@ def process_get_session_args(parser, handler, args): args : args object * args parsed from `parser` """ - print handler.session._session_id + print(handler.session._session_id) def process_close_session_args(parser, handler, args): @@ -3728,24 +3732,24 @@ def process_ask_saved_args(parser, handler, args): q_args['refresh_data'] = refresh_arg - print "++ Asking saved question: {}".format(pytan.utils.jsonify(q_args)) + print("++ Asking saved question: {}".format(pytan.utils.jsonify(q_args))) try: response = handler.ask(qtype='saved', **q_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) question = response['question_object'] results = response['question_results'] - print "++ Saved Question {0.query_text!r} ID: {0.id!r}".format(question) + print("++ Saved Question {0.query_text!r} ID: {0.id!r}".format(question)) try: report_file, report_contents = handler.export_to_report_file(obj=results, **args.__dict__) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) response['report_file'] = report_file @@ -3780,10 +3784,10 @@ def process_handler_args(parser, args): h = pytan.Handler(**handler_args) except Exception as e: traceback.print_exc() - print "\n\nError occurred: {}".format(e) + print("\n\nError occurred: {}".format(e)) sys.exit(99) - print str(h) + print(str(h)) return h @@ -3846,17 +3850,17 @@ def debug_obj(debugobj): def introspect(obj, depth=0): """Utility function to dump all info about an object""" import types - print "%s%s: %s\n" % (depth * "\t", obj, [ - x for x in dir(obj) if x[:2] != "__"]) + print("%s%s: %s\n" % (depth * "\t", obj, [ + x for x in dir(obj) if x[:2] != "__"])) depth += 1 for x in dir(obj): if x[:2] == "__": continue subobj = getattr(obj, x) - print "%s%s: %s" % (depth * "\t", x, subobj) + print("%s%s: %s" % (depth * "\t", x, subobj)) if isinstance(subobj, types.InstanceType) and dir(subobj) != []: introspect(subobj, depth=depth + 1) - print + print() def input_prompts(args): @@ -3872,11 +3876,11 @@ def input_prompts(args): puc_dict = json.load(fh) except Exception as e: m = "PyTan User Config file exists at '{}' but is not valid, Exception: {}".format - print m(puc, e) + print(m(puc, e)) if not args.session_id: if not args.username and not puc_dict.get('username', ''): - username = raw_input('Tanium Username: ') + username = input('Tanium Username: ') args.username = username.strip() if not args.password and not puc_dict.get('password', ''): @@ -3884,23 +3888,23 @@ def input_prompts(args): args.password = password.strip() if not args.host and not puc_dict.get('host', ''): - host = raw_input('Tanium Host: ') + host = input('Tanium Host: ') args.host = host.strip() return args def print_obj(d, indent=0): """Pretty print a dictionary""" - for k, v in d.iteritems(): + for k, v in d.items(): if pytan.utils.is_dict(v): - print "{}{}: \n".format(' ' * indent, k), + print("{}{}: \n".format(' ' * indent, k), end=' ') print_obj(v, indent + 1) elif pytan.utils.is_list(v): - print "{}{}: ".format(' ' * indent, k) + print("{}{}: ".format(' ' * indent, k)) for a in v: print_obj(a, indent + 1) else: - print "{}{}: {}".format(' ' * indent, k, v) + print("{}{}: {}".format(' ' * indent, k, v)) def filter_filename(filename): @@ -3996,7 +4000,7 @@ def get_all_headers(rows_list): """Utility to get all the keys for a list of dicts""" headers = [] for row_dict in rows_list: - [headers.append(h) for h in row_dict.keys() if h not in headers] + [headers.append(h) for h in list(row_dict.keys()) if h not in headers] return headers diff --git a/lib/pytan/handler.py b/lib/pytan/handler.py index 5444752c..aba372d5 100755 --- a/lib/pytan/handler.py +++ b/lib/pytan/handler.py @@ -1,4 +1,7 @@ """The main :mod:`pytan` module that provides first level entities for programmatic use.""" +from builtins import zip +from builtins import str +from builtins import object import datetime import io import json @@ -158,7 +161,7 @@ def __init__(self, username=None, password=None, host=None, port=443, self.methodlog = logging.getLogger("method_debug") # update self with all local variables that are not self/kwargs/k/v - for k, v in locals().iteritems(): + for k, v in locals().items(): if k in ['self', 'kwargs', 'k', 'v']: continue setattr(self, k, v) @@ -254,7 +257,7 @@ def read_pytan_user_config(self, kwargs): self.mylog.info(m(self.puc)) # handle class params - for h_arg, arg_default in pytan.constants.HANDLER_ARG_DEFAULTS.iteritems(): + for h_arg, arg_default in pytan.constants.HANDLER_ARG_DEFAULTS.items(): if h_arg not in puc_dict: continue @@ -277,7 +280,7 @@ def read_pytan_user_config(self, kwargs): setattr(self, h_arg, puc_val) # handle kwargs params - for k, v in puc_dict.iteritems(): + for k, v in puc_dict.items(): if k in ['self', 'kwargs', 'k', 'v']: m = "Skipping kwargs variable {} from: {}".format self.mylog.debug(m(k, self.puc)) @@ -309,7 +312,7 @@ def write_pytan_user_config(self, **kwargs): puc_dict = {} - for k, v in vars(self).iteritems(): + for k, v in vars(self).items(): if k in ['mylog', 'methodlog', 'session', 'puc']: m = "Skipping class variable {} from inclusion in: {}".format self.mylog.debug(m(k, puc)) @@ -1280,7 +1283,7 @@ def create_from_json(self, objtype, json_file, **kwargs): if not create_json_ok: json_createable = ', '.join([ - x for x, y in pytan.constants.GET_OBJ_MAP.items() if y['create_json'] + x for x, y in list(pytan.constants.GET_OBJ_MAP.items()) if y['create_json'] ]) m = "{} is not a json createable object! Supported objects: {}".format raise pytan.exceptions.HandlerError(m(objtype, json_createable)) @@ -1875,7 +1878,7 @@ def delete(self, objtype, **kwargs): if not delete_ok: deletable = ', '.join([ - x for x, y in pytan.constants.GET_OBJ_MAP.items() if y['delete'] + x for x, y in list(pytan.constants.GET_OBJ_MAP.items()) if y['delete'] ]) m = "{} is not a deletable object! Deletable objects: {}".format raise pytan.exceptions.HandlerError(m(objtype, deletable)) @@ -1967,7 +1970,7 @@ def export_obj(self, obj, export_format='csv', **kwargs): ).format # build a list of supported object types - supp_types = ', '.join(pytan.constants.EXPORT_MAPS.keys()) + supp_types = ', '.join(list(pytan.constants.EXPORT_MAPS.keys())) raise pytan.exceptions.HandlerError(err(objtype, supp_types)) # get the export formats for this obj type @@ -1983,12 +1986,12 @@ def export_obj(self, obj, export_format='csv', **kwargs): opt_keys = export_formats.get(export_format, []) for opt_key in opt_keys: - check_args = dict(opt_key.items() + {'d': kwargs}.items()) + check_args = dict(list(opt_key.items()) + list({'d': kwargs}.items())) pytan.utils.check_dictkey(**check_args) # filter out the kwargs that are specific to this obj type and format type format_kwargs = { - k: v for k, v in kwargs.iteritems() + k: v for k, v in kwargs.items() if k in [a['key'] for a in opt_keys] } @@ -2059,7 +2062,7 @@ def create_report_file(self, contents, report_file=None, **kwargs): report_path = os.path.join(report_dir, report_file) with open(report_path, 'wb') as fd: - fd.write(contents) + fd.write(contents.encode("utf-8")) m = "Report file {!r} written with {} bytes".format self.mylog.info(m(report_path, len(contents))) @@ -2198,7 +2201,7 @@ def get(self, objtype, **kwargs): return_objs = getattr(taniumpy, all_objs.__class__.__name__)() - for k, v in kwargs.iteritems(): + for k, v in kwargs.items(): if not v: continue if not hasattr(all_objs[0], k): @@ -2390,7 +2393,7 @@ def _get_multi(self, obj_map, **kwargs): # create a list object to append our searches to api_obj_multi = pytan.utils.get_taniumpy_obj(obj_map=multi_type)() - for k, v in api_kw.iteritems(): + for k, v in api_kw.items(): if v and k not in obj_map['search']: continue # if we can't search for k, skip @@ -2442,7 +2445,7 @@ def _get_single(self, obj_map, **kwargs): clean_keys = ['obj_map', 'k', 'v'] clean_kwargs = pytan.utils.clean_kwargs(kwargs=kwargs, keys=clean_keys) - for k, v in api_kw.iteritems(): + for k, v in api_kw.items(): if v and k not in obj_map['search']: continue # if we can't search for k, skip diff --git a/lib/pytan/sessions.py b/lib/pytan/sessions.py index f6b38567..d1d32ddf 100644 --- a/lib/pytan/sessions.py +++ b/lib/pytan/sessions.py @@ -1,4 +1,6 @@ """Session classes for the :mod:`pytan` module.""" +from builtins import str +from builtins import object import json import logging import os @@ -32,12 +34,9 @@ requests.packages.urllib3.disable_warnings() -try: - import sys - reload(sys) # noqa +if sys.version_info < (3,0): + reload(sys) sys.setdefaultencoding('utf-8') -except Exception: - raise class Session(object): @@ -800,7 +799,7 @@ def get_server_stats(self, **kwargs): stats_resolved = [ self._find_stat_target(target=t, diags=diags) for t in self.STATS_LOOP_TARGETS ] - stats_text = ", ".join(["{}: {}".format(*i.items()[0]) for i in stats_resolved]) + stats_text = ", ".join(["{}: {}".format(*list(i.items())[0]) for i in stats_resolved]) return stats_text def enable_stats_loop(self, sleep=None): @@ -1283,8 +1282,8 @@ def _replace_auth(self, headers): self.authlog.debug("Using session ID for authentication headers") elif self._username and self._password: - headers['username'] = b64encode(self._username) - headers['password'] = b64encode(self._password) + headers['username'] = b64encode(self._username.encode("utf-8")) + headers['password'] = b64encode(self._password.encode("utf-8")) self.authlog.debug("Using Username/Password for authentication headers") return headers @@ -1386,7 +1385,7 @@ def _flatten_server_info(self, structure): """ flattened = structure if isinstance(structure, dict): - for k, v in flattened.iteritems(): + for k, v in flattened.items(): flattened[k] = self._flatten_server_info(structure=v) elif isinstance(structure, (tuple, list)): if all([isinstance(x, dict) for x in structure]): @@ -1427,7 +1426,7 @@ def _find_stat_target(self, target, diags): * result : value resolved from :func:`pytan.sessions.Session._resolve_stat_target` for `target` index1 (search_path) """ try: - label, search_path = target.items()[0] + label, search_path = list(target.items())[0] except Exception as e: label = "Parse Failure" result = "Unable to parse stat target: {}, exception: {}".format(target, e) @@ -1491,7 +1490,7 @@ def _build_body(self, command, object_list, log_options=False, **kwargs): """ options_obj = taniumpy.Options() - for k, v in kwargs.iteritems(): + for k, v in kwargs.items(): if hasattr(options_obj, k): if log_options: m = "Setting Options attribute {!r} to value {!r}".format diff --git a/lib/pytan/utils.py b/lib/pytan/utils.py index cf9a3443..1ace6e50 100644 --- a/lib/pytan/utils.py +++ b/lib/pytan/utils.py @@ -3,6 +3,12 @@ # ex: set tabstop=4 # Please do not change the two lines above. See PEP 8, PEP 263. """Collection of classes and methods used throughout :mod:`pytan`""" +from __future__ import print_function +from __future__ import division +from builtins import chr +from builtins import str +from builtins import zip +from builtins import range import sys # disable python from creating .pyc files everywhere @@ -56,7 +62,7 @@ def emit(self, record): stream = sys.stderr fs = "%s\n" try: - is_unicode = isinstance(msg, unicode) + is_unicode = isinstance(msg, str) if is_unicode and getattr(stream, 'encoding', None): ufs = u'%s\n' try: @@ -81,7 +87,7 @@ def is_list(l): def is_str(l): """returns True if `l` is a string, False if not""" - return type(l) in [unicode, str] + return type(l) in [str, bytes] def is_dict(l): @@ -91,7 +97,7 @@ def is_dict(l): def is_num(l): """returns True if `l` is a number, False if not""" - return type(l) in [float, int, long] + return type(l) in [float, int, int] def jsonify(v, indent=2, sort_keys=True): @@ -260,7 +266,7 @@ def spew(t): * string to debug print """ if DEBUG_OUTPUT: - print "DEBUG::{}".format(t) + print("DEBUG::{}".format(t)) def remove_logging_handler(name='all'): @@ -271,7 +277,7 @@ def remove_logging_handler(name='all'): name : str * name of logging handler to remove. if name == 'all' then all logging handlers are removed """ - for k, v in sorted(get_all_pytan_loggers().iteritems()): + for k, v in sorted(get_all_pytan_loggers().items()): for handler in v.handlers: if name == 'all': spew("Removing logging handler: {0}/{0.name} due to 'all'".format(handler)) @@ -302,7 +308,7 @@ def setup_console_logging(gmt_tz=True): ch.setLevel(logging.DEBUG) ch.setFormatter(logging.Formatter(pytan.constants.INFO_FORMAT)) - for k, v in sorted(get_all_pytan_loggers().iteritems()): + for k, v in sorted(get_all_pytan_loggers().items()): spew("setup_console_logging(): add handler: {0}/{0.name} to logger {1}".format(ch, k)) v.addHandler(ch) @@ -316,7 +322,7 @@ def change_console_format(debug=False): * False : set logging format for console handler to :data:`pytan.constants.INFO_FORMAT` * True : set logging format for console handler to :data:`pytan.constants.DEBUG_FORMAT` """ - for k, v in sorted(get_all_pytan_loggers().iteritems()): + for k, v in sorted(get_all_pytan_loggers().items()): for handler in v.handlers: if handler.name == 'console': if debug: @@ -341,7 +347,7 @@ def set_log_levels(loglevel=0): for logmap in pytan.constants.LOG_LEVEL_MAPS: if loglevel >= logmap[0]: - for lname, llevel in logmap[1].iteritems(): + for lname, llevel in logmap[1].items(): spew('set_log_levels(): setting %s to %s' % (lname, llevel)) logging.getLogger(lname).setLevel(getattr(logging, llevel)) @@ -349,19 +355,19 @@ def set_log_levels(loglevel=0): def print_log_levels(): """Prints info about each loglevel from :data:`pytan.constants.LOG_LEVEL_MAPS`""" for logmap in pytan.constants.LOG_LEVEL_MAPS: - print "Logging level: {} - Description: {}".format(logmap[0], logmap[2]) + print("Logging level: {} - Description: {}".format(logmap[0], logmap[2])) if logmap[0] == 0: - for k, v in sorted(get_all_pytan_loggers().iteritems()): - print "\tLogger {!r} will only show WARNING and above".format(k) + for k, v in sorted(get_all_pytan_loggers().items()): + print("\tLogger {!r} will only show WARNING and above".format(k)) continue - for lname, llevel in logmap[1].iteritems(): - print "\tLogger {!r} will show {} and above".format(lname, llevel) + for lname, llevel in logmap[1].items(): + print("\tLogger {!r} will show {} and above".format(lname, llevel)) def set_all_loglevels(level='DEBUG'): """Sets all loggers that the logging system knows about to a given logger level""" - for k, v in sorted(get_all_pytan_loggers().iteritems()): + for k, v in sorted(get_all_pytan_loggers().items()): spew("set_all_loglevels(): setting pytan logger '{}' to {}".format(k, level)) v.setLevel(getattr(logging, level)) v.propagate = False @@ -372,7 +378,7 @@ def get_all_pytan_loggers(): Creates loggers for any pytan loggers that do not exist yet """ - pytan_log_strings = [x[1].keys() for x in pytan.constants.LOG_LEVEL_MAPS if x[1].keys()] + pytan_log_strings = [list(x[1].keys()) for x in pytan.constants.LOG_LEVEL_MAPS if list(x[1].keys())] pytan_log_strings = sorted(list(set(list(itertools.chain(*pytan_log_strings))))) pytan_loggers = {x: logging.getLogger(x) for x in pytan_log_strings} @@ -382,7 +388,7 @@ def get_all_pytan_loggers(): def get_all_loggers(): """Gets all loggers currently known to pythons logging system`""" logger_dict = logging.Logger.manager.loggerDict - all_loggers = {k: v for k, v in logger_dict.iteritems() if isinstance(v, logging.Logger)} + all_loggers = {k: v for k, v in logger_dict.items() if isinstance(v, logging.Logger)} all_loggers['root'] = logging.getLogger() return all_loggers @@ -1432,7 +1438,7 @@ def build_param_objlist(obj, user_params, delim='', derive_def=False, empty_ok=F manuallog.debug(dbg(p_key, obj_name, param_obj)) # ADD SUPPORT FOR PARAMS THAT ARE NOT IN OBJECT - for k, v in user_params.iteritems(): + for k, v in user_params.items(): if k in processed: continue processed.append(k) @@ -1620,13 +1626,13 @@ def apply_options_obj(options, obj, dest): if not options: return obj - for k, v in options.iteritems(): + for k, v in options.items(): for om in pytan.constants.OPTION_MAPS: if om['destination'] != dest: continue - om_attrs = om.get('attrs', {}).keys() + om_attrs = list(om.get('attrs', {}).keys()) om_attr = om.get('attr', '') if om_attr: @@ -1731,7 +1737,7 @@ def chk_def_key(def_dict, key, keytypes, keysubtypes=None, req=False): return if is_dict(val): - subtypes = [type(x) for x in val.values()] + subtypes = [type(x) for x in list(val.values())] else: subtypes = [type(x) for x in val] @@ -1780,7 +1786,7 @@ def get_q_obj_map(qtype): obj_map = pytan.constants.Q_OBJ_MAP[qtype.lower()] except KeyError: err = "{} not a valid question type, must be one of {!r}".format - raise pytan.exceptions.HandlerError(err(qtype, pytan.constants.Q_OBJ_MAP.keys())) + raise pytan.exceptions.HandlerError(err(qtype, list(pytan.constants.Q_OBJ_MAP.keys()))) return obj_map @@ -1801,7 +1807,7 @@ def get_obj_map(objtype): obj_map = pytan.constants.GET_OBJ_MAP[objtype.lower()] except KeyError: err = "{} not a valid object to get, must be one of {!r}".format - raise pytan.exceptions.HandlerError(err(objtype, pytan.constants.GET_OBJ_MAP.keys())) + raise pytan.exceptions.HandlerError(err(objtype, list(pytan.constants.GET_OBJ_MAP.keys()))) return obj_map @@ -1864,7 +1870,7 @@ def wrap(*args, **kwargs): time2 = datetime.datetime.utcnow() elapsed = time2 - time1 m = '{}() TIMING start: {}, end: {}, elapsed: {}'.format - timinglog.debug(m(f.func_name, time1, time2, elapsed)) + timinglog.debug(m(f.__name__, time1, time2, elapsed)) return ret return wrap @@ -2043,7 +2049,7 @@ def get_percentage(part, whole): """ if 0 in [part, whole]: return float(0) - return 100 * (float(part) / float(whole)) + return 100 * ((float(part) / float(whole))) def calc_percent(percent, whole): @@ -2058,7 +2064,7 @@ def calc_percent(percent, whole): ------- int : the percentage of whole """ - return int((percent * whole) / 100.0) + return int((float(percent * whole) / 100.0)) def plugin_zip(p): @@ -2075,7 +2081,7 @@ def plugin_zip(p): * the columns and result_rows of the sql_response in Plugin object zipped up into a dictionary """ return [ - dict(zip(p.sql_response.columns, x)) for x in p.sql_response.result_row + dict(list(zip(p.sql_response.columns, x))) for x in p.sql_response.result_row ] @@ -2136,7 +2142,7 @@ def parse_versioning(server_version): try: v_parts = server_version.split('.') v_ints = [int(x) for x in v_parts] - v_dict = dict(zip(v_keys, v_ints)) + v_dict = dict(list(zip(v_keys, v_ints))) except: m = ( "Unable to parse major, minor, revision, and build from server " @@ -2185,7 +2191,7 @@ def vig_encode(key, string): """ string = str(string) encoded_chars = [] - for i in xrange(len(string)): + for i in range(len(string)): key_c = key[i % len(key)] encoded_c = chr(ord(string[i]) + ord(key_c) % 256) encoded_chars.append(encoded_c) @@ -2224,7 +2230,7 @@ def vig_decode(key, string): v_string = base64.urlsafe_b64decode(string) decoded_chars = [] - for i in xrange(len(v_string)): + for i in range(len(v_string)): key_c = key[i % len(key)] encoded_c = chr(abs(ord(v_string[i]) - ord(key_c) % 256)) decoded_chars.append(encoded_c) diff --git a/lib/pytan/xml_clean.py b/lib/pytan/xml_clean.py index 7b782a24..968111d3 100644 --- a/lib/pytan/xml_clean.py +++ b/lib/pytan/xml_clean.py @@ -3,6 +3,11 @@ # ex: set tabstop=4 # Please do not change the two lines above. See PEP 8, PEP 263. """This is a regex based XML cleaner that will replace unsupported characters""" +from __future__ import unicode_literals +from builtins import hex +from builtins import chr +from builtins import str +from builtins import range import sys import re import logging @@ -74,21 +79,21 @@ int('{}FFFF'.format(i), 0), ]) -XML_1_0_VALID_UNI = ['-'.join([unichr(y) for y in x]) for x in XML_1_0_VALID_HEX] -INVALID_UNICODE_RAW_RE = ur'[^{}]'.format(''.join(XML_1_0_VALID_UNI)) +XML_1_0_VALID_UNI = ['-'.join([chr(y) for y in x]) for x in XML_1_0_VALID_HEX] +INVALID_UNICODE_RAW_RE = r'[^{}]'.format(''.join(XML_1_0_VALID_UNI)) """The raw regex string to use when replacing invalid characters""" INVALID_UNICODE_RE = re.compile(INVALID_UNICODE_RAW_RE, re.U) """The regex object to use when replacing invalid characters""" -XML_1_0_RESTRICTED_UNI = ['-'.join([unichr(y) for y in x]) for x in XML_1_0_RESTRICTED_HEX] -RESTRICTED_UNICODE_RAW_RE = ur'[{}]'.format(''.join(XML_1_0_RESTRICTED_UNI)) +XML_1_0_RESTRICTED_UNI = ['-'.join([chr(y) for y in x]) for x in XML_1_0_RESTRICTED_HEX] +RESTRICTED_UNICODE_RAW_RE = r'[{}]'.format(''.join(XML_1_0_RESTRICTED_UNI)) """The raw regex string to use when replacing restricted characters""" RESTRICTED_UNICODE_RE = re.compile(RESTRICTED_UNICODE_RAW_RE, re.U) """The regex object to use when replacing restricted characters""" -DEFAULT_REPLACEMENT = u'\uFFFD' +DEFAULT_REPLACEMENT = '\uFFFD' """The default character to use when replacing characters""" @@ -168,7 +173,7 @@ def xml_cleaner(s, encoding='utf-8', clean_restricted=True, log_clean_messages=T str * the cleaned version of `s` """ - if type(s) == str: + if type(s) == bytes: try: # if orig_str is not unicode, decode the string into unicode with encoding s = s.decode(encoding, 'xmlcharrefreplace') @@ -186,7 +191,7 @@ def xml_cleaner(s, encoding='utf-8', clean_restricted=True, log_clean_messages=T "ignoring errors" ).format mylog.warning(m()) - s = unicode(s, 'utf-8', errors='ignore') + s = str(s, 'utf-8', errors='ignore') # encode the string as utf-8 pass1 = s.encode('utf-8', 'xmlcharrefreplace') diff --git a/lib/taniumpy/object_types/action.py b/lib/taniumpy/object_types/action.py index 1b505805..ca071bd8 100644 --- a/lib/taniumpy/object_types/action.py +++ b/lib/taniumpy/object_types/action.py @@ -59,12 +59,12 @@ def __init__(self): self.metadata = None -from group import Group -from group import Group -from package_spec import PackageSpec -from user import User -from user import User -from saved_question import SavedQuestion -from saved_action import SavedAction -from metadata_list import MetadataList +from .group import Group +from .group import Group +from .package_spec import PackageSpec +from .user import User +from .user import User +from .saved_question import SavedQuestion +from .saved_action import SavedAction +from .metadata_list import MetadataList diff --git a/lib/taniumpy/object_types/action_list.py b/lib/taniumpy/object_types/action_list.py index a24b6c9d..176101a2 100644 --- a/lib/taniumpy/object_types/action_list.py +++ b/lib/taniumpy/object_types/action_list.py @@ -25,7 +25,7 @@ def __init__(self): self.cache_info = None self.action = [] -from action_list_info import ActionListInfo -from action import Action -from cache_info import CacheInfo +from .action_list_info import ActionListInfo +from .action import Action +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/action_stop.py b/lib/taniumpy/object_types/action_stop.py index e297549f..b35c5418 100644 --- a/lib/taniumpy/object_types/action_stop.py +++ b/lib/taniumpy/object_types/action_stop.py @@ -23,5 +23,5 @@ def __init__(self): self.action = None -from action import Action +from .action import Action diff --git a/lib/taniumpy/object_types/action_stop_list.py b/lib/taniumpy/object_types/action_stop_list.py index 28a883e5..9f15dda3 100644 --- a/lib/taniumpy/object_types/action_stop_list.py +++ b/lib/taniumpy/object_types/action_stop_list.py @@ -23,5 +23,5 @@ def __init__(self): self.action_stop = [] -from action_stop import ActionStop +from .action_stop import ActionStop diff --git a/lib/taniumpy/object_types/all_objects.py b/lib/taniumpy/object_types/all_objects.py index e30e704c..3164b5d0 100644 --- a/lib/taniumpy/object_types/all_objects.py +++ b/lib/taniumpy/object_types/all_objects.py @@ -1,89 +1,89 @@ -from action import Action -from action_list import ActionList -from action_list_info import ActionListInfo -from action_stop import ActionStop -from action_stop_list import ActionStopList -from archived_question import ArchivedQuestion -from archived_question_list import ArchivedQuestionList -from audit_data import AuditData -from cache_filter import CacheFilter -from cache_filter_list import CacheFilterList -from cache_info import CacheInfo -from client_count import ClientCount -from client_status import ClientStatus -from computer_group import ComputerGroup -from computer_group_list import ComputerGroupList -from computer_group_spec import ComputerGroupSpec -from computer_spec_list import ComputerSpecList -from error_list import ErrorList -from filter import Filter -from filter_list import FilterList -from group import Group -from group_list import GroupList -from metadata_item import MetadataItem -from metadata_list import MetadataList -from object_list import ObjectList -from options import Options -from package_file import PackageFile -from package_file_list import PackageFileList -from package_file_status import PackageFileStatus -from package_file_status_list import PackageFileStatusList -from package_file_template import PackageFileTemplate -from package_file_template_list import PackageFileTemplateList -from package_spec import PackageSpec -from package_spec_list import PackageSpecList -from parameter import Parameter -from parameter_list import ParameterList -from parse_job import ParseJob -from parse_job_list import ParseJobList -from parse_result import ParseResult -from parse_result_group import ParseResultGroup -from parse_result_group_list import ParseResultGroupList -from parse_result_list import ParseResultList -from permission_list import PermissionList -from plugin import Plugin -from plugin_argument import PluginArgument -from plugin_argument_list import PluginArgumentList -from plugin_command_list import PluginCommandList -from plugin_list import PluginList -from plugin_schedule import PluginSchedule -from plugin_schedule_list import PluginScheduleList -from plugin_sql import PluginSql -from plugin_sql_column import PluginSqlColumn -from plugin_sql_result import PluginSqlResult -from question import Question -from question_list import QuestionList -from question_list_info import QuestionListInfo -from saved_action import SavedAction -from saved_action_approval import SavedActionApproval -from saved_action_list import SavedActionList -from saved_action_policy import SavedActionPolicy -from saved_action_row_id_list import SavedActionRowIdList -from saved_question import SavedQuestion -from saved_question_list import SavedQuestionList -from select import Select -from select_list import SelectList -from sensor import Sensor -from sensor_list import SensorList -from sensor_query import SensorQuery -from sensor_query_list import SensorQueryList -from sensor_subcolumn import SensorSubcolumn -from sensor_subcolumn_list import SensorSubcolumnList -from soap_error import SoapError -from string_hint_list import StringHintList -from system_setting import SystemSetting -from system_setting_list import SystemSettingList -from system_status_aggregate import SystemStatusAggregate -from system_status_list import SystemStatusList -from upload_file import UploadFile -from upload_file_list import UploadFileList -from upload_file_status import UploadFileStatus -from user import User -from user_list import UserList -from user_role import UserRole -from user_role_list import UserRoleList -from version_aggregate import VersionAggregate -from version_aggregate_list import VersionAggregateList -from white_listed_url import WhiteListedUrl -from white_listed_url_list import WhiteListedUrlList -from xml_error import XmlError +from .action import Action +from .action_list import ActionList +from .action_list_info import ActionListInfo +from .action_stop import ActionStop +from .action_stop_list import ActionStopList +from .archived_question import ArchivedQuestion +from .archived_question_list import ArchivedQuestionList +from .audit_data import AuditData +from .cache_filter import CacheFilter +from .cache_filter_list import CacheFilterList +from .cache_info import CacheInfo +from .client_count import ClientCount +from .client_status import ClientStatus +from .computer_group import ComputerGroup +from .computer_group_list import ComputerGroupList +from .computer_group_spec import ComputerGroupSpec +from .computer_spec_list import ComputerSpecList +from .error_list import ErrorList +from .filter import Filter +from .filter_list import FilterList +from .group import Group +from .group_list import GroupList +from .metadata_item import MetadataItem +from .metadata_list import MetadataList +from .object_list import ObjectList +from .options import Options +from .package_file import PackageFile +from .package_file_list import PackageFileList +from .package_file_status import PackageFileStatus +from .package_file_status_list import PackageFileStatusList +from .package_file_template import PackageFileTemplate +from .package_file_template_list import PackageFileTemplateList +from .package_spec import PackageSpec +from .package_spec_list import PackageSpecList +from .parameter import Parameter +from .parameter_list import ParameterList +from .parse_job import ParseJob +from .parse_job_list import ParseJobList +from .parse_result import ParseResult +from .parse_result_group import ParseResultGroup +from .parse_result_group_list import ParseResultGroupList +from .parse_result_list import ParseResultList +from .permission_list import PermissionList +from .plugin import Plugin +from .plugin_argument import PluginArgument +from .plugin_argument_list import PluginArgumentList +from .plugin_command_list import PluginCommandList +from .plugin_list import PluginList +from .plugin_schedule import PluginSchedule +from .plugin_schedule_list import PluginScheduleList +from .plugin_sql import PluginSql +from .plugin_sql_column import PluginSqlColumn +from .plugin_sql_result import PluginSqlResult +from .question import Question +from .question_list import QuestionList +from .question_list_info import QuestionListInfo +from .saved_action import SavedAction +from .saved_action_approval import SavedActionApproval +from .saved_action_list import SavedActionList +from .saved_action_policy import SavedActionPolicy +from .saved_action_row_id_list import SavedActionRowIdList +from .saved_question import SavedQuestion +from .saved_question_list import SavedQuestionList +from .select import Select +from .select_list import SelectList +from .sensor import Sensor +from .sensor_list import SensorList +from .sensor_query import SensorQuery +from .sensor_query_list import SensorQueryList +from .sensor_subcolumn import SensorSubcolumn +from .sensor_subcolumn_list import SensorSubcolumnList +from .soap_error import SoapError +from .string_hint_list import StringHintList +from .system_setting import SystemSetting +from .system_setting_list import SystemSettingList +from .system_status_aggregate import SystemStatusAggregate +from .system_status_list import SystemStatusList +from .upload_file import UploadFile +from .upload_file_list import UploadFileList +from .upload_file_status import UploadFileStatus +from .user import User +from .user_list import UserList +from .user_role import UserRole +from .user_role_list import UserRoleList +from .version_aggregate import VersionAggregate +from .version_aggregate_list import VersionAggregateList +from .white_listed_url import WhiteListedUrl +from .white_listed_url_list import WhiteListedUrlList +from .xml_error import XmlError diff --git a/lib/taniumpy/object_types/archived_question_list.py b/lib/taniumpy/object_types/archived_question_list.py index d3f4550b..518238ac 100644 --- a/lib/taniumpy/object_types/archived_question_list.py +++ b/lib/taniumpy/object_types/archived_question_list.py @@ -23,5 +23,5 @@ def __init__(self): self.archived_question = [] -from archived_question import ArchivedQuestion +from .archived_question import ArchivedQuestion diff --git a/lib/taniumpy/object_types/base.py b/lib/taniumpy/object_types/base.py index ac002e17..14af8b08 100644 --- a/lib/taniumpy/object_types/base.py +++ b/lib/taniumpy/object_types/base.py @@ -1,10 +1,14 @@ +from __future__ import absolute_import # Copyright (c) 2015 Tanium Inc # +from builtins import str +from builtins import object + +import re import csv import io import json -import re try: import xml.etree.cElementTree as ET except: @@ -41,7 +45,7 @@ def __getitem__(self, n): """ if len(self._list_properties) == 1: - return getattr(self, self._list_properties.items()[0][0])[n] + return getattr(self, list(self._list_properties.items())[0][0])[n] else: raise Exception( 'Not simply a list type, __getitem__ not supported' @@ -55,7 +59,7 @@ def __len__(self): """ if len(self._list_properties) == 1: - return len(getattr(self, self._list_properties.items()[0][0])) + return len(getattr(self, list(self._list_properties.items())[0][0])) else: raise Exception('Not simply a list type, len() not supported') @@ -102,7 +106,7 @@ def append(self, n): """ if len(self._list_properties) == 1: - getattr(self, self._list_properties.items()[0][0]).append(n) + getattr(self, list(self._list_properties.items())[0][0]).append(n) else: raise Exception( 'Not simply a list type, append not supported' @@ -117,7 +121,7 @@ def toSOAPElement(self, minimal=False): # noqa el.text = str(val) if val is not None or not minimal: root.append(el) - for p, t in self._complex_properties.iteritems(): + for p, t in self._complex_properties.items(): val = getattr(self, p) if val is not None or not minimal: if val is not None and not isinstance(val, t): @@ -136,7 +140,7 @@ def toSOAPElement(self, minimal=False): # noqa root.append(el) if val is not None: el.append(str(val)) - for p, t in self._list_properties.iteritems(): + for p, t in self._list_properties.items(): vals = getattr(self, p) if not vals: continue @@ -162,13 +166,13 @@ def toSOAPBody(self, minimal=False): # noqa @classmethod def fromSOAPElement(cls, el): # noqa result = cls() - for p, t in result._simple_properties.iteritems(): + for p, t in result._simple_properties.items(): pel = el.find("./{}".format(p)) if pel is not None and pel.text: setattr(result, p, t(pel.text)) else: setattr(result, p, None) - for p, t in result._complex_properties.iteritems(): + for p, t in result._complex_properties.items(): elems = el.findall('./{}'.format(p)) if len(elems) > 1: raise Exception( @@ -182,7 +186,7 @@ def fromSOAPElement(cls, el): # noqa ) else: setattr(result, p, None) - for p, t in result._list_properties.iteritems(): + for p, t in result._list_properties.items(): setattr(result, p, []) elems = el.findall('./{}'.format(p)) for elem in elems: @@ -207,7 +211,7 @@ def fromSOAPBody(cls, body): # noqa return None # no results, not an error # based on the tag of the matching element, # find the appropriate tanium_type and deserialize - from object_list_types import OBJECT_LIST_TYPES + from .object_list_types import OBJECT_LIST_TYPES if result_object.tag not in OBJECT_LIST_TYPES: raise Exception('Unknown type {}'.format(result_object.tag)) r = OBJECT_LIST_TYPES[result_object.tag].fromSOAPElement(result_object) @@ -223,7 +227,7 @@ def flatten_jsonable(self, val, prefix): '_'.join([prefix, str(i)])) ) elif type(val) == dict: - for k, v in val.iteritems(): + for k, v in val.items(): result.update(self.flatten_jsonable( v, '_'.join([prefix, k] if prefix else k)) @@ -245,7 +249,7 @@ def to_flat_dict(self, prefix='', explode_json_string_values=False): """ result = {} prop_start = '{}_'.format(prefix) if prefix else '' - for p, _ in self._simple_properties.iteritems(): + for p, _ in self._simple_properties.items(): val = getattr(self, p) if val is not None: json_out = None @@ -255,14 +259,14 @@ def to_flat_dict(self, prefix='', explode_json_string_values=False): result.update(json_out) else: result['{}{}'.format(prop_start, p)] = val - for p, _ in self._complex_properties.iteritems(): + for p, _ in self._complex_properties.items(): val = getattr(self, p) if val is not None: result.update(val.to_flat_dict( prefix='{}{}'.format(prop_start, p), explode_json_string_values=explode_json_string_values, )) - for p, _ in self._list_properties.iteritems(): + for p, _ in self._list_properties.items(): val = getattr(self, p) if val is not None: for ind, item in enumerate(val): @@ -286,7 +290,7 @@ def to_jsonable(self, explode_json_string_values=False, include_type=True): result = {} if include_type: result['_type'] = self._soap_tag - for p, _ in self._simple_properties.iteritems(): + for p, _ in self._simple_properties.items(): val = getattr(self, p) if val is not None: json_out = None @@ -296,13 +300,13 @@ def to_jsonable(self, explode_json_string_values=False, include_type=True): result[p] = json_out else: result[p] = val - for p, _ in self._complex_properties.iteritems(): + for p, _ in self._complex_properties.items(): val = getattr(self, p) if val is not None: result[p] = val.to_jsonable( explode_json_string_values=explode_json_string_values, include_type=include_type) - for p, _ in self._list_properties.iteritems(): + for p, _ in self._list_properties.items(): val = getattr(self, p) if val is not None: result[p] = [] @@ -340,15 +344,15 @@ def to_json(jsonable, **kwargs): def _from_json(cls, jsonable): """Private helper to parse from JSON after type is instantiated""" result = cls() - for p, t in result._simple_properties.iteritems(): + for p, t in result._simple_properties.items(): val = jsonable.get(p) if val is not None: setattr(result, p, t(val)) - for p, t in result._complex_properties.iteritems(): + for p, t in result._complex_properties.items(): val = jsonable.get(p) if val is not None: setattr(result, p, BaseType.from_jsonable(val)) - for p, t in result._list_properties.iteritems(): + for p, t in result._list_properties.items(): val = jsonable.get(p) if val is not None: vals = [] @@ -380,7 +384,7 @@ def from_jsonable(jsonable): elif type(jsonable) == dict: if not jsonable.get('_type'): raise Exception('JSON must contain _type to be deserialized') - from object_list_types import OBJECT_LIST_TYPES + from .object_list_types import OBJECT_LIST_TYPES if jsonable['_type'] not in OBJECT_LIST_TYPES: raise Exception('Unknown type {}'.format(jsonable['_type'])) result = OBJECT_LIST_TYPES[jsonable['_type']]._from_json(jsonable) diff --git a/lib/taniumpy/object_types/cache_filter_list.py b/lib/taniumpy/object_types/cache_filter_list.py index f2b61c60..0513973b 100644 --- a/lib/taniumpy/object_types/cache_filter_list.py +++ b/lib/taniumpy/object_types/cache_filter_list.py @@ -23,5 +23,5 @@ def __init__(self): self.filter = [] -from cache_filter import CacheFilter +from .cache_filter import CacheFilter diff --git a/lib/taniumpy/object_types/cache_info.py b/lib/taniumpy/object_types/cache_info.py index be0fae3b..79429c5f 100644 --- a/lib/taniumpy/object_types/cache_info.py +++ b/lib/taniumpy/object_types/cache_info.py @@ -31,5 +31,5 @@ def __init__(self): self.errors = None -from error_list import ErrorList +from .error_list import ErrorList diff --git a/lib/taniumpy/object_types/computer_group.py b/lib/taniumpy/object_types/computer_group.py index 888d5086..125800a8 100644 --- a/lib/taniumpy/object_types/computer_group.py +++ b/lib/taniumpy/object_types/computer_group.py @@ -27,5 +27,5 @@ def __init__(self): self.computer_specs = None -from computer_spec_list import ComputerSpecList +from .computer_spec_list import ComputerSpecList diff --git a/lib/taniumpy/object_types/computer_group_list.py b/lib/taniumpy/object_types/computer_group_list.py index c7141a61..1aa1ff8c 100644 --- a/lib/taniumpy/object_types/computer_group_list.py +++ b/lib/taniumpy/object_types/computer_group_list.py @@ -23,6 +23,6 @@ def __init__(self): self.cache_info = None self.computer_group = [] -from computer_group import ComputerGroup -from cache_info import CacheInfo +from .computer_group import ComputerGroup +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/computer_spec_list.py b/lib/taniumpy/object_types/computer_spec_list.py index 5bf6b596..8b965f29 100644 --- a/lib/taniumpy/object_types/computer_spec_list.py +++ b/lib/taniumpy/object_types/computer_spec_list.py @@ -23,6 +23,6 @@ def __init__(self): self.cache_info = None self.computer_spec = [] -from computer_group_spec import ComputerGroupSpec -from cache_info import CacheInfo +from .computer_group_spec import ComputerGroupSpec +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/error_list.py b/lib/taniumpy/object_types/error_list.py index 6d6c2986..6241b99f 100644 --- a/lib/taniumpy/object_types/error_list.py +++ b/lib/taniumpy/object_types/error_list.py @@ -23,5 +23,5 @@ def __init__(self): self.error = [] -from xml_error import XmlError +from .xml_error import XmlError diff --git a/lib/taniumpy/object_types/filter.py b/lib/taniumpy/object_types/filter.py index e01e0389..49158e78 100644 --- a/lib/taniumpy/object_types/filter.py +++ b/lib/taniumpy/object_types/filter.py @@ -57,5 +57,5 @@ def __init__(self): self.sensor = None -from sensor import Sensor +from .sensor import Sensor diff --git a/lib/taniumpy/object_types/filter_list.py b/lib/taniumpy/object_types/filter_list.py index 90cd8a15..bbbb5e5e 100644 --- a/lib/taniumpy/object_types/filter_list.py +++ b/lib/taniumpy/object_types/filter_list.py @@ -23,5 +23,5 @@ def __init__(self): self.filter = [] -from filter import Filter +from .filter import Filter diff --git a/lib/taniumpy/object_types/group.py b/lib/taniumpy/object_types/group.py index 98e45b17..caf2a2bd 100644 --- a/lib/taniumpy/object_types/group.py +++ b/lib/taniumpy/object_types/group.py @@ -41,7 +41,7 @@ def __init__(self): self.parameters = None -from group_list import GroupList -from filter_list import FilterList -from parameter_list import ParameterList +from .group_list import GroupList +from .filter_list import FilterList +from .parameter_list import ParameterList diff --git a/lib/taniumpy/object_types/group_list.py b/lib/taniumpy/object_types/group_list.py index bab7056a..9b4f915f 100644 --- a/lib/taniumpy/object_types/group_list.py +++ b/lib/taniumpy/object_types/group_list.py @@ -23,5 +23,5 @@ def __init__(self): self.group = [] -from group import Group +from .group import Group diff --git a/lib/taniumpy/object_types/metadata_list.py b/lib/taniumpy/object_types/metadata_list.py index a7b7f8f9..e4a10103 100644 --- a/lib/taniumpy/object_types/metadata_list.py +++ b/lib/taniumpy/object_types/metadata_list.py @@ -23,5 +23,5 @@ def __init__(self): self.item = [] -from metadata_item import MetadataItem +from .metadata_item import MetadataItem diff --git a/lib/taniumpy/object_types/object_list.py b/lib/taniumpy/object_types/object_list.py index e4566681..42f7902a 100644 --- a/lib/taniumpy/object_types/object_list.py +++ b/lib/taniumpy/object_types/object_list.py @@ -1,7 +1,7 @@ # Copyright (c) 2015 Tanium Inc # -# Generated from console.wsdl version 0.0.1 +# Generated from .console.wsdl version 0.0.1 # # @@ -107,48 +107,48 @@ def __init__(self): self.soap_error = [] self.computer_group = [] -from question import Question -from question_list import QuestionList -from group import Group -from group_list import GroupList -from saved_question import SavedQuestion -from saved_question_list import SavedQuestionList -from archived_question import ArchivedQuestion -from archived_question_list import ArchivedQuestionList -from parse_job import ParseJob -from parse_job_list import ParseJobList -from parse_result_group import ParseResultGroup -from parse_result_group_list import ParseResultGroupList -from action import Action -from action_list import ActionList -from saved_action import SavedAction -from saved_action_list import SavedActionList -from action_stop import ActionStop -from action_stop_list import ActionStopList -from package_spec import PackageSpec -from package_spec_list import PackageSpecList -from package_file import PackageFile -from package_file_list import PackageFileList -from sensor import Sensor -from sensor_list import SensorList -from user import User -from user_list import UserList -from user_role_list import UserRoleList -from client_status import ClientStatus -from system_setting import SystemSetting -from saved_action_approval import SavedActionApproval -from system_status_list import SystemStatusList -from system_setting_list import SystemSettingList -from client_count import ClientCount -from plugin import Plugin -from plugin_list import PluginList -from plugin_schedule import PluginSchedule -from plugin_schedule_list import PluginScheduleList -from white_listed_url import WhiteListedUrl -from white_listed_url_list import WhiteListedUrlList -from upload_file import UploadFile -from upload_file_status import UploadFileStatus -from soap_error import SoapError -from computer_group_list import ComputerGroupList -from computer_group import ComputerGroup +from .question import Question +from .question_list import QuestionList +from .group import Group +from .group_list import GroupList +from .saved_question import SavedQuestion +from .saved_question_list import SavedQuestionList +from .archived_question import ArchivedQuestion +from .archived_question_list import ArchivedQuestionList +from .parse_job import ParseJob +from .parse_job_list import ParseJobList +from .parse_result_group import ParseResultGroup +from .parse_result_group_list import ParseResultGroupList +from .action import Action +from .action_list import ActionList +from .saved_action import SavedAction +from .saved_action_list import SavedActionList +from .action_stop import ActionStop +from .action_stop_list import ActionStopList +from .package_spec import PackageSpec +from .package_spec_list import PackageSpecList +from .package_file import PackageFile +from .package_file_list import PackageFileList +from .sensor import Sensor +from .sensor_list import SensorList +from .user import User +from .user_list import UserList +from .user_role_list import UserRoleList +from .client_status import ClientStatus +from .system_setting import SystemSetting +from .saved_action_approval import SavedActionApproval +from .system_status_list import SystemStatusList +from .system_setting_list import SystemSettingList +from .client_count import ClientCount +from .plugin import Plugin +from .plugin_list import PluginList +from .plugin_schedule import PluginSchedule +from .plugin_schedule_list import PluginScheduleList +from .white_listed_url import WhiteListedUrl +from .white_listed_url_list import WhiteListedUrlList +from .upload_file import UploadFile +from .upload_file_status import UploadFileStatus +from .soap_error import SoapError +from .computer_group_list import ComputerGroupList +from .computer_group import ComputerGroup diff --git a/lib/taniumpy/object_types/object_list_types.py b/lib/taniumpy/object_types/object_list_types.py index a842e29c..131fb43c 100644 --- a/lib/taniumpy/object_types/object_list_types.py +++ b/lib/taniumpy/object_types/object_list_types.py @@ -1,90 +1,90 @@ -from action import Action -from action_stop import ActionStop -from action_stop_list import ActionStopList -from action_list import ActionList -from system_status_aggregate import SystemStatusAggregate -from archived_question import ArchivedQuestion -from archived_question_list import ArchivedQuestionList -from plugin_argument import PluginArgument -from plugin_argument_list import PluginArgumentList -from audit_data import AuditData -from cache_filter_list import CacheFilterList -from cache_info import CacheInfo -from client_count import ClientCount -from client_status import ClientStatus -from plugin_sql_column import PluginSqlColumn -from plugin_command_list import PluginCommandList -from computer_group import ComputerGroup -from computer_group_list import ComputerGroupList -from computer_group_spec import ComputerGroupSpec -from computer_spec_list import ComputerSpecList -from xml_error import XmlError -from error_list import ErrorList -from package_file import PackageFile -from upload_file_list import UploadFileList -from package_file_status_list import PackageFileStatusList -from package_file_template import PackageFileTemplate -from package_file_template_list import PackageFileTemplateList -from filter import Filter -from filter_list import FilterList -from group import Group -from group_list import GroupList -from question_list_info import QuestionListInfo -from metadata_item import MetadataItem -from metadata_list import MetadataList -from object_list import ObjectList -from options import Options -from package_file_list import PackageFileList -from package_spec import PackageSpec -from package_spec_list import PackageSpecList -from parameter import Parameter -from parameter_list import ParameterList -from parse_job import ParseJob -from parse_job_list import ParseJobList -from parse_result import ParseResult -from parse_result_group import ParseResultGroup -from parse_result_group_list import ParseResultGroupList -from parse_result_list import ParseResultList -from permission_list import PermissionList -from plugin import Plugin -from plugin_schedule import PluginSchedule -from plugin_schedule_list import PluginScheduleList -from plugin_list import PluginList -from saved_action_policy import SavedActionPolicy -from sensor_query_list import SensorQueryList -from sensor_query import SensorQuery -from question import Question -from question_list import QuestionList -from plugin_sql_result import PluginSqlResult -from user_role import UserRole -from user_role_list import UserRoleList -from saved_action_row_id_list import SavedActionRowIdList -from saved_action import SavedAction -from saved_action_approval import SavedActionApproval -from saved_action_list import SavedActionList -from saved_question import SavedQuestion -from saved_question_list import SavedQuestionList -from select import Select -from select_list import SelectList -from sensor import Sensor -from sensor_list import SensorList -from soap_error import SoapError -from plugin_sql import PluginSql -from package_file_status import PackageFileStatus -from string_hint_list import StringHintList -from sensor_subcolumn import SensorSubcolumn -from sensor_subcolumn_list import SensorSubcolumnList -from system_setting import SystemSetting -from system_setting_list import SystemSettingList -from system_status_list import SystemStatusList -from upload_file import UploadFile -from upload_file_status import UploadFileStatus -from user import User -from user_list import UserList -from version_aggregate import VersionAggregate -from version_aggregate_list import VersionAggregateList -from white_listed_url import WhiteListedUrl -from white_listed_url_list import WhiteListedUrlList +from .action import Action +from .action_stop import ActionStop +from .action_stop_list import ActionStopList +from .action_list import ActionList +from .system_status_aggregate import SystemStatusAggregate +from .archived_question import ArchivedQuestion +from .archived_question_list import ArchivedQuestionList +from .plugin_argument import PluginArgument +from .plugin_argument_list import PluginArgumentList +from .audit_data import AuditData +from .cache_filter_list import CacheFilterList +from .cache_info import CacheInfo +from .client_count import ClientCount +from .client_status import ClientStatus +from .plugin_sql_column import PluginSqlColumn +from .plugin_command_list import PluginCommandList +from .computer_group import ComputerGroup +from .computer_group_list import ComputerGroupList +from .computer_group_spec import ComputerGroupSpec +from .computer_spec_list import ComputerSpecList +from .xml_error import XmlError +from .error_list import ErrorList +from .package_file import PackageFile +from .upload_file_list import UploadFileList +from .package_file_status_list import PackageFileStatusList +from .package_file_template import PackageFileTemplate +from .package_file_template_list import PackageFileTemplateList +from .filter import Filter +from .filter_list import FilterList +from .group import Group +from .group_list import GroupList +from .question_list_info import QuestionListInfo +from .metadata_item import MetadataItem +from .metadata_list import MetadataList +from .object_list import ObjectList +from .options import Options +from .package_file_list import PackageFileList +from .package_spec import PackageSpec +from .package_spec_list import PackageSpecList +from .parameter import Parameter +from .parameter_list import ParameterList +from .parse_job import ParseJob +from .parse_job_list import ParseJobList +from .parse_result import ParseResult +from .parse_result_group import ParseResultGroup +from .parse_result_group_list import ParseResultGroupList +from .parse_result_list import ParseResultList +from .permission_list import PermissionList +from .plugin import Plugin +from .plugin_schedule import PluginSchedule +from .plugin_schedule_list import PluginScheduleList +from .plugin_list import PluginList +from .saved_action_policy import SavedActionPolicy +from .sensor_query_list import SensorQueryList +from .sensor_query import SensorQuery +from .question import Question +from .question_list import QuestionList +from .plugin_sql_result import PluginSqlResult +from .user_role import UserRole +from .user_role_list import UserRoleList +from .saved_action_row_id_list import SavedActionRowIdList +from .saved_action import SavedAction +from .saved_action_approval import SavedActionApproval +from .saved_action_list import SavedActionList +from .saved_question import SavedQuestion +from .saved_question_list import SavedQuestionList +from .select import Select +from .select_list import SelectList +from .sensor import Sensor +from .sensor_list import SensorList +from .soap_error import SoapError +from .plugin_sql import PluginSql +from .package_file_status import PackageFileStatus +from .string_hint_list import StringHintList +from .sensor_subcolumn import SensorSubcolumn +from .sensor_subcolumn_list import SensorSubcolumnList +from .system_setting import SystemSetting +from .system_setting_list import SystemSettingList +from .system_status_list import SystemStatusList +from .upload_file import UploadFile +from .upload_file_status import UploadFileStatus +from .user import User +from .user_list import UserList +from .version_aggregate import VersionAggregate +from .version_aggregate_list import VersionAggregateList +from .white_listed_url import WhiteListedUrl +from .white_listed_url_list import WhiteListedUrlList OBJECT_LIST_TYPES = { diff --git a/lib/taniumpy/object_types/options.py b/lib/taniumpy/object_types/options.py index b3e01894..d660a9fd 100644 --- a/lib/taniumpy/object_types/options.py +++ b/lib/taniumpy/object_types/options.py @@ -95,5 +95,5 @@ def __init__(self): self.cache_filters = None -from cache_filter_list import CacheFilterList +from .cache_filter_list import CacheFilterList diff --git a/lib/taniumpy/object_types/package_file.py b/lib/taniumpy/object_types/package_file.py index 18cd1d6e..cfd40c1f 100644 --- a/lib/taniumpy/object_types/package_file.py +++ b/lib/taniumpy/object_types/package_file.py @@ -49,5 +49,5 @@ def __init__(self): self.file_status = None -from package_file_status_list import PackageFileStatusList +from .package_file_status_list import PackageFileStatusList diff --git a/lib/taniumpy/object_types/package_file_list.py b/lib/taniumpy/object_types/package_file_list.py index 37d0df92..2eb70ab6 100644 --- a/lib/taniumpy/object_types/package_file_list.py +++ b/lib/taniumpy/object_types/package_file_list.py @@ -23,5 +23,5 @@ def __init__(self): self.file = [] -from package_file import PackageFile +from .package_file import PackageFile diff --git a/lib/taniumpy/object_types/package_file_status_list.py b/lib/taniumpy/object_types/package_file_status_list.py index a8410e49..66c46f25 100644 --- a/lib/taniumpy/object_types/package_file_status_list.py +++ b/lib/taniumpy/object_types/package_file_status_list.py @@ -23,5 +23,5 @@ def __init__(self): self.status = [] -from package_file_status import PackageFileStatus +from .package_file_status import PackageFileStatus diff --git a/lib/taniumpy/object_types/package_file_template_list.py b/lib/taniumpy/object_types/package_file_template_list.py index f551b38c..ad889a1b 100644 --- a/lib/taniumpy/object_types/package_file_template_list.py +++ b/lib/taniumpy/object_types/package_file_template_list.py @@ -23,5 +23,5 @@ def __init__(self): self.file_template = [] -from package_file_template import PackageFileTemplate +from .package_file_template import PackageFileTemplate diff --git a/lib/taniumpy/object_types/package_spec.py b/lib/taniumpy/object_types/package_spec.py index bd0b95df..a7486e58 100644 --- a/lib/taniumpy/object_types/package_spec.py +++ b/lib/taniumpy/object_types/package_spec.py @@ -71,10 +71,10 @@ def __init__(self): self.metadata = None -from package_file_list import PackageFileList -from package_file_template_list import PackageFileTemplateList -from group import Group -from parameter_list import ParameterList -from sensor_list import SensorList -from metadata_list import MetadataList +from .package_file_list import PackageFileList +from .package_file_template_list import PackageFileTemplateList +from .group import Group +from .parameter_list import ParameterList +from .sensor_list import SensorList +from .metadata_list import MetadataList diff --git a/lib/taniumpy/object_types/package_spec_list.py b/lib/taniumpy/object_types/package_spec_list.py index 66715036..6acd676a 100644 --- a/lib/taniumpy/object_types/package_spec_list.py +++ b/lib/taniumpy/object_types/package_spec_list.py @@ -23,6 +23,6 @@ def __init__(self): self.cache_info = None self.package_spec = [] -from package_spec import PackageSpec -from cache_info import CacheInfo +from .package_spec import PackageSpec +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/parameter_list.py b/lib/taniumpy/object_types/parameter_list.py index c6e74e51..15e95eed 100644 --- a/lib/taniumpy/object_types/parameter_list.py +++ b/lib/taniumpy/object_types/parameter_list.py @@ -23,5 +23,5 @@ def __init__(self): self.parameter = [] -from parameter import Parameter +from .parameter import Parameter diff --git a/lib/taniumpy/object_types/parse_job_list.py b/lib/taniumpy/object_types/parse_job_list.py index 1f03bb53..70a45075 100644 --- a/lib/taniumpy/object_types/parse_job_list.py +++ b/lib/taniumpy/object_types/parse_job_list.py @@ -23,5 +23,5 @@ def __init__(self): self.parse_job = [] -from parse_job import ParseJob +from .parse_job import ParseJob diff --git a/lib/taniumpy/object_types/parse_result.py b/lib/taniumpy/object_types/parse_result.py index d398cf4d..a783a8f3 100644 --- a/lib/taniumpy/object_types/parse_result.py +++ b/lib/taniumpy/object_types/parse_result.py @@ -25,5 +25,5 @@ def __init__(self): self.parameters = None -from parameter_list import ParameterList +from .parameter_list import ParameterList diff --git a/lib/taniumpy/object_types/parse_result_group.py b/lib/taniumpy/object_types/parse_result_group.py index 729c5e70..b13bee2b 100644 --- a/lib/taniumpy/object_types/parse_result_group.py +++ b/lib/taniumpy/object_types/parse_result_group.py @@ -27,6 +27,6 @@ def __init__(self): self.question = None -from parse_result_list import ParseResultList -from question import Question +from .parse_result_list import ParseResultList +from .question import Question diff --git a/lib/taniumpy/object_types/parse_result_group_list.py b/lib/taniumpy/object_types/parse_result_group_list.py index 96c583f6..70b556ff 100644 --- a/lib/taniumpy/object_types/parse_result_group_list.py +++ b/lib/taniumpy/object_types/parse_result_group_list.py @@ -23,5 +23,5 @@ def __init__(self): self.parse_result_group = [] -from parse_result_group import ParseResultGroup +from .parse_result_group import ParseResultGroup diff --git a/lib/taniumpy/object_types/parse_result_list.py b/lib/taniumpy/object_types/parse_result_list.py index 5054404b..837c8c3c 100644 --- a/lib/taniumpy/object_types/parse_result_list.py +++ b/lib/taniumpy/object_types/parse_result_list.py @@ -23,5 +23,5 @@ def __init__(self): self.parse_result = [] -from parse_result import ParseResult +from .parse_result import ParseResult diff --git a/lib/taniumpy/object_types/plugin.py b/lib/taniumpy/object_types/plugin.py index acea8c8f..77e0380c 100644 --- a/lib/taniumpy/object_types/plugin.py +++ b/lib/taniumpy/object_types/plugin.py @@ -71,9 +71,9 @@ def __init__(self): self.permissions = None -from plugin_argument_list import PluginArgumentList -from plugin_sql import PluginSql -from metadata_list import MetadataList -from plugin_command_list import PluginCommandList -from permission_list import PermissionList +from .plugin_argument_list import PluginArgumentList +from .plugin_sql import PluginSql +from .metadata_list import MetadataList +from .plugin_command_list import PluginCommandList +from .permission_list import PermissionList diff --git a/lib/taniumpy/object_types/plugin_argument_list.py b/lib/taniumpy/object_types/plugin_argument_list.py index 53ddbe5f..a373b9de 100644 --- a/lib/taniumpy/object_types/plugin_argument_list.py +++ b/lib/taniumpy/object_types/plugin_argument_list.py @@ -23,5 +23,5 @@ def __init__(self): self.argument = [] -from plugin_argument import PluginArgument +from .plugin_argument import PluginArgument diff --git a/lib/taniumpy/object_types/plugin_list.py b/lib/taniumpy/object_types/plugin_list.py index f9545009..b4dd4a56 100644 --- a/lib/taniumpy/object_types/plugin_list.py +++ b/lib/taniumpy/object_types/plugin_list.py @@ -23,6 +23,6 @@ def __init__(self): self.cache_info = None self.plugin = [] -from plugin import Plugin -from cache_info import CacheInfo +from .plugin import Plugin +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/plugin_schedule.py b/lib/taniumpy/object_types/plugin_schedule.py index 11d11276..a04c84c6 100644 --- a/lib/taniumpy/object_types/plugin_schedule.py +++ b/lib/taniumpy/object_types/plugin_schedule.py @@ -59,7 +59,7 @@ def __init__(self): self.last_run_sql = None -from plugin_argument_list import PluginArgumentList -from user import User -from plugin_sql import PluginSql +from .plugin_argument_list import PluginArgumentList +from .user import User +from .plugin_sql import PluginSql diff --git a/lib/taniumpy/object_types/plugin_schedule_list.py b/lib/taniumpy/object_types/plugin_schedule_list.py index b1c88958..fbdc64c6 100644 --- a/lib/taniumpy/object_types/plugin_schedule_list.py +++ b/lib/taniumpy/object_types/plugin_schedule_list.py @@ -23,6 +23,6 @@ def __init__(self): self.cache_info = None self.plugin_schedule = [] -from plugin_schedule import PluginSchedule -from cache_info import CacheInfo +from .plugin_schedule import PluginSchedule +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/plugin_sql.py b/lib/taniumpy/object_types/plugin_sql.py index 20e18c51..ca35e8d2 100644 --- a/lib/taniumpy/object_types/plugin_sql.py +++ b/lib/taniumpy/object_types/plugin_sql.py @@ -25,6 +25,6 @@ def __init__(self): self.columns = None self.result_row = [] -from plugin_sql_column import PluginSqlColumn -from plugin_sql_result import PluginSqlResult +from .plugin_sql_column import PluginSqlColumn +from .plugin_sql_result import PluginSqlResult diff --git a/lib/taniumpy/object_types/question.py b/lib/taniumpy/object_types/question.py index 17e2f210..d671b4e1 100644 --- a/lib/taniumpy/object_types/question.py +++ b/lib/taniumpy/object_types/question.py @@ -53,10 +53,10 @@ def __init__(self): self.saved_question = None -from select_list import SelectList -from group import Group -from group import Group -from user import User -from group import Group -from saved_question import SavedQuestion +from .select_list import SelectList +from .group import Group +from .group import Group +from .user import User +from .group import Group +from .saved_question import SavedQuestion diff --git a/lib/taniumpy/object_types/question_list.py b/lib/taniumpy/object_types/question_list.py index 6a2d0425..36a9f5a1 100644 --- a/lib/taniumpy/object_types/question_list.py +++ b/lib/taniumpy/object_types/question_list.py @@ -25,7 +25,7 @@ def __init__(self): self.cache_info = None self.question = [] -from question_list_info import QuestionListInfo -from question import Question -from cache_info import CacheInfo +from .question_list_info import QuestionListInfo +from .question import Question +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/saved_action.py b/lib/taniumpy/object_types/saved_action.py index 3c37833b..b6a24849 100644 --- a/lib/taniumpy/object_types/saved_action.py +++ b/lib/taniumpy/object_types/saved_action.py @@ -1,7 +1,7 @@ # Copyright (c) 2015 Tanium Inc # -# Generated from console.wsdl version 0.0.1 +# Generated from .console.wsdl version 0.0.1 # # @@ -75,13 +75,13 @@ def __init__(self): self.last_action = None -from package_spec import PackageSpec -from group import Group -from group import Group -from saved_action_policy import SavedActionPolicy -from metadata_list import MetadataList -from saved_action_row_id_list import SavedActionRowIdList -from user import User -from user import User -from action import Action +from .package_spec import PackageSpec +from .group import Group +from .group import Group +from .saved_action_policy import SavedActionPolicy +from .metadata_list import MetadataList +from .saved_action_row_id_list import SavedActionRowIdList +from .user import User +from .user import User +from .action import Action diff --git a/lib/taniumpy/object_types/saved_action_approval.py b/lib/taniumpy/object_types/saved_action_approval.py index d0eb0aca..f337d5f7 100644 --- a/lib/taniumpy/object_types/saved_action_approval.py +++ b/lib/taniumpy/object_types/saved_action_approval.py @@ -27,5 +27,5 @@ def __init__(self): self.metadata = None -from metadata_list import MetadataList +from .metadata_list import MetadataList diff --git a/lib/taniumpy/object_types/saved_action_list.py b/lib/taniumpy/object_types/saved_action_list.py index 14930c22..7553d088 100644 --- a/lib/taniumpy/object_types/saved_action_list.py +++ b/lib/taniumpy/object_types/saved_action_list.py @@ -23,6 +23,6 @@ def __init__(self): self.cache_info = None self.saved_action = [] -from saved_action import SavedAction -from cache_info import CacheInfo +from .saved_action import SavedAction +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/saved_action_policy.py b/lib/taniumpy/object_types/saved_action_policy.py index ba5ce629..6a8bd0fb 100644 --- a/lib/taniumpy/object_types/saved_action_policy.py +++ b/lib/taniumpy/object_types/saved_action_policy.py @@ -33,6 +33,6 @@ def __init__(self): self.row_filter_group = None -from group import Group -from group import Group +from .group import Group +from .group import Group diff --git a/lib/taniumpy/object_types/saved_question.py b/lib/taniumpy/object_types/saved_question.py index f9eb9659..00715cc6 100644 --- a/lib/taniumpy/object_types/saved_question.py +++ b/lib/taniumpy/object_types/saved_question.py @@ -65,10 +65,10 @@ def __init__(self): self.metadata = None -from question import Question -from package_spec_list import PackageSpecList -from user import User -from user import User -from user import User -from metadata_list import MetadataList +from .question import Question +from .package_spec_list import PackageSpecList +from .user import User +from .user import User +from .user import User +from .metadata_list import MetadataList diff --git a/lib/taniumpy/object_types/saved_question_list.py b/lib/taniumpy/object_types/saved_question_list.py index c9a95ac0..5585ade8 100644 --- a/lib/taniumpy/object_types/saved_question_list.py +++ b/lib/taniumpy/object_types/saved_question_list.py @@ -23,6 +23,6 @@ def __init__(self): self.cache_info = None self.saved_question = [] -from saved_question import SavedQuestion -from cache_info import CacheInfo +from .saved_question import SavedQuestion +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/select.py b/lib/taniumpy/object_types/select.py index 079d45e0..b5f7f924 100644 --- a/lib/taniumpy/object_types/select.py +++ b/lib/taniumpy/object_types/select.py @@ -27,7 +27,7 @@ def __init__(self): self.group = None -from sensor import Sensor -from filter import Filter -from group import Group +from .sensor import Sensor +from .filter import Filter +from .group import Group diff --git a/lib/taniumpy/object_types/select_list.py b/lib/taniumpy/object_types/select_list.py index 6315aa30..d6ebb157 100644 --- a/lib/taniumpy/object_types/select_list.py +++ b/lib/taniumpy/object_types/select_list.py @@ -23,5 +23,5 @@ def __init__(self): self.select = [] -from select import Select +from .select import Select diff --git a/lib/taniumpy/object_types/sensor.py b/lib/taniumpy/object_types/sensor.py index 32d10cf1..817f64ee 100644 --- a/lib/taniumpy/object_types/sensor.py +++ b/lib/taniumpy/object_types/sensor.py @@ -71,9 +71,9 @@ def __init__(self): self.metadata = None -from sensor_query_list import SensorQueryList -from parameter_list import ParameterList -from sensor_subcolumn_list import SensorSubcolumnList -from string_hint_list import StringHintList -from metadata_list import MetadataList +from .sensor_query_list import SensorQueryList +from .parameter_list import ParameterList +from .sensor_subcolumn_list import SensorSubcolumnList +from .string_hint_list import StringHintList +from .metadata_list import MetadataList diff --git a/lib/taniumpy/object_types/sensor_list.py b/lib/taniumpy/object_types/sensor_list.py index 9e34a20a..cf54914c 100644 --- a/lib/taniumpy/object_types/sensor_list.py +++ b/lib/taniumpy/object_types/sensor_list.py @@ -23,6 +23,6 @@ def __init__(self): self.cache_info = None self.sensor = [] -from sensor import Sensor -from cache_info import CacheInfo +from .sensor import Sensor +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/sensor_query_list.py b/lib/taniumpy/object_types/sensor_query_list.py index c76e4b5e..ff8a0fde 100644 --- a/lib/taniumpy/object_types/sensor_query_list.py +++ b/lib/taniumpy/object_types/sensor_query_list.py @@ -23,5 +23,5 @@ def __init__(self): self.query = [] -from sensor_query import SensorQuery +from .sensor_query import SensorQuery diff --git a/lib/taniumpy/object_types/sensor_subcolumn_list.py b/lib/taniumpy/object_types/sensor_subcolumn_list.py index ec4131cb..b5ae4462 100644 --- a/lib/taniumpy/object_types/sensor_subcolumn_list.py +++ b/lib/taniumpy/object_types/sensor_subcolumn_list.py @@ -23,5 +23,5 @@ def __init__(self): self.subcolumn = [] -from sensor_subcolumn import SensorSubcolumn +from .sensor_subcolumn import SensorSubcolumn diff --git a/lib/taniumpy/object_types/system_setting.py b/lib/taniumpy/object_types/system_setting.py index decfe46f..ec95b913 100644 --- a/lib/taniumpy/object_types/system_setting.py +++ b/lib/taniumpy/object_types/system_setting.py @@ -41,6 +41,6 @@ def __init__(self): self.metadata = None -from audit_data import AuditData -from metadata_list import MetadataList +from .audit_data import AuditData +from .metadata_list import MetadataList diff --git a/lib/taniumpy/object_types/system_setting_list.py b/lib/taniumpy/object_types/system_setting_list.py index 6d6f6ba7..ce6cf804 100644 --- a/lib/taniumpy/object_types/system_setting_list.py +++ b/lib/taniumpy/object_types/system_setting_list.py @@ -23,6 +23,6 @@ def __init__(self): self.cache_info = None self.system_setting = [] -from system_setting import SystemSetting -from cache_info import CacheInfo +from .system_setting import SystemSetting +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/system_status_aggregate.py b/lib/taniumpy/object_types/system_status_aggregate.py index 80959194..11188441 100644 --- a/lib/taniumpy/object_types/system_status_aggregate.py +++ b/lib/taniumpy/object_types/system_status_aggregate.py @@ -45,5 +45,5 @@ def __init__(self): self.versions = None -from version_aggregate_list import VersionAggregateList +from .version_aggregate_list import VersionAggregateList diff --git a/lib/taniumpy/object_types/system_status_list.py b/lib/taniumpy/object_types/system_status_list.py index 4d8e59f1..ef04f0f1 100644 --- a/lib/taniumpy/object_types/system_status_list.py +++ b/lib/taniumpy/object_types/system_status_list.py @@ -25,7 +25,7 @@ def __init__(self): self.cache_info = None self.client_status = [] -from client_status import ClientStatus -from system_status_aggregate import SystemStatusAggregate -from cache_info import CacheInfo +from .client_status import ClientStatus +from .system_status_aggregate import SystemStatusAggregate +from .cache_info import CacheInfo diff --git a/lib/taniumpy/object_types/upload_file_list.py b/lib/taniumpy/object_types/upload_file_list.py index 676bc130..9ed265aa 100644 --- a/lib/taniumpy/object_types/upload_file_list.py +++ b/lib/taniumpy/object_types/upload_file_list.py @@ -23,5 +23,5 @@ def __init__(self): self.upload_file = [] -from upload_file import UploadFile +from .upload_file import UploadFile diff --git a/lib/taniumpy/object_types/upload_file_status.py b/lib/taniumpy/object_types/upload_file_status.py index e0c1bf72..44d75ebf 100644 --- a/lib/taniumpy/object_types/upload_file_status.py +++ b/lib/taniumpy/object_types/upload_file_status.py @@ -27,5 +27,5 @@ def __init__(self): self.file_parts = None -from upload_file_list import UploadFileList +from .upload_file_list import UploadFileList diff --git a/lib/taniumpy/object_types/user.py b/lib/taniumpy/object_types/user.py index eed5ecb3..bad8426b 100644 --- a/lib/taniumpy/object_types/user.py +++ b/lib/taniumpy/object_types/user.py @@ -41,7 +41,7 @@ def __init__(self): self.metadata = None -from permission_list import PermissionList -from user_role_list import UserRoleList -from metadata_list import MetadataList +from .permission_list import PermissionList +from .user_role_list import UserRoleList +from .metadata_list import MetadataList diff --git a/lib/taniumpy/object_types/user_list.py b/lib/taniumpy/object_types/user_list.py index 25cf5947..dab08bd7 100644 --- a/lib/taniumpy/object_types/user_list.py +++ b/lib/taniumpy/object_types/user_list.py @@ -23,5 +23,5 @@ def __init__(self): self.user = [] -from user import User +from .user import User diff --git a/lib/taniumpy/object_types/user_role.py b/lib/taniumpy/object_types/user_role.py index 71c5276d..03df739d 100644 --- a/lib/taniumpy/object_types/user_role.py +++ b/lib/taniumpy/object_types/user_role.py @@ -27,5 +27,5 @@ def __init__(self): self.permissions = None -from permission_list import PermissionList +from .permission_list import PermissionList diff --git a/lib/taniumpy/object_types/user_role_list.py b/lib/taniumpy/object_types/user_role_list.py index c37c380d..398fbe34 100644 --- a/lib/taniumpy/object_types/user_role_list.py +++ b/lib/taniumpy/object_types/user_role_list.py @@ -23,5 +23,5 @@ def __init__(self): self.role = [] -from user_role import UserRole +from .user_role import UserRole diff --git a/lib/taniumpy/object_types/version_aggregate_list.py b/lib/taniumpy/object_types/version_aggregate_list.py index 85f4e1e1..20639deb 100644 --- a/lib/taniumpy/object_types/version_aggregate_list.py +++ b/lib/taniumpy/object_types/version_aggregate_list.py @@ -23,5 +23,5 @@ def __init__(self): self.version = [] -from version_aggregate import VersionAggregate +from .version_aggregate import VersionAggregate diff --git a/lib/taniumpy/object_types/white_listed_url.py b/lib/taniumpy/object_types/white_listed_url.py index 47abdab5..7ae73908 100644 --- a/lib/taniumpy/object_types/white_listed_url.py +++ b/lib/taniumpy/object_types/white_listed_url.py @@ -29,5 +29,5 @@ def __init__(self): self.metadata = None -from metadata_list import MetadataList +from .metadata_list import MetadataList diff --git a/lib/taniumpy/object_types/white_listed_url_list.py b/lib/taniumpy/object_types/white_listed_url_list.py index 8573548e..b37103b6 100644 --- a/lib/taniumpy/object_types/white_listed_url_list.py +++ b/lib/taniumpy/object_types/white_listed_url_list.py @@ -23,5 +23,5 @@ def __init__(self): self.white_listed_url = [] -from white_listed_url import WhiteListedUrl +from .white_listed_url import WhiteListedUrl diff --git a/lib/threaded_http.py b/lib/threaded_http.py index 7718aff1..8372db23 100644 --- a/lib/threaded_http.py +++ b/lib/threaded_http.py @@ -6,10 +6,13 @@ from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import str import sys import cgi -from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler -from SocketServer import ThreadingMixIn +from http.server import HTTPServer, BaseHTTPRequestHandler +from socketserver import ThreadingMixIn import threading # disable python from creating .pyc files everywhere @@ -47,7 +50,7 @@ def do_POST(self): # noqa self.wfile.write('Form data:\n') # Echo back information about what was posted in the form - for field in form.keys(): + for field in list(form.keys()): field_item = form[field] if field_item.filename: # The field contains an uploaded file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..e1ce872c --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +future==0.16.0 \ No newline at end of file diff --git a/test/test_pytan_invalid_server_tests.py b/test/test_pytan_invalid_server_tests.py index 9f994f86..35b40cd9 100755 --- a/test/test_pytan_invalid_server_tests.py +++ b/test/test_pytan_invalid_server_tests.py @@ -8,6 +8,7 @@ These tests all use :mod:`ddt`, a package that provides for data driven tests via JSON files. """ from __future__ import print_function +from __future__ import absolute_import import sys @@ -32,11 +33,11 @@ sys.path.insert(0, aa) import pytan -import ddt +from . import ddt import threaded_http # get our server connection info -from API_INFO import SERVER_INFO +from .API_INFO import SERVER_INFO # where the output files from the tests will be stored TEST_OUT = os.path.join(my_dir, 'TEST_OUT') diff --git a/test/test_pytan_unit.py b/test/test_pytan_unit.py index 6c32d346..cbdd66e9 100755 --- a/test/test_pytan_unit.py +++ b/test/test_pytan_unit.py @@ -4,6 +4,7 @@ These unit tests do not require a connection to a Tanium server in order to run. """ +from __future__ import absolute_import import sys # disable python from creating .pyc files everywhere @@ -218,6 +219,7 @@ def test_single_filter_str(self): 'not_flag': 0, 'value': '.*Windows.*' }, + 'params': {}, 'name': 'Sensor1' } ] @@ -235,6 +237,7 @@ def test_single_filter_list(self): 'not_flag': 0, 'value': '.*Windows.*' }, + 'params': {}, 'name': 'Sensor1' } ] @@ -255,6 +258,7 @@ def test_multi_filter_list(self): 'not_flag': 0, 'value': '.*Windows.*' }, + 'params': {}, 'name': 'Sensor1' }, { @@ -263,6 +267,7 @@ def test_multi_filter_list(self): 'not_flag': 1, 'value': '.*10.10.10.10.*' }, + 'params': {}, 'name': 'Sensor2' } ] @@ -466,19 +471,31 @@ def test_extract_params_missing_seperator(self): def test_extract_options_missing_value_max_data_age(self): s = 'Sensor1, more:stuff,here, opt:max_data_age' - e = ( - "Option 'max_data_age' is missing a value of seconds" - ".*" - ) + if sys.version_info < (3, 0): + e = ( + "Option 'max_data_age' is missing a value of seconds" + ".*" + ) + else: + e = ( + "Option 'max_data_age' is missing a value of seconds" + ".*" + ) with self.assertRaisesRegexp(pytan.exceptions.HumanParserError, e): pytan.utils.extract_options(s) def test_extract_options_missing_value_value_type(self): s = 'Sensor1, more:stuff,here, opt:value_type' - e = ( - "Option 'value_type' is missing a value of " - "value_type.*" - ) + if sys.version_info < (3, 0): + e = ( + "Option 'value_type' is missing a value of " + "value_type.*" + ) + else: + e = ( + "Option 'value_type' is missing a value of " + "value_type.*" + ) with self.assertRaisesRegexp(pytan.exceptions.HumanParserError, e): pytan.utils.extract_options(s) @@ -778,10 +795,16 @@ def test_parse_multi_filter(self): self.assertEquals(r, kwargs['question_filter_defs']) def test_parse_str(self): - e = ( - "Argument 'question_filter_defs' has an invalid type " - "" - ) + if sys.version_info < (3, 0): + e = ( + "Argument 'question_filter_defs' has an invalid type " + "" + ) + else: + e = ( + "Argument 'question_filter_defs' has an invalid type " + "" + ) with self.assertRaisesRegexp(pytan.exceptions.DefinitionParserError, e): kwargs = {'question_filter_defs': 'no string allowed'} pytan.utils.parse_defs( @@ -968,10 +991,16 @@ def test_invalid2(self): pytan.utils.val_sensor_defs(**kwargs) def test_invalid3(self): - e = ( - "'filter' key in definition dictionary must be a \[\]" - ", you supplied a !" - ) + if sys.version_info < (3, 0): + e = ( + "'filter' key in definition dictionary must be a \[\]" + ", you supplied a !" + ) + else: + e = ( + "'filter' key in definition dictionary must be a \[\]" + ", you supplied a !" + ) with self.assertRaisesRegexp(pytan.exceptions.DefinitionParserError, e): kwargs = {'sensor_defs': [{'name': 'test1', 'filter': [{}]}]} pytan.utils.val_sensor_defs(**kwargs) diff --git a/test/test_pytan_valid_server_tests.py b/test/test_pytan_valid_server_tests.py index e33073eb..888147a6 100755 --- a/test/test_pytan_valid_server_tests.py +++ b/test/test_pytan_valid_server_tests.py @@ -8,7 +8,11 @@ These tests all use :mod:`ddt`, a package that provides for data driven tests via JSON files. """ from __future__ import print_function +from __future__ import absolute_import +from future import standard_library +standard_library.install_aliases() +from builtins import str import sys # disable python from creating .pyc files everywhere @@ -19,7 +23,7 @@ import unittest import json # noqa import csv -import StringIO +import io import tempfile my_file = os.path.abspath(sys.argv[0]) @@ -32,17 +36,17 @@ import pytan import taniumpy -import ddt +from . import ddt # get our server connection info -from API_INFO import SERVER_INFO +from .API_INFO import SERVER_INFO # where the output files from the tests will be stored TEST_OUT = os.path.join(tempfile.gettempdir(), 'TEST_OUT') def chew_csv(c): - i = StringIO.StringIO(c) + i = io.StringIO(c) r = csv.reader(i) l = list(r) return l @@ -140,7 +144,7 @@ def test_valid_export_resultset(self, value): export_str = handler.export_obj(**kwargs) self.assertTrue(export_str) - self.assertIsInstance(export_str, (str, unicode)) + self.assertIsInstance(export_str, (str, str)) export_str_list = chew_csv(export_str) spew(export_str_list[0]) for x in tests: @@ -172,7 +176,7 @@ def test_valid_export_basetype(self, value): export_str = handler.export_obj(**kwargs) self.assertTrue(export_str) - self.assertIsInstance(export_str, (str, unicode)) + self.assertIsInstance(export_str, (str, str)) for x in tests: spew("+++ EVAL TEST: %s" % x) self.assertTrue(eval(x)) @@ -202,7 +206,7 @@ def test_valid_deploy_action(self, value): self.assertGreaterEqual(len(ret['action_results'].columns), 1) self.assertTrue(ret['action_result_map']) self.assertIsNotNone(ret['poller_success']) - for ft in pytan.constants.EXPORT_MAPS['ResultSet'].keys(): + for ft in list(pytan.constants.EXPORT_MAPS['ResultSet'].keys()): report_file, result = handler.export_to_report_file( obj=ret['action_results'], export_format=ft, @@ -222,7 +226,7 @@ def test_valid_create_object(self, value): method = value['method'] args = value['args'] t_obj = eval(value['taniumpyobj']) - delete_args = {str(k): str(v) for k, v in value['delete'].iteritems()} + delete_args = {str(k): str(v) for k, v in value['delete'].items()} s = ( "+++ TESTING EXPECTED CREATE OBJECT SUCCESS Handler.{}() with kwargs {}" @@ -321,7 +325,7 @@ def test_valid_question(self, value): self.assertIsInstance(ret['question_results'], taniumpy.ResultSet) self.assertGreaterEqual(len(ret['question_results'].rows), 1) self.assertGreaterEqual(len(ret['question_results'].columns), 1) - for ft in pytan.constants.EXPORT_MAPS['ResultSet'].keys(): + for ft in list(pytan.constants.EXPORT_MAPS['ResultSet'].keys()): report_file, result = handler.export_to_report_file( obj=ret['question_results'], export_format=ft, @@ -353,7 +357,7 @@ def test_valid_saved_question(self, value): self.assertIsInstance(ret['question_results'], taniumpy.ResultSet) self.assertGreaterEqual(len(ret['question_results'].rows), 1) self.assertGreaterEqual(len(ret['question_results'].columns), 1) - for ft in pytan.constants.EXPORT_MAPS['ResultSet'].keys(): + for ft in list(pytan.constants.EXPORT_MAPS['ResultSet'].keys()): report_file, result = handler.export_to_report_file( obj=ret['question_results'], export_format=ft, @@ -386,7 +390,7 @@ def test_valid_get_object(self, value): spew("+++ EVAL TEST: %s" % x) self.assertTrue(eval(x)) - for ft in pytan.constants.EXPORT_MAPS['BaseType'].keys(): + for ft in list(pytan.constants.EXPORT_MAPS['BaseType'].keys()): report_file, result = handler.export_to_report_file( obj=response, export_format=ft, report_dir=TEST_OUT, prefix=sys._getframe().f_code.co_name + '_',