feat(webdav): add bearer_token_command for dynamic token acquisition (#10917)

Co-authored-by: GreenHatHG <[email protected]>
Co-authored-by: skshetry <[email protected]>
This commit is contained in:
Wyatt
2025-12-05 11:07:22 +05:45
committed by GitHub
co-authored by GreenHatHG skshetry
parent 0eb279ea35
commit f342cc7db5
3 changed files with 30 additions and 1 deletions
+1
View File
@@ -151,6 +151,7 @@ WEBDAV_COMMON = {
"password": str, "password": str,
"ask_password": Bool, "ask_password": Bool,
"token": str, "token": str,
"bearer_token_command": str,
"custom_auth_header": str, "custom_auth_header": str,
"cert_path": str, "cert_path": str,
"key_path": str, "key_path": str,
+1 -1
View File
@@ -124,7 +124,7 @@ tests = [
"sqlalchemy>=1,<3", # optional dependency for `import-db` "sqlalchemy>=1,<3", # optional dependency for `import-db`
"pandas>=1", # optional dependency for `import-db` "pandas>=1", # optional dependency for `import-db`
] ]
webdav = ["dvc-webdav>=3,<4"] webdav = ["dvc-webdav>=3.0.1,<4"]
webhdfs = ["dvc-webhdfs>=3.1,<4"] webhdfs = ["dvc-webhdfs>=3.1,<4"]
webhdfs_kerberos = ["dvc-webhdfs[kerberos]>=3.1,<4"] webhdfs_kerberos = ["dvc-webhdfs[kerberos]>=3.1,<4"]
+28
View File
@@ -153,3 +153,31 @@ def test_remote_with_jobs(dvc, base_url, fs_cls):
assert config["user"] == "admin" assert config["user"] == "admin"
assert f"{scheme}://{user}@example.com" in config["host"] assert f"{scheme}://{user}@example.com" in config["host"]
assert cls is fs_cls assert cls is fs_cls
def test_bearer_token_command(mocker):
mock_auth_obj = mocker.Mock()
mock_get_auth = mocker.patch(
"dvc_webdav.get_bearer_auth", return_value=mock_auth_obj
)
command = "my-token-cmd.sh"
timeout = 10
# Configuration with potential conflicts
config = {
"url": url,
"token": "static-token-value",
"user": "conflict-user",
"password": "conflict-password",
"bearer_token_command": command,
"timeout": timeout,
}
fs = WebDAVFileSystem(**config)
# the factory function was invoked with the correct arguments from the config.
mock_get_auth.assert_called_once_with(command, timeout)
# the generated auth object is correctly injected into `fs_args`.
assert fs.fs_args["auth"] == mock_auth_obj