dbt-labs/dbt-core · error · minijinja::Error::InvalidOperation

In adapter.dispatch, got a macro name of "{macro_name}", but

Error message

In adapter.dispatch, got a macro name of "{macro_name}", but "." is not a valid macro name component. Did you mean `adapter.dispatch("{parts[1]}", macro_namespace="{parts[0]}")`?

What it means

`adapter.dispatch` resolves macros at runtime, and macro names may not contain a dot. When a name like `package.macro_name` is passed, the library raises `InvalidOperation` and suggests the correct form: pass the bare macro name positionally and the package via the `macro_namespace` keyword argument. This mirrors upstream dbt's dispatch validation.

Source

Thrown at crates/dbt-adapter/src/adapter/mod.rs:1852

    ///
    /// https://github.com/dbt-labs/dbt-adapters/blob/main/dbt-adapters/src/dbt/adapters/base/impl.py#L226
    ///
    /// ```python
    /// def dispatch(
    ///     self,
    ///     macro_name: str,
    ///     macro_namespace: Optional[str] = None
    /// ) -> DispatchObject
    /// ```
    pub fn dispatch(&self, state: &State, args: &[Value]) -> Result<Value, minijinja::Error> {
        let iter = ArgsIter::new("dispatch", &["macro_name"], args);
        let macro_name = iter.next_arg::<&str>()?;
        let macro_namespace = iter.next_kwarg::<Option<&str>>("macro_namespace")?;
        iter.finish()?;

        if macro_name.contains('.') {
            let parts: Vec<&str> = macro_name.split('.').collect();
            return Err(minijinja::Error::new(
                minijinja::ErrorKind::InvalidOperation,
                format!(
                    "In adapter.dispatch, got a macro name of \"{}\", but \".\" is not a valid macro name component. Did you mean `adapter.dispatch(\"{}\", macro_namespace=\"{}\")`?",
                    macro_name, parts[1], parts[0]
                ),
            ));
        }

        Ok(Value::from_object(DispatchObject {
            macro_name: macro_name.to_string(),
            package_name: macro_namespace.map(|s| s.to_string()),
            strict: false,
            auto_execute: false,
            context: Some(state.get_base_context()),
        }))
    }

    /// Nest column data types for BigQuery STRUCT/ARRAY types.

View on GitHub (pinned to 0267ce9170)

Solutions

  1. Split the qualified name: pass the part after the dot as the first argument.
  2. Pass the part before the dot as `macro_namespace='...'`.
  3. Search the project for `adapter.dispatch(` calls containing a `.` and fix them all.
  4. If the dot was accidental, remove it so the name is a bare macro name.

Example fix

// before (Jinja)
{% set my_macro = adapter.dispatch('my_package.my_macro') %}
// after
{% set my_macro = adapter.dispatch('my_macro', macro_namespace='my_package') %}
Defensive patterns

Strategy: validation

Validate before calling

{# Jinja #}
{% if '.' in macro_name %}
  {% set parts = macro_name.split('.') %}
  {% set macro_name, ns = parts[1], parts[0] %}
{% endif %}
{% do adapter.dispatch(macro_name, macro_namespace=ns) %}

Type guard

function isValidMacroName(name) { return typeof name === 'string' && !name.includes('.'); }

Try / catch

{% try %}
  {% set fn = adapter.dispatch(macro_name) %}
{% except %}
  {{ log('dispatch failed for ' ~ macro_name ~ ': split on . and use macro_namespace', info=true) }}
{% endtry %}

Prevention

When it happens

Trigger: Calling `adapter.dispatch('my_package.my_macro')` or `adapter.dispatch('namespace.macro', ...)` from Jinja — any macro name containing `.`.

Common situations: Copy-pasted `{{ package }}__macro` conventions from Python dbt; users converting `ref()`-style qualified names to dispatch; older macros written before `macro_namespace` was introduced.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07). Data as JSON: /api/errors/c5c9cda1dbd11764. Report an issue: GitHub.