Skip to content

files.put() - incompatibility when src is StringIO and dest is a directory #1144

Open
@rsyring

Description

@rsyring

I was using file.put() with a directory destination and switched it to a file.template(). That resulted in the following traceback:

  File "/home/rsyring/.local/pipx/venvs/kilo/lib/python3.11/site-packages/pyinfra/operations/files.py", line 938, in put
    dest = unix_path_join(dest, os.path.basename(src))
                                ^^^^^^^^^^^^^^^^^^^^^
  File "<frozen posixpath>", line 142, in basename
TypeError: expected str, bytes or os.PathLike object, not StringIO

Once I figured out what was going on, the fix was to specify the dest as a file path, which makes sense.

Requests:

  1. A better error message indicating the root problem, i.e. "When using IO-like object for src a directory can not be used as the dest."
  2. Maybe not worth the effort, but when using files.template() and the dest is a directory, source the file name from the src file and add that to the dest before calling files.put(). Removing '.j2' or '.jinja' if present on the src filename.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugLabel for all kind of bugs.operationsIssues with operations.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions