I really want to use filepath. It results in more readable and less error-prone code than using the smorgasbord of open(), os.whatever, shutil.whatever, and so on. I think we should do it. However, there are several issues that the maintainers of filepath are not going to fix anytime soon, or even one critical issue that they refuse to fix in the way that I want it done, so I think we'll need to do it by forking or embedding filepath into our codebase.
The critical issue about which they and I disagree is: what do you do if you go to read a filename from the operating system, and you get a sequence of bytes which cannot be decoded in the nominal encoding? Their answer is: store the bytes, because if you write them back out to the same filesystem later, later users will presumably treat them as having the same encoding, whatever it was, even though our code doesn't know what it was. My answer is: raise an error, because we can't safely transport these bytes out to other systems, or process these bytes, and anyway this is probably a rare condition or even an outright error in the user's system. (That is what we long ago decided to do in Tahoe-LAFS, and we've never had a complaint about it. There are quite extensive discussion threads in old closed tickets and in the tahoe-dev email archive about this design decision.)
That discussion is https://twistedmatrix.com/trac/ticket/5203 . Other tickets are: