This is an automated email from the ASF dual-hosted git repository. potiuk pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push: new 90953d1e2f Allow non-str value for path concat (#35290) 90953d1e2f is described below commit 90953d1e2fb8d23665e7e4427fdb689a5c02a6a6 Author: Bolke de Bruin <bo...@xs4all.nl> AuthorDate: Tue Oct 31 21:17:54 2023 +0100 Allow non-str value for path concat (#35290) It was not possible to do path / int which is a typical thing when using date partioned files. --- airflow/io/store/path.py | 9 ++++++--- tests/io/store/test_store.py | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/airflow/io/store/path.py b/airflow/io/store/path.py index 7ee0971855..01f30fd446 100644 --- a/airflow/io/store/path.py +++ b/airflow/io/store/path.py @@ -88,7 +88,7 @@ class ObjectStoragePath(os.PathLike): protocol = "" key = "" - path = stringify_path(path) + path = str(stringify_path(path)) i = path.find("://") if i > 0: @@ -162,13 +162,16 @@ class ObjectStoragePath(os.PathLike): def __truediv__(self, other) -> ObjectStoragePath: o_protocol, o_bucket, o_key = self.split_path(other) - if not isinstance(other, str) and o_bucket and self._bucket != o_bucket: + if isinstance(other, ObjectStoragePath) and o_bucket and self._bucket != o_bucket: raise ValueError("Cannot combine paths from different buckets / containers") if o_protocol and self._protocol != o_protocol: raise ValueError("Cannot combine paths from different protocols") - path = f"{stringify_path(self).rstrip(self.sep)}/{stringify_path(other).lstrip(self.sep)}" + self_path = str(stringify_path(self)) + other_path = str(stringify_path(other)) + + path = f"{self_path.rstrip(self.sep)}/{other_path.lstrip(self.sep)}" return ObjectStoragePath(path, conn_id=self._conn_id) def _unsupported(self, method_name): diff --git a/tests/io/store/test_store.py b/tests/io/store/test_store.py index db1609f283..7a7018e7ec 100644 --- a/tests/io/store/test_store.py +++ b/tests/io/store/test_store.py @@ -66,6 +66,12 @@ class TestFs: assert path2.key == "key/part1/part2/part3" assert path2._protocol == "file" + # check if we can append a non string to the path + path3 = ObjectStoragePath(path2 / 2023) + assert path3.bucket == "bucket" + assert path3.key == "key/part1/part2/part3/2023" + assert path3._protocol == "file" + def test_read_write(self): o = ObjectStoragePath(f"file:///tmp/{str(uuid.uuid4())}")