Best Python code snippet using avocado_python
rule_dry_runner.py
Source:rule_dry_runner.py
1#!/usr/bin/python32"""This module runs the pipeline for specified events and shows how processing changed them."""3import json4import shutil5import tempfile6from copy import deepcopy7from difflib import ndiff8from pathlib import Path9from colorama import Fore, Back10from ruamel.yaml import YAML11from logprep.runner import Runner12from logprep.util.helper import (13 color_print_line,14 recursive_compare,15 remove_file_if_exists,16 color_print_title,17)18from logprep.util.json_handling import dump_config_as_file, parse_jsonl, parse_json19yaml = YAML(typ="safe", pure=True)20def get_runner_outputs(patched_runner):21 # pylint: disable=protected-access22 """23 Extracts the outputs of a patched logprep runner.24 Parameters25 ----------26 patched_runner : Runner27 The patched logprep runner28 Returns29 -------30 parsed_outputs : list31 A list of logprep outputs containing events, extra outputs like pre-detections or pseudonyms32 and errors33 """34 parsed_outputs = [None, None, None]35 output_config = list(patched_runner._configuration.get("output").values())[0]36 output_paths = [37 output_path for key, output_path in output_config.items() if "output_file" in key38 ]39 for output_path in output_paths:40 remove_file_if_exists(output_path)41 patched_runner.start()42 for index, output_path in enumerate(output_paths):43 parsed_outputs[index] = parse_jsonl(output_path)44 remove_file_if_exists(output_path)45 return parsed_outputs46def get_patched_runner(config_path, logger):47 """48 Creates a patched runner that bypasses check to obtain non singleton instance and the runner49 won't continue iterating on an empty pipeline.50 Parameters51 ----------52 config_path : str53 The logprep configuration that should be used for the patched runner54 logger : Logger55 The application logger the runner should use56 Returns57 -------58 runner : Runner59 The patched logprep runner60 """61 runner = Runner(bypass_check_to_obtain_non_singleton_instance=True)62 runner.set_logger(logger)63 runner.load_configuration(config_path)64 # patch runner to stop on empty pipeline65 runner._keep_iterating = lambda: False # pylint: disable=protected-access66 return runner67class DryRunner:68 """Used to run pipeline with given events and show changes made by processing."""69 def __init__(self, dry_run: str, config_path: str, full_output: bool, use_json: bool, logger):70 with open(config_path, "r", encoding="utf8") as yaml_file:71 self._config_yml = yaml.load(yaml_file)72 self._full_output = full_output73 self._use_json = use_json74 self._config_yml["input"] = {75 "json_input": {76 "type": "json_input" if use_json else "jsonl_input",77 "documents_path": dry_run,78 }79 }80 self._config_yml["output"] = {81 "jsonl_output": {82 "type": "jsonl_output",83 "output_file": dry_run,84 }85 }86 self._config_yml["process_count"] = 187 self._logger = logger88 def run(self):89 """Run the dry runner."""90 tmp_path = tempfile.mkdtemp()91 config_path = self._patch_config(tmp_path)92 patched_runner = get_patched_runner(config_path, self._logger)93 test_output, test_output_custom, test_output_error = get_runner_outputs(patched_runner)94 input_path = self._config_yml["input"]["json_input"]["documents_path"]95 input_data = parse_json(input_path) if self._use_json else parse_jsonl(input_path)96 self._print_output_results(input_data, test_output, test_output_custom, test_output_error)97 shutil.rmtree(tmp_path)98 def _patch_config(self, tmp_path):99 """Generate a config file on disk which contains the output jsonl files in a tmp dir."""100 tmp_path = Path(tmp_path)101 output_file = tmp_path / "output.jsonl"102 output_file_custom = tmp_path / "output_custom.jsonl"103 output_file_error = tmp_path / "output_errors.jsonl"104 output_config = self._config_yml["output"]["jsonl_output"]105 output_config["output_file"] = str(output_file)106 output_config["output_file_custom"] = str(output_file_custom)107 output_config["output_file_error"] = str(output_file_error)108 config_path = str(tmp_path / "generated_config.yml")109 dump_config_as_file(config_path, self._config_yml)110 return config_path111 def _print_output_results(self, input_data, test_output, test_output_custom, test_output_error):112 """Call the print methods that correspond to the output type"""113 if not test_output_error:114 self._print_transformed_events(input_data, test_output, test_output_custom)115 if self._full_output and test_output_custom and not test_output_error:116 self._print_pseudonyms(test_output_custom)117 self._print_predetections(test_output_custom)118 if test_output_error:119 self._print_errors(test_output_error)120 def _print_transformed_events(self, input_data, test_output, test_output_custom):121 """122 Print the differences between input and output event as well as corresponding pre-detections123 """124 transformed_cnt = 0125 for idx, test_item in enumerate(test_output):126 test_copy = deepcopy(test_item)127 input_copy = deepcopy(input_data[idx])128 difference = recursive_compare(test_copy, input_copy)129 if difference:130 test_json = json.dumps(test_item, sort_keys=True, indent=4)131 input_path_json = json.dumps(input_data[idx], sort_keys=True, indent=4)132 diff = ndiff(input_path_json.splitlines(), test_json.splitlines())133 color_print_title(Back.CYAN, "PROCESSED EVENT")134 self._print_ndiff_items(diff)135 transformed_cnt += 1136 for test_item_custom in test_output_custom:137 detector_id = test_item_custom.get("pre_detection_id")138 if detector_id and detector_id == test_item.get("pre_detection_id"):139 color_print_title(Back.YELLOW, "PRE-DETECTION FOR PRECEDING EVENT")140 test_json_custom = json.dumps(test_item_custom, sort_keys=True, indent=4)141 color_print_line(Back.BLACK, Fore.YELLOW, test_json_custom)142 color_print_title(Back.WHITE, f"TRANSFORMED EVENTS: {transformed_cnt}/{len(test_output)}")143 def _print_ndiff_items(self, diff):144 """145 Print the results from the ndiff library with colored lines, depending on the diff type146 """147 for item in diff:148 if item.startswith("- "):149 color_print_line(Back.BLACK, Fore.RED, item)150 elif item.startswith("+ "):151 color_print_line(Back.BLACK, Fore.GREEN, item)152 elif item.startswith("? "):153 color_print_line(Back.BLACK, Fore.WHITE, item)154 else:155 color_print_line(Back.BLACK, Fore.CYAN, item)156 def _print_pseudonyms(self, test_output_custom):157 """Print only the pseudonyms from all custom outputs"""158 color_print_title(Back.MAGENTA, "ALL PSEUDONYMS")159 for test_item in test_output_custom:160 if "pseudonym" in test_item.keys() and "origin" in test_item.keys():161 test_json = json.dumps(test_item, sort_keys=True, indent=4)162 color_print_line(Back.BLACK, Fore.MAGENTA, test_json)163 def _print_predetections(self, test_output_custom):164 """Print only the pre-detections from all custom outputs"""165 color_print_title(Back.YELLOW, "ALL PRE-DETECTIONS")166 for test_item in test_output_custom:167 if "pre_detection_id" in test_item.keys():168 test_json = json.dumps(test_item, sort_keys=True, indent=4)169 color_print_line(Back.BLACK, Fore.YELLOW, test_json)170 def _print_errors(self, test_output_error):171 """Print all errors"""172 for test_items in test_output_error:173 color_print_title(Back.RED, "ERROR")174 json_message = test_items.get("error_message")175 color_print_line(Back.BLACK, Fore.RED, json_message)176 json_original = test_items.get("document_received")177 json_processed = test_items.get("document_processed")178 diff = ndiff(str(json_original), str(json_processed))179 color_print_title(Back.YELLOW, "PARTIALLY PROCESSED EVENT")180 self._print_ndiff_items(diff)181 log_message = "^^^ RESULTS CAN NOT BE SHOWN UNTIL ALL ERRORS HAVE BEEN FIXED ^^^"...
local_target_test.py
Source:local_target_test.py
1from .local_target import *2from .misc import makedirs_p3from test_support import *4@require_rsync5@pytest.fixture(scope="function")6def input_local_data(isolated_dir):7 '''Generate some input test data so we can check that it works.'''8 fname = os.path.abspath("./test_input/temp.txt")9 makedirs_p(os.path.dirname(fname))10 with open(fname, "w") as fh:11 print("hi there", file=fh)12 yield fname13 14@require_rsync15@require_python316def test_input_local_target(input_local_data):17 '''Test a local input file target'''18 ldir = os.path.abspath("./local_directory")19 assert os.path.exists(input_local_data)20 assert not os.path.exists(ldir + input_local_data)21 ft = InLocalTarget(input_local_data, ldir)22 assert ft.exists()23 assert ft.filename() == input_local_data24 assert ft.local_filename() == ldir + input_local_data25 assert os.path.exists(input_local_data)26 assert not os.path.exists(ldir + input_local_data)27 ft.prepare()28 assert os.path.exists(ldir + input_local_data)29 ft.finish()30 assert ft.exists()31 assert os.path.exists(input_local_data)32 assert os.path.exists(ldir + input_local_data)33 ft.remove()34 assert os.path.exists(input_local_data)35 assert not os.path.exists(ldir + input_local_data)36@require_rsync37@require_python338def test_input_local_target_error(input_local_data):39 '''Test a local input file target when an error occurs'''40 ldir = os.path.abspath("./local_directory")41 assert os.path.exists(input_local_data)42 assert not os.path.exists(ldir + input_local_data)43 ft = InLocalTarget(input_local_data, ldir)44 assert ft.exists()45 assert ft.filename() == input_local_data46 assert ft.local_filename() == ldir + input_local_data47 assert os.path.exists(input_local_data)48 assert not os.path.exists(ldir + input_local_data)49 ft.prepare()50 assert os.path.exists(ldir + input_local_data)51 ft.finish_error()52 assert ft.exists()53 assert os.path.exists(input_local_data)54 assert os.path.exists(ldir + input_local_data)55@require_rsync56@require_python357def test_output_local_target(isolated_dir):58 '''Test local output file target'''59 fname = os.path.abspath("./test_output/temp.txt")60 assert not os.path.exists("./test_output")61 ft = OutLocalTarget(fname, "./local_directory")62 assert not ft.exists()63 with open(ft.local_filename(), "w") as fh:64 print("hi there", file=fh)65 assert os.path.exists("./local_directory" + fname + ".generating")66 assert not os.path.exists(fname)67 assert not ft.exists()68 ft.finish()69 assert os.path.exists("./local_directory" + fname)70 assert os.path.exists(fname)71 assert ft.exists()72 ft.remove()73 assert not os.path.exists("./local_directory" + fname)74 assert not os.path.exists(fname)75 76@require_rsync77@require_python378def test_output_local_target_error(isolated_dir):79 '''Test a local output file target when an error occurs'''80 fname = os.path.abspath("./test_output/temp.txt")81 assert not os.path.exists("./test_output")82 ft = OutLocalTarget(fname, "./local_directory")83 assert not ft.exists()84 with open(ft.local_filename(), "w") as fh:85 print("hi there", file=fh)86 assert os.path.exists("./local_directory" + fname + ".generating")87 assert not os.path.exists(fname)88 assert not ft.exists()89 ft.finish_error()90 assert os.path.exists("./local_directory" + fname + ".error")91 assert os.path.exists(fname + ".error")92 assert not ft.exists()93@require_rsync94@require_python395def test_output_temp_local_target(isolated_dir):96 '''Test local output file target'''97 fname = os.path.abspath("./test_output/temp.txt")98 assert not os.path.exists("./test_output")99 ft = OutTempLocalTarget(fname, "./local_directory")100 assert not ft.exists()101 with open(ft.local_filename(), "w") as fh:102 print("hi there", file=fh)103 assert os.path.exists("./local_directory" + fname + ".generating")104 assert not os.path.exists(fname)105 assert not ft.exists()106 ft.finish()107 assert os.path.exists("./local_directory" + fname)108 # Check that real file never is created109 assert not os.path.exists(fname)110 assert ft.exists()111 ft.remove_temporary()112 assert not os.path.exists("./local_directory" + fname)113 assert not ft.exists()114 with open(ft.local_filename(), "w") as fh:115 print("hi there", file=fh)116 assert os.path.exists("./local_directory" + fname + ".generating")117 ft.remove()118 assert not os.path.exists("./local_directory" + fname + ".generating")119 120@require_rsync121@require_python3122def test_output_temp_dir_local_target(isolated_dir):123 '''Test local output file target'''124 fname = os.path.abspath("./test_output/dir")125 bname = "./local_directory/" + os.path.dirname(os.path.dirname(fname))126 assert not os.path.exists(bname + "/test_output/dir/test.txt")127 assert not os.path.exists(bname + "/test_output_generating/dir/test.txt")128 assert not os.path.exists(bname + "/test_output_error/dir/test.txt")129 ft = OutTempDirLocalTarget("test_output/dir", "./local_directory")130 assert not ft.exists()131 makedirs_p(ft.local_filename())132 with open(ft.local_filename() + "/test.txt", "w") as fh:133 print("hi there", file=fh)134 assert not os.path.exists(bname + "/test_output/dir/test.txt")135 assert os.path.exists(bname + "/test_output_generating/dir/test.txt")136 assert not os.path.exists(bname + "/test_output_error/dir/test.txt")137 assert not ft.exists()138 ft.finish()139 assert os.path.exists(bname + "/test_output/dir/test.txt")140 assert not os.path.exists(bname + "/test_output_generating/dir/test.txt")141 assert not os.path.exists(bname + "/test_output_error/dir/test.txt")142 assert ft.exists()143 ft.remove_temporary()144 assert not os.path.exists(bname + "/test_output/dir/test.txt")145 assert not os.path.exists(bname + "/test_output_generating/dir/test.txt")146 assert not os.path.exists(bname + "/test_output_error/dir/test.txt")147 assert not ft.exists()148@require_rsync149@require_python3150def test_output_temp_dir_local_target_error(isolated_dir):151 '''Test local output file target'''152 fname = os.path.abspath("./test_output/dir")153 bname = "./local_directory/" + os.path.dirname(os.path.dirname(fname))154 assert not os.path.exists(bname + "/test_output/dir/test.txt")155 assert not os.path.exists(bname + "/test_output_generating/dir/test.txt")156 assert not os.path.exists(bname + "/test_output_error/dir/test.txt")157 ft = OutTempDirLocalTarget("test_output/dir", "./local_directory")158 assert not ft.exists()159 makedirs_p(ft.local_filename())160 with open(ft.local_filename() + "/test.txt", "w") as fh:161 print("hi there", file=fh)162 assert not os.path.exists(bname + "/test_output/dir/test.txt")163 assert os.path.exists(bname + "/test_output_generating/dir/test.txt")164 assert not os.path.exists(bname + "/test_output_error/dir/test.txt")165 assert not ft.exists()166 ft.finish_error()167 assert not os.path.exists(bname + "/test_output/dir/test.txt")168 assert not os.path.exists(bname + "/test_output_generating/dir/test.txt")169 assert os.path.exists(bname + "/test_output_error/dir/test.txt")170 assert not ft.exists()171 ft.remove_temporary()172 assert not os.path.exists(bname + "/test_output/dir/test.txt")173 assert not os.path.exists(bname + "/test_output_generating/dir/test.txt")174 assert not os.path.exists(bname + "/test_output_error/dir/test.txt")175 assert not ft.exists()176# This was copied over from MSPI. We can't actually do this test here since177# we don't have all the support stuff. I'll leave this here, but we really178# need some other test here.179#from .l1b2_igc_task import L1b2IgcTask180#from geocal import read_shelve181#def test_xml_local_target(task_with_l1b1_test,182# test_version_info, test_target_info, cache_result):183 # We have a number of sequences and view here. Just pick the184 # first one to run.185# views = test_target_info.views(test_target_info.sequence_numbers()[0])186# tsk = L1b2IgcTask(views, test_version_info, cache_result=cache_result)187# tsk.run_pipeline(skip_cleanup_on_error=True)188# igc_fname = tsk.igc.filename()189# ft = XmlLocalTarget(igc_fname, "./local_directory")190# igc = read_shelve(ft.filename())191# ft.prepare()192# igc = read_shelve(ft.local_filename())193 ...
test_output.py
Source:test_output.py
...5def test_output_success(click):6 output_success("test")7 click.secho.assert_called_once_with("test", fg="green", bold=True)8@mock.patch("ali.helpers.output.click")9def test_output_error(click):10 output_error("test")11 click.secho.assert_called_once_with("Error: test", fg="red", bold=True)12@mock.patch("ali.helpers.output.formatters")13@mock.patch("ali.helpers.output.lexers")14@mock.patch("ali.helpers.output.highlight")15@mock.patch("ali.helpers.output.click")16def test_output_json(click, highlight, lexers, formatters):17 lexer_mock = mock.MagicMock()18 formatter_mock = mock.MagicMock()19 lexers.get_lexer_by_name.return_value = lexer_mock20 formatters.get_formatter_by_name.return_value = formatter_mock21 value = json.dumps({"test": {"items": [1, 2, 3]}})22 highlight.return_value = "highlighted"23 output_json(value)...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!