fix(storages): 令牌缓存失效范围限定为当前存储凭据

This commit is contained in:
okatu-loli
2026-08-08 01:39:34 +08:00
committed by jxxghp
parent 7650ec5cef
commit 2bf2d89c52
3 changed files with 53 additions and 3 deletions

View File

@@ -1274,9 +1274,17 @@ def cached(region: Optional[str] = None, maxsize: Optional[int] = 1024, ttl: Opt
cache_key, cached_value, cache_region
)
async def cache_delete(*args, **kwargs) -> None:
"""
删除当前参数对应的缓存。
"""
cache_key = __get_cache_key(args, kwargs)
await cache_backend.delete(cache_key, region=cache_region)
async_wrapper.cache_region = cache_region
async_wrapper.cache_clear = cache_clear
async_wrapper.cache_exists = cache_exists
async_wrapper.cache_delete = cache_delete
return async_wrapper
else:
# 同步函数使用同步缓存后端
@@ -1317,9 +1325,17 @@ def cached(region: Optional[str] = None, maxsize: Optional[int] = 1024, ttl: Opt
cache_key, cached_value, cache_region
)
def cache_delete(*args, **kwargs) -> None:
"""
删除当前参数对应的缓存。
"""
cache_key = __get_cache_key(args, kwargs)
cache_backend.delete(cache_key, region=cache_region)
wrapper.cache_region = cache_region
wrapper.cache_clear = cache_clear
wrapper.cache_exists = cache_exists
wrapper.cache_delete = cache_delete
return wrapper
return decorator

View File

@@ -47,7 +47,10 @@ class Alist(StorageBase, metaclass=WeakSingleton):
"""
初始化
"""
self.__login_token.cache_clear() # noqa
conf = self.get_conf()
self.__login_token.cache_delete( # noqa
self, self.__get_base_url, conf.get("username"), conf.get("password")
)
def _delay_get_item(
self, path: Path, /, refresh: bool = False

View File

@@ -19,9 +19,9 @@ class _FakeResponse:
@pytest.fixture
def clear_token_cache():
Alist().init_storage()
Alist._Alist__login_token.cache_clear() # noqa
yield
Alist().init_storage()
Alist._Alist__login_token.cache_clear() # noqa
def test_alistgo_schema_registered():
@@ -61,3 +61,34 @@ def test_alistgo_token_isolated_from_alist(clear_token_cache):
assert alistgo._Alist__generate_token() == "token-alistgo" # noqa
assert request_utils.post_res.call_count == 2
def test_init_storage_keeps_other_storage_token(clear_token_cache):
def _conf(storage):
return {
"url": f"http://{storage.schema.value}.test",
"username": "user",
"password": "pass",
}
responses = [
_FakeResponse({"code": 200, "message": "success", "data": {"token": "token-alist"}}),
_FakeResponse({"code": 200, "message": "success", "data": {"token": "token-alistgo"}}),
_FakeResponse({"code": 200, "message": "success", "data": {"token": "token-alistgo-new"}}),
]
request_utils = MagicMock()
request_utils.post_res.side_effect = responses
alist = Alist()
alistgo = AlistGo()
with patch.object(Alist, "get_conf", _conf):
with patch.object(alist_module, "RequestUtils", return_value=request_utils):
assert alist._Alist__generate_token() == "token-alist" # noqa
assert alistgo._Alist__generate_token() == "token-alistgo" # noqa
alistgo.init_storage()
assert alist._Alist__generate_token() == "token-alist" # noqa
assert alistgo._Alist__generate_token() == "token-alistgo-new" # noqa
assert request_utils.post_res.call_count == 3