__main__.py
1 import argparse 2 import logging 3 import sys 4 from dataclasses import dataclass 5 from typing import Any 6 from typing import Dict 7 8 from evidently.legacy.runner.loader import SamplingOptions 9 10 11 @dataclass 12 class DataFormatOptions: 13 header: bool 14 separator: str 15 date_column: str 16 17 18 @dataclass 19 class Sampling: 20 reference: SamplingOptions 21 current: SamplingOptions 22 23 24 @dataclass 25 class CalculateOptions: 26 data_format: DataFormatOptions 27 column_mapping: Dict[str, Any] 28 sampling: Sampling 29 30 31 @dataclass 32 class DashboardOptions(CalculateOptions): 33 dashboard_tabs: Dict[str, Dict[str, object]] 34 35 36 @dataclass 37 class ProfileOptions(CalculateOptions): 38 profile_parts: Dict[str, Dict[str, str]] 39 pretty_print: bool = False 40 41 42 def __get_not_none(src: Dict, key, default): 43 return default if src.get(key, None) is None else src.get(key) 44 45 46 def help_handler(**_kv): 47 parser.print_help() 48 sys.exit(1) 49 50 51 def _add_default_parameters(configurable_parser, default_output_name: str): 52 configurable_parser.add_argument("--reference", dest="reference", required=True, help="Path to reference data") 53 configurable_parser.add_argument("--current", dest="current", help="Path to current data") 54 configurable_parser.add_argument("--output_path", dest="output_path", required=True, help="Path to store report") 55 configurable_parser.add_argument( 56 "--report_name", dest="report_name", default=default_output_name, help="Report name" 57 ) 58 configurable_parser.add_argument("--config", dest="config", required=True, help="Path to configuration") 59 60 61 logging.basicConfig(level=logging.INFO) 62 63 parser = argparse.ArgumentParser() 64 65 parsers = parser.add_subparsers() 66 parser.set_defaults(handler=help_handler) 67 calculate_parser = parsers.add_parser("calculate") 68 calc_subparsers = calculate_parser.add_subparsers() 69 70 parsed = parser.parse_args(sys.argv[1:]) 71 72 parsed.handler(**parsed.__dict__)