Skip to content

Commit 2e46872

Browse files
committed
Fixes #1240
The cache store assumed that every persister took a `path` argument. That is not the case because the savers / loaders wrap external APIs and we decided to not try to create our own abstraction layer around them, and instead mirror them. E.g. polars takes `file`, but pandas takes `path`.
1 parent 0bbc7f8 commit 2e46872

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

hamilton/caching/stores/file.py

+19-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import inspect
12
import shutil
23
from pathlib import Path
34
from typing import Any, Optional
@@ -68,8 +69,24 @@ def set(
6869
if saver_cls is not None:
6970
# materialized_path
7071
materialized_path = self._materialized_path(data_version, saver_cls)
71-
saver = saver_cls(path=str(materialized_path.absolute()))
72-
loader = loader_cls(path=str(materialized_path.absolute()))
72+
saver_argspec = inspect.getfullargspec(saver_cls.__init__)
73+
loader_argspec = inspect.getfullargspec(loader_cls.__init__)
74+
if "file" in saver_argspec.args:
75+
saver = saver_cls(file=str(materialized_path.absolute()))
76+
elif "path" in saver_argspec.args:
77+
saver = saver_cls(path=str(materialized_path.absolute()))
78+
else:
79+
raise ValueError(
80+
f"Saver [{saver_cls.name()}] must have either `file` or `path` as an argument."
81+
)
82+
if "file" in loader_argspec.args:
83+
loader = loader_cls(file=str(materialized_path.absolute()))
84+
elif "path" in loader_argspec.args:
85+
loader = loader_cls(path=str(materialized_path.absolute()))
86+
else:
87+
raise ValueError(
88+
f"Loader [{loader_cls.name()}] must have either `file` or `path` as an argument."
89+
)
7390
else:
7491
saver = None
7592
loader = None

0 commit comments

Comments
 (0)