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 == ["file://{}".format(expected_path)]
def init(target_directory, view): """ Create a new project and help with onboarding. This guided input walks the user through setting up a new project and also onboards a new developer in an existing project. It scaffolds directories, sets up notebooks, creates a project file, and appends to a `.gitignore` file. """ target_directory = os.path.abspath(target_directory) ge_dir = _get_full_path_to_ge_dir(target_directory) ge_yml = os.path.join(ge_dir, DataContext.GE_YML) cli_message(GREETING) # TODO this should be a property if os.path.isfile(ge_yml): if DataContext.all_uncommitted_directories_exist(ge_dir) and \ DataContext.config_variables_yml_exist(ge_dir): # Ensure the context can be instantiated try: _ = DataContext(ge_dir) cli_message(PROJECT_IS_COMPLETE) except ge_exceptions.DataContextError as e: cli_message("<red>{}</red>".format(e)) exit(5) else: _complete_onboarding(target_directory) try: # if expectations exist, offer to build docs context = DataContext(ge_dir) if context.list_expectation_suite_keys(): if click.confirm(BUILD_DOCS_PROMPT, default=True): context.build_data_docs() context.open_data_docs() except ge_exceptions.DataContextError as e: cli_message("<red>{}</red>".format(e)) else: if not click.confirm(LETS_BEGIN_PROMPT, default=True): cli_message(RUN_INIT_AGAIN) exit(0) context, data_source_name, data_source_type = _create_new_project( target_directory) if not data_source_name: # no datasource was created return profile_datasource(context, data_source_name, open_docs=view, additional_batch_kwargs={"limit": 1000}) cli_message( """\n<cyan>Great Expectations is now set up in your project!</cyan>""" )
def init(target_directory): """ Create a new project and help with onboarding. This guided input walks the user through setting up a new project and also onboards a new developer in an existing project. It scaffolds directories, sets up notebooks, creates a project file, and appends to a `.gitignore` file. """ target_directory = os.path.abspath(target_directory) ge_dir = _get_full_path_to_ge_dir(target_directory) ge_yml = os.path.join(ge_dir, DataContext.GE_YML) cli_message(GREETING) # TODO this should be a property if os.path.isfile(ge_yml): if DataContext.all_uncommitted_directories_exist(ge_dir) and \ DataContext.config_variables_yml_exist(ge_dir): cli_message(PROJECT_IS_COMPLETE) else: _complete_onboarding(target_directory) try: # if expectations exist, offer to build docs context = DataContext(ge_dir) if context.list_expectation_suite_keys(): if click.confirm(BUILD_DOCS_PROMPT, default=True): context.build_data_docs() _open_data_docs_in_browser(context.root_directory) except ge_exceptions.DataContextError as e: cli_message("<red>{}</red>".format(e)) else: if not click.confirm(LETS_BEGIN_PROMPT, default=True): cli_message(RUN_INIT_AGAIN) exit(0) context, data_source_name = _create_new_project(target_directory) if not data_source_name: # no datasource was created return context = _slack_setup(context) profile_datasource(context, data_source_name) cli_message(MSG_GO_TO_NOTEBOOK)
def test_existing_local_data_docs_urls_returns_multiple_urls_from_customized_local_site( tmp_path_factory): empty_directory = str(tmp_path_factory.mktemp("yo_yo_ma")) 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/path/" } }, "another_just_amazing_site": { "class_name": "SiteBuilder", "store_backend": { "class_name": "TupleFilesystemStoreBackend", "base_directory": "uncommitted/data_docs/another/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() data_docs_dir = os.path.join(ge_dir, "uncommitted/data_docs/") path_1 = os.path.join(data_docs_dir, "some/path/index.html") path_2 = os.path.join(data_docs_dir, "another/path/index.html") for expected_path in [path_1, path_2]: assert os.path.isfile(expected_path) obs = context.get_docs_sites_urls() assert obs == [{ 'site_name': 'my_rad_site', 'site_url': "file://{}".format(path_1) }, { 'site_name': 'another_just_amazing_site', 'site_url': "file://{}".format(path_2) }]