{"record":{"id":"2c74d2533ca53d05","repo":"redis/redis-py","slug":"command-info-is-intentionally-not-implemented-in-t","errorCode":null,"errorMessage":"COMMAND INFO is intentionally not implemented in the client.","messagePattern":"COMMAND INFO is intentionally not implemented in the client\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"redis/commands/core.py","lineNumber":1315,"sourceCode":"    def command(self: SyncClientProtocol, **kwargs) -> dict[str, dict[str, Any]]: ...\n\n    @overload\n    def command(\n        self: AsyncClientProtocol, **kwargs\n    ) -> Awaitable[dict[str, dict[str, Any]]]: ...\n\n    def command(\n        self, **kwargs\n    ) -> dict[str, dict[str, Any]] | Awaitable[dict[str, dict[str, Any]]]:\n        \"\"\"\n        Returns dict reply of details about all Redis commands.\n\n        For more information, see https://redis.io/commands/command\n        \"\"\"\n        return self.execute_command(\"COMMAND\", **kwargs)\n\n    def command_info(self, **kwargs) -> None:\n        raise NotImplementedError(\n            \"COMMAND INFO is intentionally not implemented in the client.\"\n        )\n\n    @overload\n    def command_count(self: SyncClientProtocol, **kwargs) -> int: ...\n\n    @overload\n    def command_count(self: AsyncClientProtocol, **kwargs) -> Awaitable[int]: ...\n\n    def command_count(self, **kwargs) -> int | Awaitable[int]:\n        return self.execute_command(\"COMMAND COUNT\", **kwargs)\n\n    @overload\n    def command_list(\n        self: SyncClientProtocol,\n        module: str | None = None,\n        category: str | None = None,\n        pattern: str | None = None,","sourceCodeStart":1297,"sourceCodeEnd":1333,"githubUrl":"https://github.com/redis/redis-py/blob/6a6b581b48225afa0b76912d1028c6035baee932/redis/commands/core.py#L1297-L1333","documentation":"Raised by command_info() (redis/commands/core.py:1315) which is a stub that unconditionally raises NotImplementedError. The method exists to occupy the command surface but deliberately does not implement COMMAND INFO, because the cluster client uses CommandsParser for command metadata internally and the public method was never wired. No arguments are accepted.","triggerScenarios":"Calling r.command_info() or r.command_info(\"GET\"). Any call, with or without arguments, raises immediately.","commonSituations":"Discovering command metadata programmatically (e.g. to inspect arity or key specs); or assuming command_info mirrors the CLI's COMMAND INFO.","solutions":["Send the command directly: r.execute_command(\"COMMAND\", \"INFO\", \"GET\")","Use r.command() to get details about all commands, or r.command_list() to enumerate names","Use r.command_getkeysandflags(*args) if you only need the keys of a command"],"exampleFix":"# before\nr.command_info(\"GET\")\n# after\nr.execute_command(\"COMMAND\", \"INFO\", \"GET\")","handlingStrategy":"fallback","validationCode":"# command_info() is intentionally unimplemented; route to execute_command\ndef command_info(r, *names):\n    return r.execute_command(\"COMMAND\", \"INFO\", *names)","typeGuard":null,"tryCatchPattern":"try:\n    r.command_info()\nexcept NotImplementedError:\n    info = r.execute_command(\"COMMAND\", \"INFO\", \"GET\")","preventionTips":["Do not call command_info(); it is a permanent stub.","Wrap execute_command('COMMAND','INFO',...) in a helper if you need it regularly.","Use command_list() and command() for the supported introspection surface."],"tags":["command-introspection","notimplemented","intentional"],"backgroundTag":null,"analyzedSha":"6a6b581b48225afa0b76912d1028c6035baee932","analyzedAt":"2026-08-10T12:52:44.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}