Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Touch up init, fix missing adapter errors #3483

Merged
merged 2 commits into from
Jun 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
### Under the hood
- Improve default view and table materialization performance by checking relational cache before attempting to drop temp relations ([#3112](https://github.com/fishtown-analytics/dbt/issues/3112), [#3468](https://github.com/fishtown-analytics/dbt/pull/3468))
- Add optional `sslcert`, `sslkey`, and `sslrootcert` profile arguments to the Postgres connector. ([#3472](https://github.com/fishtown-analytics/dbt/pull/3472), [#3473](https://github.com/fishtown-analytics/dbt/pull/3473))
- Move the example project used by `dbt init` into `dbt` repository, to avoid cloning an external repo ([#3005](https://github.com/fishtown-analytics/dbt/pull/3005), [#3474](https://github.com/fishtown-analytics/dbt/pull/3474))
- Better interaction between `dbt init` and adapters. Avoid raising errors while initializing a project ([#2814](https://github.com/fishtown-analytics/dbt/pull/2814), [#3483](https://github.com/fishtown-analytics/dbt/pull/3483))

Contributors:
- [@kostek-pl](https://github.com/kostek-pl) ([#3236](https://github.com/fishtown-analytics/dbt/pull/3408))
Expand Down
1 change: 0 additions & 1 deletion core/dbt/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,6 @@ def _build_init_subparser(subparsers, base_subparser):
)
sub.add_argument(
'--adapter',
default='redshift',
type=str,
help='''
Write sample profiles.yml for which adapter
Expand Down
43 changes: 26 additions & 17 deletions core/dbt/task/init.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@

import dbt.config
import dbt.clients.system
from dbt.version import _get_adapter_plugin_names
from dbt.adapters.factory import load_plugin, get_include_paths
from dbt.exceptions import RuntimeException

from dbt.logger import GLOBAL_LOGGER as logger

Expand All @@ -13,14 +13,14 @@
from dbt.task.base import BaseTask

DOCS_URL = 'https://docs.getdbt.com/docs/configure-your-profile'
SLACK_URL = 'https://community.getdbt.com/'

# This file is not needed for the starter project but exists for finding the resource path
IGNORE_FILE = "__init__.py"

ON_COMPLETE_MESSAGE = """
Your new dbt project "{project_name}" was created! If this is your first time
using dbt, you'll need to set up your profiles.yml file (we've created a sample
file for you to connect to {sample_adapter}) -- this file will tell dbt how
using dbt, you'll need to set up your profiles.yml file -- this file will tell dbt how
to connect to your database. You can find this file by running:

{open_cmd} {profiles_path}
Expand All @@ -32,8 +32,11 @@

One more thing:

Need help? Don't hesitate to reach out to us via GitHub issues or on Slack --
There's a link to our Slack group in the GitHub Readme. Happy modeling!
Need help? Don't hesitate to reach out to us via GitHub issues or on Slack:

{slack_url}

Happy modeling!
"""


Expand All @@ -45,6 +48,8 @@ def copy_starter_repo(self, project_name):

def create_profiles_dir(self, profiles_dir):
if not os.path.exists(profiles_dir):
msg = "Creating dbt configuration folder at {}"
logger.info(msg.format(profiles_dir))
dbt.clients.system.make_directory(profiles_dir)
return True
return False
Expand All @@ -56,40 +61,44 @@ def create_profiles_file(self, profiles_file, sample_adapter):
sample_profiles_path = adapter_path / 'sample_profiles.yml'

if not sample_profiles_path.exists():
raise RuntimeException(f'No sample profile for {sample_adapter}')
logger.debug(f"No sample profile found for {sample_adapter}, skipping")
return False

if not os.path.exists(profiles_file):
msg = "With sample profiles.yml for {}"
logger.info(msg.format(sample_adapter))
shutil.copyfile(sample_profiles_path, profiles_file)
return True

return False

def get_addendum(self, project_name, profiles_path, sample_adapter):
def get_addendum(self, project_name, profiles_path):
open_cmd = dbt.clients.system.open_dir_cmd()

return ON_COMPLETE_MESSAGE.format(
open_cmd=open_cmd,
project_name=project_name,
sample_adapter=sample_adapter,
profiles_path=profiles_path,
docs_url=DOCS_URL
docs_url=DOCS_URL,
slack_url=SLACK_URL
)

def run(self):
project_dir = self.args.project_name
sample_adapter = self.args.adapter
if not sample_adapter:
try:
# pick first one available, often postgres
sample_adapter = next(_get_adapter_plugin_names())
except StopIteration:
logger.debug("No adapters installed, skipping")

profiles_dir = dbt.config.PROFILES_DIR
profiles_file = os.path.join(profiles_dir, 'profiles.yml')

msg = "Creating dbt configuration folder at {}"
logger.info(msg.format(profiles_dir))

msg = "With sample profiles.yml for {}"
logger.info(msg.format(sample_adapter))

self.create_profiles_dir(profiles_dir)
self.create_profiles_file(profiles_file, sample_adapter)
if sample_adapter:
self.create_profiles_file(profiles_file, sample_adapter)

if os.path.exists(project_dir):
raise RuntimeError("directory {} already exists!".format(
Expand All @@ -98,5 +107,5 @@ def run(self):

self.copy_starter_repo(project_dir)

addendum = self.get_addendum(project_dir, profiles_dir, sample_adapter)
addendum = self.get_addendum(project_dir, profiles_dir)
logger.info(addendum)