{"record":{"id":"b6cc84a7d8c22622","repo":"redis/redis-py","slug":"prefix-must-be-provided","errorCode":null,"errorMessage":"prefix must be provided","messagePattern":"prefix must be provided","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"redis/commands/search/index_definition.py","lineNumber":48,"sourceCode":"        self._append_prefix(prefix)\n        self._append_filter(filter)\n        self._append_language(language_field, language)\n        self._append_score(score_field, score)\n        self._append_payload(payload_field)\n\n    def _append_index_type(self, index_type):\n        \"\"\"Append `ON HASH` or `ON JSON` according to the enum.\"\"\"\n        if index_type is IndexType.HASH:\n            self.args.extend([\"ON\", \"HASH\"])\n        elif index_type is IndexType.JSON:\n            self.args.extend([\"ON\", \"JSON\"])\n        elif index_type is not None:\n            raise RuntimeError(f\"index_type must be one of {list(IndexType)}\")\n\n    def _append_prefix(self, prefix):\n        \"\"\"Append PREFIX.\"\"\"\n        if prefix is None:\n            raise TypeError(\"prefix must be provided\")\n        if len(prefix) > 0:\n            prefix = list_or_args(prefix, [])\n            self.args.append(\"PREFIX\")\n            self.args.append(len(prefix))\n            for p in prefix:\n                self.args.append(p)\n\n    def _append_filter(self, filter):\n        \"\"\"Append FILTER.\"\"\"\n        if filter is not None:\n            self.args.append(\"FILTER\")\n            self.args.append(filter)\n\n    def _append_language(self, language_field, language):\n        \"\"\"Append LANGUAGE_FIELD and LANGUAGE.\"\"\"\n        if language_field is not None:\n            self.args.append(\"LANGUAGE_FIELD\")\n            self.args.append(language_field)","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/redis/redis-py/blob/6a6b581b48225afa0b76912d1028c6035baee932/redis/commands/search/index_definition.py#L30-L66","documentation":"Raised by IndexDefinition._append_prefix when the prefix argument is explicitly None. The RediSearch FT.CREATE auto-indexing definition requires a prefix list to know which keys to index; passing None is treated as a programming error rather than an empty prefix. Pass an empty list [] if you want a definition with no PREFIX constraint.","triggerScenarios":"Constructing IndexDefinition(prefix=None) (or omitting prefix after someone rebinds the default to None). The default is prefix=[], which is fine; only an explicit None triggers it.","commonSituations":"Calling code forwards an unset config value (e.g. from an env var or YAML that maps to None instead of []). Refactoring that drops the default. Code that treats None as 'not specified' across the whole IndexDefinition kwargs.","solutions":["Pass an empty list for an unrestricted definition: IndexDefinition(prefix=[]).","Normalize None to [] at the call site before constructing IndexDefinition: prefix=prefix or [].","If a prefix is genuinely required, supply the real key prefix(es), e.g. prefix=['doc:']."],"exampleFix":"// before\nIndexDefinition(prefix=None)\n// after\nIndexDefinition(prefix=[])\n// or\nIndexDefinition(prefix=['doc:'])","handlingStrategy":"validation","validationCode":"prefix = prefix if prefix is not None else []\nIndexDefinition(prefix=prefix)","typeGuard":"def is_prefix_list(p) -> bool:\n    return p is None or (isinstance(p, (list, tuple)) and all(isinstance(x, str) for x in p))","tryCatchPattern":"try:\n    IndexDefinition(prefix=prefix)\nexcept TypeError as e:\n    if 'prefix must be provided' in str(e):\n        prefix = prefix or []\n    else:\n        raise","preventionTips":["Never pass None for list-typed options; normalize None to [] at the boundary.","Keep IndexDefinition construction behind a factory that validates config."],"tags":["redisearch","index-definition","argument-validation"],"backgroundTag":null,"analyzedSha":"6a6b581b48225afa0b76912d1028c6035baee932","analyzedAt":"2026-08-10T12:52:44.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}