{"record":{"id":"560ea031f923272d","repo":"pola-rs/polars","slug":"cannot-use-credential-provider-when-passing-a-delt","errorCode":null,"errorMessage":"cannot use credential_provider when passing a DeltaTable object","messagePattern":"cannot use credential_provider when passing a DeltaTable object","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"py-polars/src/polars/io/delta/functions.py","lineNumber":318,"sourceCode":"    from polars.io.cloud.credential_provider._builder import (\n        _init_credential_provider_builder,\n    )\n\n    table: DeltaTable | None = None\n\n    if importlib.util.find_spec(\"deltalake\") is not None:\n        from deltalake import DeltaTable\n\n        if isinstance(source, DeltaTable):\n            table = source\n\n    if table is None:\n        credential_provider_builder = _init_credential_provider_builder(\n            credential_provider, source, storage_options, \"scan_delta\"\n        )\n    elif credential_provider is not None and credential_provider != \"auto\":\n        msg = \"cannot use credential_provider when passing a DeltaTable object\"\n        raise ValueError(msg)\n    else:\n        credential_provider_builder = None\n\n    del credential_provider\n\n    if table is not None and (\n        table._storage_options is not None or storage_options is not None\n    ):\n        storage_options = {\n            **(table._storage_options or {}),\n            **(storage_options or {}),\n        }\n\n    dataset = DeltaDataset(\n        table_=NoPickleOption(table),\n        table_uri_=str(source) if table is None else None,\n        version=version,\n        storage_options=storage_options,","sourceCodeStart":300,"sourceCodeEnd":336,"githubUrl":"https://github.com/pola-rs/polars/blob/fe841f959ef4d2ceefc05a310d33ed7b1ab24e5e/py-polars/src/polars/io/delta/functions.py#L300-L336","documentation":"When scan_delta receives a pre-constructed deltalake.DeltaTable object, a credential provider cannot be applied because credentials are resolved at catalog/storage time, not on an existing table handle. Passing credential_provider (other than 'auto') together with a DeltaTable raises ValueError.","triggerScenarios":"pl.scan_delta(delta_table_obj, credential_provider=my_provider) — i.e. table is a DeltaTable instance and credential_provider is not None/'auto'.","commonSituations":"Refactoring code from table-name/URI form to a DeltaTable object while leaving the credential_provider argument in place.","solutions":["Drop the credential_provider argument when passing a DeltaTable object","Construct the DeltaTable with credentials/storage_options itself (deltalake handles providers at load time)","Pass the table location string instead of the DeltaTable object if you need a custom credential provider"],"exampleFix":"// before\npl.scan_delta(delta_table, credential_provider=my_provider)\n// after\npl.scan_delta(delta_table)","handlingStrategy":"type-guard","validationCode":"if isinstance(table, DeltaTable) and credential_provider not in (None, 'auto'):\n    credential_provider = None","typeGuard":"from deltalake import DeltaTable\ndef is_delta_table_handle(t):\n    return isinstance(t, DeltaTable)","tryCatchPattern":"try:\n    lf = pl.scan_delta(table, credential_provider=cp)\nexcept ValueError as e:\n    if 'credential_provider' in str(e):\n        lf = pl.scan_delta(table)","preventionTips":["Never combine a DeltaTable object with credential_provider","Configure credentials on the DeltaTable itself via storage_options","Pass a location string if a custom credential provider is required"],"tags":["python","polars","delta-lake","credentials","invalid-argument"],"backgroundTag":"mutually-exclusive-options","analyzedSha":"fe841f959ef4d2ceefc05a310d33ed7b1ab24e5e","analyzedAt":"2026-09-18T22:14:11.667Z","contentChangedAt":"2026-09-18T22:14:11.667Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}