diff --git a/.github/workflows/tests-dbt-version.yml b/.github/workflows/tests-dbt-version.yml index 5abfbcc..e839842 100644 --- a/.github/workflows/tests-dbt-version.yml +++ b/.github/workflows/tests-dbt-version.yml @@ -26,7 +26,7 @@ jobs: pip install -q coverage pylint pip install -q dbt-core==${{ inputs.dbt-version }}.* dbt-duckdb==${{ inputs.dbt-version }}.* --force-reinstall --upgrade # FIX for protobuf issue: https://github.com/dbt-labs/dbt-core/issues/9759 - pip install -q "apache-airflow<3.0.0" "protobuf>=4.25.3,<5.0.0" "opentelemetry-proto<1.28.0" --prefer-binary + pip install -q "apache-airflow<3.0.0" "opentelemetry-proto<1.28.0" --prefer-binary pip install -q .[test] --prefer-binary pip install -q dbt-core==${{ inputs.dbt-version }}.* dbt-duckdb==${{ inputs.dbt-version }}.* --force-reinstall --upgrade python --version diff --git a/opendbt/__main__.py b/opendbt/__main__.py index fec1134..13ecb70 100644 --- a/opendbt/__main__.py +++ b/opendbt/__main__.py @@ -1,19 +1,39 @@ import argparse +import os from pathlib import Path from opendbt import OpenDbtCli, default_project_dir, default_profiles_dir +class EnvDefault(argparse.Action): + def __init__( + self, option_strings, dest, envvar, required=True, default=None, **kwargs + ): + default = os.environ.get(envvar, default) + if required and default: + required = False + super().__init__( + option_strings, dest, default=default, required=required, **kwargs + ) + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, values) + + def main(): parser = argparse.ArgumentParser(description="OpenDBT CLI") parser.add_argument( "--project-dir", default=None, + action=EnvDefault, + envvar="DBT_PROJECT_DIR", help="Path to the dbt project directory. Defaults to the DBT_PROJECT_DIR environment variable or the current working directory.", ) parser.add_argument( "--profiles-dir", default=None, + action=EnvDefault, + envvar="DBT_PROFILES_DIR", help="Path to the dbt profiles directory. Defaults to the DBT_PROFILES_DIR environment variable.", ) ns, args = parser.parse_known_args()