{"id":"f71f65d12e0f57e4","repo":"redis/redis-py","slug":"hello-is-intentionally-not-implemented-in-the-clie","errorCode":null,"errorMessage":"HELLO is intentionally not implemented in the client.","messagePattern":"HELLO is intentionally not implemented in the client\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"redis/commands/core.py","lineNumber":2292,"sourceCode":"    ) -> list[int] | Awaitable[list[int]]:\n        \"\"\"\n        This command blocks the current client until all previous write\n        commands by that client are acknowledged as having been fsynced\n        to the AOF of the local Redis and/or at least the specified number\n        of replicas.\n\n        For more information, see https://redis.io/commands/waitaof\n        \"\"\"\n        return self.execute_command(\n            \"WAITAOF\", num_local, num_replicas, timeout, **kwargs\n        )\n\n    def hello(self):\n        \"\"\"\n        This function throws a NotImplementedError since it is intentionally\n        not supported.\n        \"\"\"\n        raise NotImplementedError(\n            \"HELLO is intentionally not implemented in the client.\"\n        )\n\n    def failover(self):\n        \"\"\"\n        This function throws a NotImplementedError since it is intentionally\n        not supported.\n        \"\"\"\n        raise NotImplementedError(\n            \"FAILOVER is intentionally not implemented in the client.\"\n        )\n\n    @overload\n    def hotkeys_start(\n        self: SyncClientProtocol,\n        metrics: List[HotkeysMetricsTypes],\n        count: int | None = None,\n        duration: int | None = None,","sourceCodeStart":2274,"sourceCodeEnd":2310,"githubUrl":"https://github.com/redis/redis-py/blob/da03cdc7e8731092b13e395605c3c1fb2de25de1/redis/commands/core.py#L2274-L2310","documentation":"hello is a stub that always raises NotImplementedError. The HELLO command negotiates the RESP protocol version and authentication; redis-py handles protocol negotiation internally (via the protocol parameter on the client/connection) rather than exposing a raw HELLO method, so calling it manually would conflict with the client's own handshake.","triggerScenarios":"Calling r.hello() directly. Auto-generated command wrappers invoking every method. Copying redis-cli HELLO usage into Python.","commonSituations":"Developer wants to switch protocol versions at runtime. Migrating from another client that exposed HELLO. Testing RESP3 negotiation manually.","solutions":["Set protocol=3 or protocol=2 on the Redis() client/connection constructor to negotiate at connect time.","Set password/username on the client for authentication instead of HELLO AUTH.","Use r.execute_command('HELLO', proto) only if you understand the handshake implications."],"exampleFix":"# before\nr.hello()\n# after\nimport redis\nr = redis.Redis(host='localhost', protocol=3)  # negotiate RESP3 at connect time","handlingStrategy":"validation","validationCode":"# do not call hello(); configure protocol at construction time\nimport redis\nr = redis.Redis(protocol=3, username=..., password=...)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Protocol negotiation and auth are handled by the client constructor — never call HELLO directly.","Use the protocol= and credential= kwargs on Redis() to configure RESP2/RESP3."],"tags":["not-implemented","protocol","handshake","resp3"],"analyzedSha":"da03cdc7e8731092b13e395605c3c1fb2de25de1","analyzedAt":"2026-08-04T20:26:47.563Z","schemaVersion":2}