class_docstr: Context for MetricFlow CLI.
docstr: Property accessor for all dbt artifacts, used for powering the sql client (among other things).
docstr_tok: ["Property","accessor","for","all","dbt","artifacts",",","used","for","powering","the","sql","client","(","among","other","things",")","."]
code: def dbt_artifacts(self) -> dbtArtifacts:
      """Property accessor for all dbt artifacts, used for powering the sql client (among other things)."""
      if self._dbt_artifacts is None:
          self._dbt_artifacts = dbtArtifacts.load_from_project_metadata(
              self._dbt_project_metadata
          )
      return self._dbt_artifacts
  
imports: from __future__ import annotations
  import logging
  import pathlib
  from logging.handlers import TimedRotatingFileHandler
  from typing import Dict, Optional
  from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest
  from metricflow.cli.dbt_connectors.adapter_backed_client import AdapterBackedSqlClient
  from metricflow.cli.dbt_connectors.dbt_config_accessor import dbtArtifacts, dbtProjectMetadata
  from metricflow.engine.metricflow_engine import MetricFlowEngine
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.protocols.sql_client import SqlClient
label_desc: Use image node_id 4 for calling the CLIContext obj's underlying member method code with example usage: obj.dbt_artifacts() and returns: self