[Python-Dev] casefolding in pathlib (PEP 428)

Antoine Pitrou solipsis at pitrou.net
Fri Apr 12 19:50:58 CEST 2013


On Fri, 12 Apr 2013 19:42:25 +0200
Ralf Schmitt <ralf at systemexit.de> wrote:
> Guido van Rossum <guido at python.org> writes:
> 
> > Actually, I've heard of code that dynamically falls back on short
> > names when paths using long names exceed the system limit for path
> > length (either 256 or 1024 IIRC). But short names pretty much require
> > consulting the filesystem, so we can probably ignore them.
> 
> The limit is 260 characters. But longer paths can be handled by
> prepending \\?\ and using the unicode APIs.
> 
> see http://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

Indeed. I thought I might use them by default in pathlib but there are
other pains: notably, extended paths (those starting with \\?\) can
only be absolute.

So pathlib supports *passing* them explicitly (kind of, there are very
few tests for them) but it doesn't constructs them implicitly.

(as Dirkjan pointed out, Mercurial also has domain-specific code to
handle Windows paths quirks; this is where I took the idea of having a
is_reserved() method for NUL, CON, etc.)

Regards

Antoine.


> 
> we have the following code to handle the above insanity:
> ,----
> | def prepend_magic_win32(path):
> |     assert isinstance(path, unicode), "path must be of type unicode"
> | 
> |     if path.startswith(u"\\\\"):
> |         if path.startswith(u"\\\\?\\"):
> |             return path
> |         else:
> |             return u"\\\\?\\UNC\\" + path[2:]
> |     else:
> |         return u"\\\\?\\" + path
> `----
> 



More information about the Python-Dev mailing list