[py-svn] r8311 - in py/dist/py: misc path

hpk at codespeak.net hpk at codespeak.net
Sun Jan 16 18:11:49 CET 2005


Author: hpk
Date: Sun Jan 16 18:11:48 2005
New Revision: 8311

Modified:
   py/dist/py/misc/error.py
   py/dist/py/path/common.py
Log:
try to get Win32 to report ENOTDIR's as ENOTDIRs ... 



Modified: py/dist/py/misc/error.py
==============================================================================
--- py/dist/py/misc/error.py	(original)
+++ py/dist/py/misc/error.py	Sun Jan 16 18:11:48 2005
@@ -17,6 +17,11 @@
                           " ".join(map(str, self.args)),
                           )
 
+_winerrnomap = {
+    3: py.std.errno.ENOENT, 
+    267: py.std.errno.ENOTDIR, 
+}
+
 ModuleType = type(py)
 
 class py_error(ModuleType):
@@ -28,6 +33,10 @@
     """
     Error = Error
 
+    def _getwinerrnoclass(cls, eno): 
+        return cls._geterrnoclass(_winerrnomap[eno]) 
+    _getwinerrnoclass = classmethod(_getwinerrnoclass) 
+
     def _geterrnoclass(eno, _errno2class = {}):
         try:
             return _errno2class[eno]

Modified: py/dist/py/path/common.py
==============================================================================
--- py/dist/py/path/common.py	(original)
+++ py/dist/py/path/common.py	Sun Jan 16 18:11:48 2005
@@ -200,15 +200,17 @@
             #__tracebackhide__ = False
             cls, value, tb = sys.exc_info()
             errno = e.errno 
-            try: 
-                if isinstance(e, WindowsError): 
-                    if errno == 3: 
-                        errno = 2  # XXX HACK 
-                    else: 
-                        raise cls, value, tb
+            try:
+                if not isinstance(e, WindowsError): 
+                    raise NameError
             except NameError: 
-                pass 
-            cls = py.error._geterrnoclass(errno)
+                # we are not on Windows, or we got a proper OSError
+                cls = py.error._geterrnoclass(errno)
+            else: 
+                try: 
+                    cls = py.error._getwinerrnoclass(errno)
+                except KeyError:    
+                    raise cls, value, tb
             value = cls("%s%r" % (func.__name__, args))
             #__tracebackhide__ = True
             raise cls, value



More information about the pytest-commit mailing list