def run_validation_operator_usage_statistics( data_context: "DataContext", # noqa: F821 validation_operator_name: str, assets_to_validate: list, **kwargs, ) -> dict: try: data_context_id = data_context.data_context_id except AttributeError: data_context_id = None anonymizer = _anonymizers.get(data_context_id, None) if anonymizer is None: anonymizer = Anonymizer(data_context_id) _anonymizers[data_context_id] = anonymizer payload = {} try: payload["anonymized_operator_name"] = anonymizer.anonymize( obj=validation_operator_name) except TypeError as e: logger.debug( f"{UsageStatsExceptionPrefix.EMIT_EXCEPTION.value}: {e} type: {type(e)}, run_validation_operator_usage_statistics: Unable to create validation_operator_name hash" ) if data_context._usage_statistics_handler: # noinspection PyBroadException try: anonymizer = data_context._usage_statistics_handler.anonymizer payload["anonymized_batches"] = [ anonymizer.anonymize(obj=batch) for batch in assets_to_validate ] except Exception as e: logger.debug( f"{UsageStatsExceptionPrefix.EMIT_EXCEPTION.value}: {e} type: {type(e)}, run_validation_operator_usage_statistics: Unable to create anonymized_batches payload field" ) return payload
def test_anonymizer_consistent_salt(): # Provided same salt will produce same results data_context_id = str(uuid.uuid4()) anonymizer1 = Anonymizer(data_context_id) anonymizer2 = Anonymizer(data_context_id) test_name = "i_am_a_name" anon_name_1 = anonymizer1.anonymize(test_name) anon_name_2 = anonymizer2.anonymize(test_name) assert anon_name_1 == anon_name_2 assert len(anon_name_1) == 32 assert len(anon_name_2) == 32
def save_expectation_suite_usage_statistics( data_context, # self expectation_suite, expectation_suite_name=None): try: data_context_id = data_context.data_context_id except AttributeError: data_context_id = None anonymizer = _anonymizers.get(data_context_id, None) if anonymizer is None: anonymizer = Anonymizer(data_context_id) _anonymizers[data_context_id] = anonymizer payload = {} if expectation_suite_name is None: expectation_suite_name = expectation_suite.expectation_suite_name try: payload["anonymized_expectation_suite_name"] = anonymizer.anonymize( expectation_suite_name) except Exception: logger.debug( "save_expectation_suite_usage_statistics: Unable to create anonymized_expectation_suite_name payload field" ) return payload
def run_validation_operator_usage_statistics( data_context, # self validation_operator_name, assets_to_validate, run_id=None, **kwargs): try: data_context_id = data_context.data_context_id except AttributeError: data_context_id = None anonymizer = _anonymizers.get(data_context_id, None) if anonymizer is None: anonymizer = Anonymizer(data_context_id) _anonymizers[data_context_id] = anonymizer payload = {} try: payload["anonymized_operator_name"] = anonymizer.anonymize( validation_operator_name) except TypeError: logger.debug( "run_validation_operator_usage_statistics: Unable to create validation_operator_name hash" ) try: batch_anonymizer = data_context._usage_statistics_handler._batch_anonymizer payload["anonymized_batches"] = [ batch_anonymizer.anonymize_batch_info(batch) for batch in assets_to_validate ] except Exception: logger.debug( "run_validation_operator_usage_statistics: Unable to create anonymized_batches payload field" ) return payload
def get_batch_list_usage_statistics( data_context: "DataContext", *args, **kwargs # noqa: F821 ) -> dict: try: data_context_id = data_context.data_context_id except AttributeError: data_context_id = None anonymizer = _anonymizers.get(data_context_id, None) if anonymizer is None: anonymizer = Anonymizer(data_context_id) _anonymizers[data_context_id] = anonymizer payload = {} if data_context._usage_statistics_handler: # noinspection PyBroadException try: anonymizer: Anonymizer = ( # noqa: F821 data_context._usage_statistics_handler.anonymizer) payload = anonymizer.anonymize(*args, **kwargs) except Exception as e: logger.debug( f"{UsageStatsExceptionPrefix.EMIT_EXCEPTION.value}: {e} type: {type(e)}, get_batch_list_usage_statistics: Unable to create anonymized_batch_request payload field" ) return payload
def edit_expectation_suite_usage_statistics( data_context: "DataContext", # noqa: F821 expectation_suite_name: str, interactive_mode: Optional[CLISuiteInteractiveFlagCombinations] = None, ) -> dict: try: data_context_id = data_context.data_context_id except AttributeError: data_context_id = None anonymizer = _anonymizers.get(data_context_id, None) if anonymizer is None: anonymizer = Anonymizer(data_context_id) _anonymizers[data_context_id] = anonymizer if interactive_mode is None: payload = {} else: payload = copy.deepcopy(interactive_mode.value) # noinspection PyBroadException try: payload["anonymized_expectation_suite_name"] = anonymizer.anonymize( obj=expectation_suite_name ) except Exception as e: logger.debug( f"{UsageStatsExceptionPrefix.EMIT_EXCEPTION.value}: {e} type: {type(e)}, edit_expectation_suite_usage_statistics: Unable to create anonymized_expectation_suite_name payload field" ) return payload
def save_expectation_suite_usage_statistics( data_context: "DataContext", # noqa: F821 expectation_suite: ExpectationSuite, expectation_suite_name: Optional[str] = None, **kwargs, ) -> dict: try: data_context_id = data_context.data_context_id except AttributeError: data_context_id = None anonymizer = _anonymizers.get(data_context_id, None) if anonymizer is None: anonymizer = Anonymizer(data_context_id) _anonymizers[data_context_id] = anonymizer payload = {} if expectation_suite_name is None: if isinstance(expectation_suite, ExpectationSuite): expectation_suite_name = expectation_suite.expectation_suite_name elif isinstance(expectation_suite, dict): expectation_suite_name = expectation_suite.get("expectation_suite_name") # noinspection PyBroadException try: payload["anonymized_expectation_suite_name"] = anonymizer.anonymize( obj=expectation_suite_name ) except Exception as e: logger.debug( f"{UsageStatsExceptionPrefix.EMIT_EXCEPTION.value}: {e} type: {type(e)}, save_expectation_suite_usage_statistics: Unable to create anonymized_expectation_suite_name payload field" ) return payload
def test_anonymizer_no_salt(): # No salt will generate a random one. anonymizer1 = Anonymizer() anonymizer2 = Anonymizer() test_name = "i_am_a_name" anon_name_1 = anonymizer1.anonymize(test_name) anon_name_2 = anonymizer2.anonymize(test_name) assert anon_name_1 != anon_name_2 assert len(anon_name_1) == 32 assert len(anon_name_2) == 32 # Provided different salt will produce different results anonymizer1 = Anonymizer("hello, friend") anonymizer2 = Anonymizer("hello, enemy") test_name = "i_am_a_name" anon_name_1 = anonymizer1.anonymize(test_name) anon_name_2 = anonymizer2.anonymize(test_name) assert anon_name_1 != anon_name_2 assert len(anon_name_1) == 32 assert len(anon_name_2) == 32
def _handle_expectation_suite_usage_statistics( data_context: "DataContext", # noqa: F821 event_arguments_payload_handler_name: str, expectation_suite: Optional[ExpectationSuite] = None, expectation_suite_name: Optional[str] = None, interactive_mode: Optional[CLISuiteInteractiveFlagCombinations] = None, **kwargs, ) -> dict: """ This method anonymizes "expectation_suite_name" for events that utilize this property. """ data_context_id: Optional[str] try: data_context_id = data_context.data_context_id except AttributeError: data_context_id = None anonymizer: Anonymizer = _anonymizers.get(data_context_id, None) if anonymizer is None: anonymizer = Anonymizer(data_context_id) _anonymizers[data_context_id] = anonymizer payload: dict if interactive_mode is None: payload = {} else: payload = copy.deepcopy(interactive_mode.value) if expectation_suite_name is None: if isinstance(expectation_suite, ExpectationSuite): expectation_suite_name = expectation_suite.expectation_suite_name elif isinstance(expectation_suite, dict): expectation_suite_name = expectation_suite.get( "expectation_suite_name") # noinspection PyBroadException try: payload["anonymized_expectation_suite_name"] = anonymizer.anonymize( obj=expectation_suite_name) except Exception as e: logger.debug( f"{UsageStatsExceptionPrefix.EMIT_EXCEPTION.value}: {e} type: {type(e)}, {event_arguments_payload_handler_name}: Unable to create anonymized_expectation_suite_name payload field." ) return payload
def get_profiler_run_usage_statistics( profiler: "RuleBasedProfiler", # noqa: F821 variables: Optional[dict] = None, rules: Optional[dict] = None, *args, **kwargs, ) -> dict: usage_statistics_handler: Optional[ UsageStatisticsHandler ] = profiler._usage_statistics_handler data_context_id: Optional[str] = None if usage_statistics_handler: data_context_id = usage_statistics_handler._data_context_id anonymizer: Optional[Anonymizer] = _anonymizers.get(data_context_id, None) if anonymizer is None: anonymizer = Anonymizer(data_context_id) _anonymizers[data_context_id] = anonymizer payload: dict = {} if usage_statistics_handler: # noinspection PyBroadException try: anonymizer = usage_statistics_handler.anonymizer resolved_runtime_config: "RuleBasedProfilerConfig" = ( # noqa: F821 RuleBasedProfilerConfig.resolve_config_using_acceptable_arguments( profiler=profiler, variables=variables, rules=rules, ) ) payload: dict = anonymizer.anonymize(obj=resolved_runtime_config) except Exception as e: logger.debug( f"{UsageStatsExceptionPrefix.EMIT_EXCEPTION.value}: {e} type: {type(e)}, get_profiler_run_usage_statistics: Unable to create anonymized_profiler_run payload field" ) return payload
def get_checkpoint_run_usage_statistics( checkpoint: "Checkpoint", # noqa: F821 *args, **kwargs, ) -> dict: usage_statistics_handler: Optional[ UsageStatisticsHandler ] = checkpoint._usage_statistics_handler data_context_id: Optional[str] = None try: data_context_id = checkpoint.data_context.data_context_id except AttributeError: data_context_id = None anonymizer: Optional[Anonymizer] = _anonymizers.get(data_context_id, None) if anonymizer is None: anonymizer = Anonymizer(data_context_id) _anonymizers[data_context_id] = anonymizer payload: dict = {} if usage_statistics_handler: # noinspection PyBroadException try: anonymizer = usage_statistics_handler.anonymizer # noqa: F821 resolved_runtime_kwargs: dict = ( CheckpointConfig.resolve_config_using_acceptable_arguments( *(checkpoint,), **kwargs ) ) payload: dict = anonymizer.anonymize( *(checkpoint,), **resolved_runtime_kwargs ) except Exception as e: logger.debug( f"{UsageStatsExceptionPrefix.EMIT_EXCEPTION.value}: {e} type: {type(e)}, get_checkpoint_run_usage_statistics: Unable to create anonymized_checkpoint_run payload field" ) return payload