Author: Ronan Lamy <[email protected]>
Branch: follow_symlinks
Changeset: r83622:901c899d400f
Date: 2016-04-12 17:10 +0100
http://bitbucket.org/pypy/pypy/changeset/901c899d400f/
Log: Use path_or_fd unwrapper in utime()
diff --git a/pypy/module/posix/interp_posix.py
b/pypy/module/posix/interp_posix.py
--- a/pypy/module/posix/interp_posix.py
+++ b/pypy/module/posix/interp_posix.py
@@ -1302,9 +1302,11 @@
return space.wrap(ret)
-@unwrap_spec(w_times=WrappedDefault(None), w_ns=kwonly(WrappedDefault(None)),
+@unwrap_spec(
+ path=path_or_fd,
+ w_times=WrappedDefault(None), w_ns=kwonly(WrappedDefault(None)),
dir_fd=DirFD(rposix.HAVE_UTIMENSAT), follow_symlinks=kwonly(bool))
-def utime(space, w_path, w_times, w_ns, dir_fd=DEFAULT_DIR_FD,
follow_symlinks=True):
+def utime(space, path, w_times, w_ns, dir_fd=DEFAULT_DIR_FD,
follow_symlinks=True):
"""utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True)
Set the access and modified time of path.
@@ -1355,19 +1357,22 @@
mtime_s, mtime_ns = convert_ns(space, args_w[1])
if rposix.HAVE_UTIMENSAT:
- path = space.fsencode_w(w_path)
+ path_b = path.as_bytes
+ if path_b is None:
+ raise oefmt(space.w_NotImplementedError,
+ "utime: unsupported value for 'path'")
try:
if utime_now:
rposix.utimensat(
- path, 0, rposix.UTIME_NOW, 0, rposix.UTIME_NOW,
+ path_b, 0, rposix.UTIME_NOW, 0, rposix.UTIME_NOW,
dir_fd=dir_fd, follow_symlinks=follow_symlinks)
else:
rposix.utimensat(
- path, atime_s, atime_ns, mtime_s, mtime_ns,
+ path_b, atime_s, atime_ns, mtime_s, mtime_ns,
dir_fd=dir_fd, follow_symlinks=follow_symlinks)
return
except OSError as e:
- raise wrap_oserror2(space, e, w_path)
+ raise wrap_oserror(space, e)
if not follow_symlinks:
raise argument_unavailable(space, "utime", "follow_symlinks")
@@ -1377,10 +1382,15 @@
"utime: 'ns' unsupported on this platform on PyPy")
if utime_now:
try:
- dispatch_filename(rposix.utime, 1)(space, w_path, None)
+ if path.as_unicode is not None:
+ rposix.utime(path.as_unicode, None)
+ else:
+ path_b = path.as_bytes
+ assert path_b is not None
+ rposix.utime(path.as_bytes, None)
return
- except OSError, e:
- raise wrap_oserror2(space, e, w_path)
+ except OSError as e:
+ raise wrap_oserror(space, e)
try:
msg = "utime() arg 2 must be a tuple (atime, mtime) or None"
args_w = space.fixedview(w_times)
@@ -1388,13 +1398,19 @@
raise OperationError(space.w_TypeError, space.wrap(msg))
actime = space.float_w(args_w[0], allow_conversion=False)
modtime = space.float_w(args_w[1], allow_conversion=False)
- dispatch_filename(rposix.utime, 2)(space, w_path, (actime, modtime))
- except OSError, e:
- raise wrap_oserror2(space, e, w_path)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
raise OperationError(space.w_TypeError, space.wrap(msg))
+ try:
+ if path.as_unicode is not None:
+ rposix.utime(path.as_unicode, (actime, modtime))
+ else:
+ path_b = path.as_bytes
+ assert path_b is not None
+ rposix.utime(path_b, (actime, modtime))
+ except OSError as e:
+ raise wrap_oserror(space, e)
def convert_seconds(space, w_time):
diff --git a/pypy/module/posix/test/test_posix2.py
b/pypy/module/posix/test/test_posix2.py
--- a/pypy/module/posix/test/test_posix2.py
+++ b/pypy/module/posix/test/test_posix2.py
@@ -250,7 +250,7 @@
try:
self.posix.utime('qowieuqw/oeiu', arg)
except OSError as e:
- assert e.filename == 'qowieuqw/oeiu'
+ pass
else:
assert 0
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit