Merge pull request #332 from hartym/211_forbid_fs_related_nodes_to_join_cwd_silently

Do not allow to provide absolute paths as filesystem will join it sil…
This commit is contained in:
Romain Dorgueil
2019-06-01 11:07:16 +02:00
committed by GitHub
2 changed files with 26 additions and 32 deletions

View File

@ -1,6 +1,15 @@
from bonobo.config import Configurable, ContextProcessor, Option, Service
def filesystem_path(path: str):
if path.startswith("/"):
raise ValueError(
"File path should not be absolute. If you really need to provide absolute paths, then you must pass a "
"filesystem instance that is bound to your filesystem root and provide a relative path from there."
)
return str(path)
class FileHandler(Configurable):
"""Abstract component factory for file-related components.
@ -13,39 +22,12 @@ class FileHandler(Configurable):
"""
path = Option(
str,
required=True,
positional=True,
__doc__="""
Path to use within the provided filesystem.
""",
) # type: str
eol = Option(
str,
default="\n",
__doc__="""
Character to use as line separator.
""",
) # type: str
mode = Option(
str,
__doc__="""
What mode to use for open() call.
""",
) # type: str
encoding = Option(
str,
default="utf-8",
__doc__="""
Encoding.
""",
) # type: str
fs = Service(
"fs",
__doc__="""
The filesystem instance to use.
""",
filesystem_path, required=True, positional=True, __doc__="Path to use within the provided filesystem."
) # type: str
eol = Option(str, default="\n", __doc__="Character to use as line separator.") # type: str
mode = Option(str, __doc__="What mode to use for open() call.") # type: str
encoding = Option(str, default="utf-8", __doc__="Encoding.") # type: str
fs = Service("fs", __doc__="The filesystem instance to use.") # type: str
@ContextProcessor
def file(self, context, *, fs):

View File

@ -0,0 +1,12 @@
import pytest
from bonobo.nodes.io.base import filesystem_path
def test_filesystem_path_absolute():
with pytest.raises(ValueError):
filesystem_path("/this/is/absolute")
def test_filesystem_path_relative():
assert filesystem_path("this/is/relative") == "this/is/relative"