Open delegation: Feast-enhanced client first, raw mlflow fallback. Lookup order for ``feast.mlflow. ``: 1. If ``FeastMlflowClient`` has a public attribute *name*, return it. This gives Feast-enhanced versions of ``start_run``, ``log_model``, ``register_model``, ``load_mo
(name: str)
| 112 | |
| 113 | |
| 114 | def __getattr__(name: str) -> Any: |
| 115 | """Open delegation: Feast-enhanced client first, raw mlflow fallback. |
| 116 | |
| 117 | Lookup order for ``feast.mlflow.<name>``: |
| 118 | |
| 119 | 1. If ``FeastMlflowClient`` has a public attribute *name*, return it. |
| 120 | This gives Feast-enhanced versions of ``start_run``, ``log_model``, |
| 121 | ``register_model``, ``load_model``, etc. |
| 122 | 2. Otherwise, fall back to the raw ``mlflow`` module. This makes |
| 123 | ``feast.mlflow.log_params``, ``feast.mlflow.set_tag``, |
| 124 | ``feast.mlflow.MlflowClient``, etc. work without any wrappers. |
| 125 | """ |
| 126 | if name.startswith("_"): |
| 127 | raise AttributeError(f"module 'feast.mlflow' has no attribute {name!r}") |
| 128 | |
| 129 | client = _ensure_client() |
| 130 | |
| 131 | client_attr = getattr(client, name, _MISSING) |
| 132 | if client_attr is not _MISSING: |
| 133 | return client_attr |
| 134 | |
| 135 | mlflow_attr = getattr(client._mlflow, name, _MISSING) |
| 136 | if mlflow_attr is not _MISSING: |
| 137 | return mlflow_attr |
| 138 | |
| 139 | raise AttributeError(f"module 'feast.mlflow' has no attribute {name!r}") |
nothing calls this directly
no test coverage detected