<div dir="ltr"><div>Honestly, despite the occasional use case(1), I'm not sure that this is a battery we need in the stdlib. Nobody seems too excited about writing the code, and when the operation is needed, shelling out to the system chown is not too onerous. (Ditto for chmod.)<br></div><div><br></div><div>(1) Not even sure that a use case was shown -- it was just shown that the operation is not necessarily useless.<br></div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 29, 2018 at 5:57 AM, Nick Coghlan <span dir="ltr"><<a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">On 29 May 2018 at 06:23, Giampaolo Rodola' <span dir="ltr"><<a href="mailto:g.rodola@gmail.com" target="_blank">g.rodola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div>...as in (not tested):</div><div><br></div><div>    def _rchown(dir, user, group):</div><div>        for root, dirs, files in os.walk(dir, topdown=False):</div><div>            for name in files:</div><div>                chown(os.path.join(root, name), user, group)</div><div><br></div><div>    def chown(path, user=None, group=None, recursive=False):</div><div>        if recursive and os.path.isdir(path):</div><div>            _rchown(dir, user, group)</div><div>        ...</div><div><br></div><div>It appears like a common enough use case to me ("chown -R path"). </div><div>Thoughts?</div></div></div></div></blockquote><div><br></div></span><a href="https://bugs.python.org/issue13033" target="_blank">https://bugs.python.org/<wbr>issue13033</a> is a long-open RFE for this, proposing to add it as "shutil.chowntree" (naming inspired by "shutil.rmtree" and "shutil.copytree").</div><div class="gmail_quote"><br></div><div class="gmail_quote">The "walkdir" project I mention on that PR has been on hiatus for a few years now (aside from a bit of activity to get a new release out in 2016 with several contributed fixes), but the main point of the comment where I mentioned it still stands: the hard part of designing recursive state modification APIs is deciding what to do when an operation fails after you've already made changes to the state of the disk.</div><div class="gmail_quote"><br></div><div class="gmail_quote">shutil.rmtree fortunately provides some good precedent there, but it does mean this feature would need to be implemented as its own API, rather than as an option on shutil.chown.<br></div><div class="gmail_quote"><br></div><div class="gmail_quote">Cheers,</div><div class="gmail_quote">Nick.<span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><br>-- <br><div class="m_-889498125015829281gmail_signature">Nick Coghlan   |   <a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>   |   Brisbane, Australia</div>
</font></span></div></div>
<br>______________________________<wbr>_________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/<wbr>codeofconduct/</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div>
</div>