doit
doit copied to clipboard
Path are coerced to string
The documentation mention that doit
accept Path
object inside file_dep
and targets
but I noticed that when I got the item back they're no longer Path
object but have been converted to string.
e.g:
#!/usr/bin/env python
# coding: utf-8
import pathlib
def task_path():
"""test"""
def mkdir(targets):
for directory in targets:
directory.mkdir()
return {
'actions': [mkdir],
'targets': [pathlib.Path('baz')],
'clean': True,
}
gives
% doit path
. path
TaskError - taskid:path
PythonAction Error
Traceback (most recent call last):
File "/home/sylvain/dev/doit_bug/partialfunc/venv/lib/python3.7/site-packages/doit/action.py", line 424, in execute
returned_value = self.py_callable(*self.args, **kwargs)
File "/home/sylvain/dev/doit_bug/order/dodo.py", line 25, in mkdir
directory.mkdir()
AttributeError: 'str' object has no attribute 'mkdir'
I would have expected the types to be preserved.
Is it a bug or do you have some internal constraints that force you to convert everything to string?
Some places expect it to be a string...
When I added support for Path
, I did the easy way just converting it when the task is created.
Since you can easily re-create a Path
. I am not sure it is worth to implement this. I would need to check the code in details to see everywhere a change is required.
I see, it makes sense.
It could be an issue if you have a lot of paths, then the cost of recreating all the Path objects may be noticeable (that being said, that's not an issue I have for now).
If it's not worth implementing, documenting the behavior to make it less surprising can be enough I think.
@slaperche-scality off-topic:
Saw your work on metalk8s, awesome! Also glad you had only 3 (small) requests :grinning: I would really appreciate if you could contribute a success story [1] describing your project, how doit is used, and why doit was chosen.
[1] http://pydoit.org/stories.html
No problem :slightly_smiling_face: , I'll submit a PR for that :) (probably next week).