def test_build_data_docs_skipping_index_does_not_build_index( tmp_path_factory, ): # TODO What's the latest and greatest way to use configs rather than my hackery? empty_directory = str(tmp_path_factory.mktemp("empty")) DataContext.create(empty_directory) ge_dir = os.path.join(empty_directory, DataContext.GE_DIR) context = DataContext(ge_dir) config = context.get_config() config.data_docs_sites = { "local_site": { "class_name": "SiteBuilder", "store_backend": { "class_name": "TupleFilesystemStoreBackend", "base_directory": os.path.join("uncommitted", "data_docs"), }, }, } context._project_config = config # TODO Workaround project config programmatic config manipulation # statefulness issues by writing to disk and re-upping a new context context._save_project_config() del context context = DataContext(ge_dir) data_docs_dir = os.path.join(ge_dir, "uncommitted", "data_docs") index_path = os.path.join(data_docs_dir, "index.html") assert not os.path.isfile(index_path) context.build_data_docs(build_index=False) assert os.path.isdir(os.path.join(data_docs_dir, "static")) assert not os.path.isfile(index_path)
def test_store_list_with_one_store(caplog, empty_data_context): project_dir = empty_data_context.root_directory context = DataContext(project_dir) del (context._project_config.stores)["validations_store"] del (context._project_config.stores)["evaluation_parameter_store"] context._project_config.validations_store_name = "expectations_store" context._project_config.evaluation_parameter_store_name = "expectations_store" context._save_project_config() runner = CliRunner(mix_stderr=False) expected_result = """\ 1 Store found:[0m [0m - [36mname:[0m expectations_store[0m [36mclass_name:[0m ExpectationsStore[0m [36mstore_backend:[0m[0m [36mclass_name:[0m TupleFilesystemStoreBackend[0m [36mbase_directory:[0m expectations/[0m""" result = runner.invoke( cli, "store list -d {}".format(project_dir), catch_exceptions=False, ) assert result.exit_code == 0 assert result.output.strip() == expected_result assert_no_logging_messages_or_tracebacks(caplog, result)
def test_validation_operator_list_with_multiple_validation_operators( caplog, empty_data_context): project_dir = empty_data_context.root_directory runner = CliRunner(mix_stderr=False) context = DataContext(project_dir) context.add_validation_operator( "my_validation_operator", { "class_name": "WarningAndFailureExpectationSuitesValidationOperator", "action_list": [ { "name": "store_validation_result", "action": { "class_name": "StoreValidationResultAction" }, }, { "name": "store_evaluation_params", "action": { "class_name": "StoreEvaluationParametersAction" }, }, { "name": "update_data_docs", "action": { "class_name": "UpdateDataDocsAction" }, }, ], "base_expectation_suite_name": "new-years-expectations", "slack_webhook": "https://hooks.slack.com/services/dummy", }, ) context._save_project_config() expected_result = """[33mHeads up! This feature is Experimental. It may change. Please give us your feedback![0m[0m 2 Validation Operators found:[0m [0m - [36mname:[0m action_list_operator[0m [36mclass_name:[0m ActionListValidationOperator[0m [36maction_list:[0m store_validation_result (StoreValidationResultAction) => store_evaluation_params (StoreEvaluationParametersAction) => update_data_docs (UpdateDataDocsAction)[0m [0m - [36mname:[0m my_validation_operator[0m [36mclass_name:[0m WarningAndFailureExpectationSuitesValidationOperator[0m [36maction_list:[0m store_validation_result (StoreValidationResultAction) => store_evaluation_params (StoreEvaluationParametersAction) => update_data_docs (UpdateDataDocsAction)[0m [36mbase_expectation_suite_name:[0m new-years-expectations[0m [36mslack_webhook:[0m https://hooks.slack.com/services/dummy[0m""" result = runner.invoke( cli, "validation-operator list -d {}".format(project_dir), catch_exceptions=False, ) assert result.exit_code == 0 # _capture_ansi_codes_to_file(result) assert result.output.strip() == expected_result assert_no_logging_messages_or_tracebacks(caplog, result)
def test_existing_local_data_docs_urls_returns_single_url_from_customized_local_site( tmp_path_factory, ): empty_directory = str(tmp_path_factory.mktemp("yo_yo")) DataContext.create(empty_directory) ge_dir = os.path.join(empty_directory, DataContext.GE_DIR) context = DataContext(ge_dir) context._project_config["data_docs_sites"] = { "my_rad_site": { "class_name": "SiteBuilder", "store_backend": { "class_name": "TupleFilesystemStoreBackend", "base_directory": "uncommitted/data_docs/some/local/path/", }, } } # TODO Workaround project config programmatic config manipulation # statefulness issues by writing to disk and re-upping a new context context._save_project_config() context = DataContext(ge_dir) context.build_data_docs() expected_path = os.path.join( ge_dir, "uncommitted/data_docs/some/local/path/index.html") assert os.path.isfile(expected_path) obs = context.get_docs_sites_urls() assert obs == [{ "site_name": "my_rad_site", "site_url": "file://{}".format(expected_path) }]
def test_store_list_with_zero_stores(caplog, empty_data_context): project_dir = empty_data_context.root_directory context = DataContext(project_dir) context._project_config.stores = {} context._save_project_config() runner = CliRunner(mix_stderr=False) with pytest.raises(InvalidConfigurationYamlError): runner.invoke( cli, "store list -d {}".format(project_dir), catch_exceptions=False, )
def test_validation_operator_list_with_zero_validation_operators(caplog, empty_data_context): project_dir = empty_data_context.root_directory context = DataContext(project_dir) context._project_config.validation_operators = {} context._save_project_config() runner = CliRunner(mix_stderr=False) result = runner.invoke( cli, "validation-operator list -d {}".format(project_dir), catch_exceptions=False, ) assert result.exit_code == 0 assert "No Validation Operators found" in result.output assert_no_logging_messages_or_tracebacks(caplog, result)
def test_store_list_with_zero_stores(caplog, empty_data_context): project_dir = empty_data_context.root_directory context = DataContext(project_dir) context._project_config.stores = {} context._save_project_config() runner = CliRunner(mix_stderr=False) result = runner.invoke( cli, "store list -d {}".format(project_dir), catch_exceptions=False, ) assert result.exit_code == 1 assert ( "Your configuration file is not a valid yml file likely due to a yml syntax error" in result.output.strip() ) assert_no_logging_messages_or_tracebacks(caplog, result)
def context_with_two_sites(titanic_data_context_stats_enabled_config_version_3): context = titanic_data_context_stats_enabled_config_version_3 config = context.get_config_with_variables_substituted() config.data_docs_sites["team_site"] = { "class_name": "SiteBuilder", "store_backend": { "class_name": "TupleFilesystemStoreBackend", "base_directory": "uncommitted/data_docs/team_site/", }, "site_index_builder": {"class_name": "DefaultSiteIndexBuilder"}, } temp_context = BaseDataContext(config, context_root_dir=context.root_directory) new_context = DataContext(context.root_directory) new_context.set_config(temp_context.get_config_with_variables_substituted()) new_context._save_project_config() assert new_context.get_site_names() == ["local_site", "team_site"] return new_context
def test_validation_operator_list_with_zero_validation_operators( caplog, empty_data_context): project_dir = empty_data_context.root_directory context = DataContext(project_dir) context._project_config.validation_operators = {} context._save_project_config() runner = CliRunner(mix_stderr=False) result = runner.invoke( cli, f"validation-operator list -d {project_dir}", catch_exceptions=False, ) assert result.exit_code == 0 assert "No Validation Operators found" in result.output assert_no_logging_messages_or_tracebacks( my_caplog=caplog, click_result=result, allowed_deprecation_message=VALIDATION_OPERATORS_DEPRECATION_MESSAGE, )
def test_store_list_with_two_stores(caplog, empty_data_context, monkeypatch): project_dir = empty_data_context.root_directory context = DataContext(project_dir) del context._project_config.stores["validations_store"] del context._project_config.stores["evaluation_parameter_store"] context._project_config.validations_store_name = "expectations_store" context._project_config.evaluation_parameter_store_name = "expectations_store" context._save_project_config() runner = CliRunner(mix_stderr=False) monkeypatch.chdir(os.path.dirname(project_dir)) expected_result = """\ 2 Stores found:[0m [0m - [36mname:[0m expectations_store[0m [36mclass_name:[0m ExpectationsStore[0m [36mstore_backend:[0m[0m [36mclass_name:[0m TupleFilesystemStoreBackend[0m [36mbase_directory:[0m expectations/[0m [0m - [36mname:[0m checkpoint_store[0m [36mclass_name:[0m CheckpointStore[0m [36mstore_backend:[0m[0m [36mclass_name:[0m TupleFilesystemStoreBackend[0m [36mbase_directory:[0m checkpoints/[0m [36msuppress_store_backend_id:[0m True[0m""" result = runner.invoke( cli, f"--v3-api store list", catch_exceptions=False, ) assert result.exit_code == 0 assert result.output.strip() == expected_result assert_no_logging_messages_or_tracebacks(caplog, result)