{"record":{"id":"712c02b7f67c8d7d","repo":"mlflow/mlflow","slug":"self-class-name-does-not-support-list-we","errorCode":null,"errorMessage":"{self.__class__.__name__} does not support list_webhooks","messagePattern":"(.+?) does not support list_webhooks","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"mlflow/store/model_registry/abstract_store.py","lineNumber":1233,"sourceCode":"        \"\"\"\n        raise NotImplementedError(f\"{self.__class__.__name__} does not support get_webhook\")\n\n    def list_webhooks(\n        self,\n        max_results: int | None = None,\n        page_token: str | None = None,\n    ) -> PagedList[Webhook]:\n        \"\"\"\n        List webhooks in the backend store.\n\n        Args:\n            max_results: Maximum number of webhooks to return.\n            page_token: Token specifying the next page of results.\n\n        Returns:\n            A :py:class:`mlflow.store.entities.paged_list.PagedList` of Webhook objects.\n        \"\"\"\n        raise NotImplementedError(f\"{self.__class__.__name__} does not support list_webhooks\")\n\n    def list_webhooks_by_event(\n        self,\n        event: WebhookEvent,\n        max_results: int | None = None,\n        page_token: str | None = None,\n    ) -> PagedList[Webhook]:\n        \"\"\"\n        List webhooks filtered by event type.\n\n        Args:\n            event: The webhook event to filter by.\n            max_results: Maximum number of webhooks to return.\n            page_token: Token specifying the next page of results.\n\n        Returns:\n            A :py:class:`mlflow.store.entities.paged_list.PagedList` of Webhook objects\n            that are subscribed to the specified event.","sourceCodeStart":1215,"sourceCodeEnd":1251,"githubUrl":"https://github.com/mlflow/mlflow/blob/6a27f2decc0b76eb1b54af31849784addb357dbc/mlflow/store/model_registry/abstract_store.py#L1215-L1251","documentation":"list_webhooks is declared in AbstractStore but only implemented by webhooks-capable backends; elsewhere it raises NotImplementedError naming the store class. The message identifies which backend lacks the feature.","triggerScenarios":"Calling MlflowClient.list_webhooks(...) (or list_webhooks_by_event) against a registry store without webhook support, such as the local SQLAlchemy/file store or a minimal custom subclass.","commonSituations":"Local development against a file-based registry while production uses Databricks, older servers without the webhook endpoint, or feature-detection code that assumes list_webhooks always exists.","solutions":["Use a webhooks-capable registry backend","Upgrade MLflow server to a version supporting webhooks","Feature-detect with try/except NotImplementedError before listing","Implement list_webhooks in your custom store subclass"],"exampleFix":"// before\nfor wh in client.list_webhooks():\n    ...\n// after\ntry:\n    for wh in client.list_webhooks():\n        ...\nexcept NotImplementedError:\n    logger.warning(\"Webhooks unsupported by this backend\")","handlingStrategy":"try-catch","validationCode":null,"typeGuard":"def supports_webhooks(store) -> bool:\n    return type(store).list_webhooks is not AbstractStore.list_webhooks","tryCatchPattern":"try:\n    hooks = client.list_webhooks()\nexcept NotImplementedError:\n    hooks = []  # no webhook support in this backend","preventionTips":["Treat webhook listing as optional when supporting multiple backends","Test against the production backend, not just local file stores","Centralize backend capability checks in a helper module"],"tags":["mlflow","model-registry","webhooks","not-implemented"],"backgroundTag":"not-implemented","analyzedSha":"6a27f2decc0b76eb1b54af31849784addb357dbc","analyzedAt":"2026-08-29T20:54:51.419Z","schemaVersion":2},"datasetVersion":"2026-08-29T22:17:34.462Z"}