aboutsummaryrefslogtreecommitdiffstats
path: root/library/python
diff options
context:
space:
mode:
authorNikita Slyusarev <nslus@yandex-team.com>2022-02-10 16:46:52 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:46:52 +0300
commitcd77cecfc03a3eaf87816af28a33067c4f0cdb59 (patch)
tree1308e0bae862d52e0020d881fe758080437fe389 /library/python
parentcdae02d225fb5b3afbb28990e79a7ac6c9125327 (diff)
downloadydb-cd77cecfc03a3eaf87816af28a33067c4f0cdb59.tar.gz
Restoring authorship annotation for Nikita Slyusarev <nslus@yandex-team.com>. Commit 1 of 2.
Diffstat (limited to 'library/python')
-rw-r--r--library/python/cores/ya.make2
-rw-r--r--library/python/filelock/__init__.py24
-rw-r--r--library/python/filelock/ut/lib/test_filelock.py18
-rw-r--r--library/python/filelock/ut/lib/ya.make2
-rw-r--r--library/python/filelock/ya.make6
-rw-r--r--library/python/find_root/ya.make2
-rw-r--r--library/python/fs/__init__.py492
-rw-r--r--library/python/fs/test/test_fs.py1584
-rw-r--r--library/python/pytest/allure/ya.make8
-rw-r--r--library/python/pytest/empty/ya.make14
-rw-r--r--library/python/pytest/ya.make8
-rw-r--r--library/python/pytest/yatest_tools.py8
-rw-r--r--library/python/reservoir_sampling/ya.make2
-rw-r--r--library/python/resource/ut/lib/ya.make2
-rw-r--r--library/python/resource/ya.make6
-rw-r--r--library/python/runtime_py3/main/ya.make8
-rw-r--r--library/python/runtime_py3/test/traceback/ya.make12
-rw-r--r--library/python/runtime_py3/test/ya.make10
-rw-r--r--library/python/runtime_py3/ya.make12
-rw-r--r--library/python/strings/strings.py100
-rw-r--r--library/python/strings/ut/test_strings.py258
-rw-r--r--library/python/strings/ut/ya.make2
-rw-r--r--library/python/strings/ya.make6
-rw-r--r--library/python/symbols/python/ut/ya.make4
-rw-r--r--library/python/symbols/python/ya.make4
-rw-r--r--library/python/testing/import_test/ya.make6
-rw-r--r--library/python/testing/recipe/ya.make6
-rw-r--r--library/python/testing/yatest_common/yatest/common/canonical.py20
-rw-r--r--library/python/testing/yatest_common/yatest/common/network.py2
-rw-r--r--library/python/testing/yatest_common/yatest/common/path.py2
-rw-r--r--library/python/testing/yatest_lib/ya.make4
-rw-r--r--library/python/windows/__init__.py538
-rw-r--r--library/python/windows/ut/test_windows.py162
-rw-r--r--library/python/windows/ut/ya.make2
-rw-r--r--library/python/ya.make8
35 files changed, 1672 insertions, 1672 deletions
diff --git a/library/python/cores/ya.make b/library/python/cores/ya.make
index 76264e9cce..58463feb7e 100644
--- a/library/python/cores/ya.make
+++ b/library/python/cores/ya.make
@@ -5,7 +5,7 @@ OWNER(
PY23_LIBRARY()
-PY_SRCS(__init__.py)
+PY_SRCS(__init__.py)
PEERDIR(
contrib/python/six
diff --git a/library/python/filelock/__init__.py b/library/python/filelock/__init__.py
index f81ff67f37..cdf2ee4f68 100644
--- a/library/python/filelock/__init__.py
+++ b/library/python/filelock/__init__.py
@@ -1,12 +1,12 @@
-import errno
-import logging
-import os
+import errno
+import logging
+import os
import sys
import library.python.windows
logger = logging.getLogger(__name__)
-
+
def set_close_on_exec(stream):
if library.python.windows.on_win():
@@ -74,19 +74,19 @@ class _WinFileLock(AbstractFileLock):
def __init__(self, path):
super(_WinFileLock, self).__init__(path)
self._lock = None
- try:
- with file(path, 'w') as lock_file:
- lock_file.write(" " * self._LOCKED_BYTES_NUM)
- except IOError as e:
- if e.errno != errno.EACCES or not os.path.isfile(path):
- raise
+ try:
+ with file(path, 'w') as lock_file:
+ lock_file.write(" " * self._LOCKED_BYTES_NUM)
+ except IOError as e:
+ if e.errno != errno.EACCES or not os.path.isfile(path):
+ raise
def acquire(self, blocking=True):
self._lock = open(self.path)
set_close_on_exec(self._lock)
import time
- locked = False
+ locked = False
while not locked:
locked = library.python.windows.lock_file(self._lock, 0, self._LOCKED_BYTES_NUM, raises=False)
if locked:
@@ -97,7 +97,7 @@ class _WinFileLock(AbstractFileLock):
return False
def release(self):
- if self._lock:
+ if self._lock:
library.python.windows.unlock_file(self._lock, 0, self._LOCKED_BYTES_NUM, raises=False)
self._lock.close()
self._lock = None
diff --git a/library/python/filelock/ut/lib/test_filelock.py b/library/python/filelock/ut/lib/test_filelock.py
index 1b11d89123..5c2e0181ff 100644
--- a/library/python/filelock/ut/lib/test_filelock.py
+++ b/library/python/filelock/ut/lib/test_filelock.py
@@ -8,13 +8,13 @@ import threading
import library.python.filelock
-def _acquire_lock(lock_path, out_file_path):
+def _acquire_lock(lock_path, out_file_path):
with library.python.filelock.FileLock(lock_path):
- with open(out_file_path, "a") as out:
- out.write("{}:{}\n".format(os.getpid(), time.time()))
- time.sleep(2)
-
-
+ with open(out_file_path, "a") as out:
+ out.write("{}:{}\n".format(os.getpid(), time.time()))
+ time.sleep(2)
+
+
def test_filelock():
temp_dir = tempfile.mkdtemp()
lock_path = os.path.join(temp_dir, "file.lock")
@@ -46,12 +46,12 @@ def test_filelock():
time2 = times.pop()
assert int(time1) - int(time2) >= 2
time1 = time2
-
-
+
+
def test_filelock_init_acquired():
temp_dir = tempfile.mkdtemp()
lock_path = os.path.join(temp_dir, "file.lock")
-
+
with library.python.filelock.FileLock(lock_path):
sublock = library.python.filelock.FileLock(lock_path)
del sublock
diff --git a/library/python/filelock/ut/lib/ya.make b/library/python/filelock/ut/lib/ya.make
index f3f9da5a67..291f8a32ba 100644
--- a/library/python/filelock/ut/lib/ya.make
+++ b/library/python/filelock/ut/lib/ya.make
@@ -2,7 +2,7 @@ OWNER(g:yatool)
PY23_LIBRARY()
-TEST_SRCS(test_filelock.py)
+TEST_SRCS(test_filelock.py)
PEERDIR(
library/python/filelock
diff --git a/library/python/filelock/ya.make b/library/python/filelock/ya.make
index 958cc1866f..d67540b8f7 100644
--- a/library/python/filelock/ya.make
+++ b/library/python/filelock/ya.make
@@ -4,8 +4,8 @@ PY23_LIBRARY()
PY_SRCS(__init__.py)
-PEERDIR(
- library/python/windows
-)
+PEERDIR(
+ library/python/windows
+)
END()
diff --git a/library/python/find_root/ya.make b/library/python/find_root/ya.make
index beaa8e3c52..1f22e4a5f8 100644
--- a/library/python/find_root/ya.make
+++ b/library/python/find_root/ya.make
@@ -2,6 +2,6 @@ PY23_LIBRARY()
OWNER(g:yatool)
-PY_SRCS(__init__.py)
+PY_SRCS(__init__.py)
END()
diff --git a/library/python/fs/__init__.py b/library/python/fs/__init__.py
index b1b7cde079..2bc368f43f 100644
--- a/library/python/fs/__init__.py
+++ b/library/python/fs/__init__.py
@@ -1,13 +1,13 @@
# coding: utf-8
-import codecs
+import codecs
import errno
import logging
import os
import random
import shutil
import six
-import stat
+import stat
import sys
import library.python.func
@@ -23,179 +23,179 @@ except NameError:
WindowsError = None
-_diehard_win_tries = 10
+_diehard_win_tries = 10
errorfix_win = library.python.windows.errorfix
-
-
-class CustomFsError(OSError):
- def __init__(self, errno, message='', filename=None):
- super(CustomFsError, self).__init__(message)
- self.errno = errno
- self.strerror = os.strerror(errno)
- self.filename = filename
-
-
-# Directories creation
-# If dst is already exists and is a directory - does nothing
-# Throws OSError
-@errorfix_win
-def ensure_dir(path):
+
+
+class CustomFsError(OSError):
+ def __init__(self, errno, message='', filename=None):
+ super(CustomFsError, self).__init__(message)
+ self.errno = errno
+ self.strerror = os.strerror(errno)
+ self.filename = filename
+
+
+# Directories creation
+# If dst is already exists and is a directory - does nothing
+# Throws OSError
+@errorfix_win
+def ensure_dir(path):
try:
os.makedirs(path)
except OSError as e:
- if e.errno != errno.EEXIST or not os.path.isdir(path):
+ if e.errno != errno.EEXIST or not os.path.isdir(path):
raise
-
-# Directories creation
-# If dst is already exists and is a directory - does nothing
-# Returns path
-# Throws OSError
-@errorfix_win
-def create_dirs(path):
- ensure_dir(path)
+
+# Directories creation
+# If dst is already exists and is a directory - does nothing
+# Returns path
+# Throws OSError
+@errorfix_win
+def create_dirs(path):
+ ensure_dir(path)
return path
-# Atomic file/directory move (rename)
-# Doesn't guarantee dst replacement
-# Atomic if no device boundaries are crossed
-# Depends on ctypes on Windows
-# Throws OSError
-# On Unix, if dst exists:
-# if dst is file or empty dir - replaces it
-# if src is dir and dst is not dir - throws OSError (errno ENOTDIR)
-# if src is dir and dst is non-empty dir - throws OSError (errno ENOTEMPTY)
-# if src is file and dst is dir - throws OSError (errno EISDIR)
-# On Windows, if dst exists - throws OSError (errno EEXIST)
-@errorfix_win
+# Atomic file/directory move (rename)
+# Doesn't guarantee dst replacement
+# Atomic if no device boundaries are crossed
+# Depends on ctypes on Windows
+# Throws OSError
+# On Unix, if dst exists:
+# if dst is file or empty dir - replaces it
+# if src is dir and dst is not dir - throws OSError (errno ENOTDIR)
+# if src is dir and dst is non-empty dir - throws OSError (errno ENOTEMPTY)
+# if src is file and dst is dir - throws OSError (errno EISDIR)
+# On Windows, if dst exists - throws OSError (errno EEXIST)
+@errorfix_win
@library.python.windows.diehard(library.python.windows.RETRIABLE_FILE_ERRORS, tries=_diehard_win_tries)
-def move(src, dst):
- os.rename(src, dst)
-
-
-# Atomic replacing file move (rename)
-# Replaces dst if exists and not a dir
-# Doesn't guarantee dst dir replacement
-# Atomic if no device boundaries are crossed
-# Depends on ctypes on Windows
-# Throws OSError
-# On Unix, if dst exists:
-# if dst is file - replaces it
-# if dst is dir - throws OSError (errno EISDIR)
-# On Windows, if dst exists:
-# if dst is file - replaces it
-# if dst is dir - throws OSError (errno EACCES)
-@errorfix_win
+def move(src, dst):
+ os.rename(src, dst)
+
+
+# Atomic replacing file move (rename)
+# Replaces dst if exists and not a dir
+# Doesn't guarantee dst dir replacement
+# Atomic if no device boundaries are crossed
+# Depends on ctypes on Windows
+# Throws OSError
+# On Unix, if dst exists:
+# if dst is file - replaces it
+# if dst is dir - throws OSError (errno EISDIR)
+# On Windows, if dst exists:
+# if dst is file - replaces it
+# if dst is dir - throws OSError (errno EACCES)
+@errorfix_win
@library.python.windows.diehard(library.python.windows.RETRIABLE_FILE_ERRORS, tries=_diehard_win_tries)
-def replace_file(src, dst):
+def replace_file(src, dst):
if library.python.windows.on_win():
library.python.windows.replace_file(src, dst)
- else:
- os.rename(src, dst)
-
-
-# File/directory replacing move (rename)
-# Removes dst if exists
-# Non-atomic
-# Depends on ctypes on Windows
-# Throws OSError
-@errorfix_win
-def replace(src, dst):
- try:
- move(src, dst)
- except OSError as e:
- if e.errno not in (errno.EEXIST, errno.EISDIR, errno.ENOTDIR, errno.ENOTEMPTY):
- raise
- remove_tree(dst)
- move(src, dst)
-
-
-# Atomic file remove
-# Throws OSError
-@errorfix_win
+ else:
+ os.rename(src, dst)
+
+
+# File/directory replacing move (rename)
+# Removes dst if exists
+# Non-atomic
+# Depends on ctypes on Windows
+# Throws OSError
+@errorfix_win
+def replace(src, dst):
+ try:
+ move(src, dst)
+ except OSError as e:
+ if e.errno not in (errno.EEXIST, errno.EISDIR, errno.ENOTDIR, errno.ENOTEMPTY):
+ raise
+ remove_tree(dst)
+ move(src, dst)
+
+
+# Atomic file remove
+# Throws OSError
+@errorfix_win
@library.python.windows.diehard(library.python.windows.RETRIABLE_FILE_ERRORS, tries=_diehard_win_tries)
-def remove_file(path):
- os.remove(path)
-
-
-# Atomic empty directory remove
-# Throws OSError
-@errorfix_win
+def remove_file(path):
+ os.remove(path)
+
+
+# Atomic empty directory remove
+# Throws OSError
+@errorfix_win
@library.python.windows.diehard(library.python.windows.RETRIABLE_DIR_ERRORS, tries=_diehard_win_tries)
-def remove_dir(path):
- os.rmdir(path)
-
-
+def remove_dir(path):
+ os.rmdir(path)
+
+
def fix_path_encoding(path):
return library.python.strings.to_str(path, library.python.strings.fs_encoding())
-# File/directory remove
-# Non-atomic
-# Throws OSError, AssertionError
-@errorfix_win
-def remove_tree(path):
+# File/directory remove
+# Non-atomic
+# Throws OSError, AssertionError
+@errorfix_win
+def remove_tree(path):
@library.python.windows.diehard(library.python.windows.RETRIABLE_DIR_ERRORS, tries=_diehard_win_tries)
- def rmtree(path):
+ def rmtree(path):
if library.python.windows.on_win():
library.python.windows.rmtree(path)
else:
shutil.rmtree(fix_path_encoding(path))
-
- st = os.lstat(path)
- if stat.S_ISLNK(st.st_mode) or stat.S_ISREG(st.st_mode):
- remove_file(path)
- elif stat.S_ISDIR(st.st_mode):
- rmtree(path)
- else:
- assert False
-
-
-# File/directory remove ignoring errors
-# Non-atomic
-@errorfix_win
-def remove_tree_safe(path):
- try:
- st = os.lstat(path)
- if stat.S_ISLNK(st.st_mode) or stat.S_ISREG(st.st_mode):
- os.remove(path)
- elif stat.S_ISDIR(st.st_mode):
+
+ st = os.lstat(path)
+ if stat.S_ISLNK(st.st_mode) or stat.S_ISREG(st.st_mode):
+ remove_file(path)
+ elif stat.S_ISDIR(st.st_mode):
+ rmtree(path)
+ else:
+ assert False
+
+
+# File/directory remove ignoring errors
+# Non-atomic
+@errorfix_win
+def remove_tree_safe(path):
+ try:
+ st = os.lstat(path)
+ if stat.S_ISLNK(st.st_mode) or stat.S_ISREG(st.st_mode):
+ os.remove(path)
+ elif stat.S_ISDIR(st.st_mode):
shutil.rmtree(fix_path_encoding(path), ignore_errors=True)
# XXX
except UnicodeDecodeError as e:
logging.exception(u'remove_tree_safe with argument %s raise exception: %s', path, e)
raise
- except OSError:
- pass
-
-
-# File/directory remove
-# If path doesn't exist - does nothing
-# Non-atomic
-# Throws OSError, AssertionError
-@errorfix_win
-def ensure_removed(path):
- try:
- remove_tree(path)
- except OSError as e:
- if e.errno != errno.ENOENT:
- raise
-
-
-# Atomic file hardlink
-# Dst must not exist
-# Depends on ctypes on Windows
-# Throws OSError
-# If dst exists - throws OSError (errno EEXIST)
-@errorfix_win
-def hardlink(src, lnk):
+ except OSError:
+ pass
+
+
+# File/directory remove
+# If path doesn't exist - does nothing
+# Non-atomic
+# Throws OSError, AssertionError
+@errorfix_win
+def ensure_removed(path):
+ try:
+ remove_tree(path)
+ except OSError as e:
+ if e.errno != errno.ENOENT:
+ raise
+
+
+# Atomic file hardlink
+# Dst must not exist
+# Depends on ctypes on Windows
+# Throws OSError
+# If dst exists - throws OSError (errno EEXIST)
+@errorfix_win
+def hardlink(src, lnk):
if library.python.windows.on_win():
library.python.windows.hardlink(src, lnk)
- else:
- os.link(src, lnk)
-
-
+ else:
+ os.link(src, lnk)
+
+
@errorfix_win
def hardlink_or_copy(src, lnk):
def should_fallback_to_copy(exc):
@@ -222,18 +222,18 @@ def hardlink_or_copy(src, lnk):
raise
-# Atomic file/directory symlink (Unix only)
-# Dst must not exist
-# Throws OSError
-# If dst exists - throws OSError (errno EEXIST)
-@errorfix_win
-def symlink(src, lnk):
+# Atomic file/directory symlink (Unix only)
+# Dst must not exist
+# Throws OSError
+# If dst exists - throws OSError (errno EEXIST)
+@errorfix_win
+def symlink(src, lnk):
if library.python.windows.on_win():
library.python.windows.run_disabled(src, lnk)
- else:
- os.symlink(src, lnk)
-
-
+ else:
+ os.symlink(src, lnk)
+
+
# shutil.copy2 with follow_symlinks=False parameter (Unix only)
def copy2(src, lnk, follow_symlinks=True):
if six.PY3:
@@ -247,69 +247,69 @@ def copy2(src, lnk, follow_symlinks=True):
symlink(os.readlink(src), lnk)
-# Recursively hardlink directory
-# Uses plain hardlink for files
-# Dst must not exist
-# Non-atomic
-# Throws OSError
-@errorfix_win
-def hardlink_tree(src, dst):
- if not os.path.exists(src):
- raise CustomFsError(errno.ENOENT, filename=src)
- if os.path.isfile(src):
- hardlink(src, dst)
- return
+# Recursively hardlink directory
+# Uses plain hardlink for files
+# Dst must not exist
+# Non-atomic
+# Throws OSError
+@errorfix_win
+def hardlink_tree(src, dst):
+ if not os.path.exists(src):
+ raise CustomFsError(errno.ENOENT, filename=src)
+ if os.path.isfile(src):
+ hardlink(src, dst)
+ return
for dirpath, _, filenames in walk_relative(src):
- src_dirpath = os.path.join(src, dirpath) if dirpath != '.' else src
- dst_dirpath = os.path.join(dst, dirpath) if dirpath != '.' else dst
- os.mkdir(dst_dirpath)
- for filename in filenames:
- hardlink(os.path.join(src_dirpath, filename), os.path.join(dst_dirpath, filename))
-
-
-# File copy
-# throws EnvironmentError (OSError, IOError)
-@errorfix_win
+ src_dirpath = os.path.join(src, dirpath) if dirpath != '.' else src
+ dst_dirpath = os.path.join(dst, dirpath) if dirpath != '.' else dst
+ os.mkdir(dst_dirpath)
+ for filename in filenames:
+ hardlink(os.path.join(src_dirpath, filename), os.path.join(dst_dirpath, filename))
+
+
+# File copy
+# throws EnvironmentError (OSError, IOError)
+@errorfix_win
def copy_file(src, dst, copy_function=shutil.copy2):
- if os.path.isdir(dst):
- raise CustomFsError(errno.EISDIR, filename=dst)
+ if os.path.isdir(dst):
+ raise CustomFsError(errno.EISDIR, filename=dst)
copy_function(src, dst)
-
-
-# File/directory copy
-# throws EnvironmentError (OSError, IOError, shutil.Error)
-@errorfix_win
+
+
+# File/directory copy
+# throws EnvironmentError (OSError, IOError, shutil.Error)
+@errorfix_win
def copy_tree(src, dst, copy_function=shutil.copy2):
- if os.path.isfile(src):
+ if os.path.isfile(src):
copy_file(src, dst, copy_function=copy_function)
- return
+ return
copytree3(src, dst, copy_function=copy_function)
-
-
-# File read
-# Throws OSError
-@errorfix_win
-def read_file(path, binary=True):
- with open(path, 'r' + ('b' if binary else '')) as f:
- return f.read()
-
-
-# Decoding file read
-# Throws OSError
-@errorfix_win
-def read_file_unicode(path, binary=True, enc='utf-8'):
- if not binary:
+
+
+# File read
+# Throws OSError
+@errorfix_win
+def read_file(path, binary=True):
+ with open(path, 'r' + ('b' if binary else '')) as f:
+ return f.read()
+
+
+# Decoding file read
+# Throws OSError
+@errorfix_win
+def read_file_unicode(path, binary=True, enc='utf-8'):
+ if not binary:
if six.PY2:
with open(path, 'r') as f:
return library.python.strings.to_unicode(f.read(), enc)
else:
with open(path, 'r', encoding=enc) as f:
return f.read()
- # codecs.open is always binary
+ # codecs.open is always binary
with codecs.open(path, 'r', encoding=enc, errors=library.python.strings.ENCODING_ERRORS_POLICY) as f:
- return f.read()
-
-
+ return f.read()
+
+
@errorfix_win
def open_file(*args, **kwargs):
return (
@@ -317,52 +317,52 @@ def open_file(*args, **kwargs):
)
-# Atomic file write
-# Throws OSError
-@errorfix_win
-def write_file(path, data, binary=True):
- dir_path = os.path.dirname(path)
- if dir_path:
- ensure_dir(dir_path)
- tmp_path = path + '.tmp.' + str(random.random())
+# Atomic file write
+# Throws OSError
+@errorfix_win
+def write_file(path, data, binary=True):
+ dir_path = os.path.dirname(path)
+ if dir_path:
+ ensure_dir(dir_path)
+ tmp_path = path + '.tmp.' + str(random.random())
with open_file(tmp_path, 'w' + ('b' if binary else '')) as f:
if not isinstance(data, bytes) and binary:
data = data.encode('UTF-8')
- f.write(data)
- replace_file(tmp_path, path)
-
-
-# File size
-# Throws OSError
-@errorfix_win
-def get_file_size(path):
- return os.path.getsize(path)
-
-
-# File/directory size
-# Non-recursive mode for directory counts size for immediates
-# While raise_all_errors is set to False, file size fallbacks to zero in case of getsize errors
-# Throws OSError
-@errorfix_win
-def get_tree_size(path, recursive=False, raise_all_errors=False):
- if os.path.isfile(path):
- return get_file_size(path)
- total_size = 0
- for dir_path, _, files in os.walk(path):
- for f in files:
- fp = os.path.join(dir_path, f)
- try:
- total_size += get_file_size(fp)
- except OSError as e:
- if raise_all_errors:
- raise
+ f.write(data)
+ replace_file(tmp_path, path)
+
+
+# File size
+# Throws OSError
+@errorfix_win
+def get_file_size(path):
+ return os.path.getsize(path)
+
+
+# File/directory size
+# Non-recursive mode for directory counts size for immediates
+# While raise_all_errors is set to False, file size fallbacks to zero in case of getsize errors
+# Throws OSError
+@errorfix_win
+def get_tree_size(path, recursive=False, raise_all_errors=False):
+ if os.path.isfile(path):
+ return get_file_size(path)
+ total_size = 0
+ for dir_path, _, files in os.walk(path):
+ for f in files:
+ fp = os.path.join(dir_path, f)
+ try:
+ total_size += get_file_size(fp)
+ except OSError as e:
+ if raise_all_errors:
+ raise
logger.debug("Cannot calculate file size: %s", e)
- if not recursive:
- break
- return total_size
-
-
-# Directory copy ported from Python 3
+ if not recursive:
+ break
+ return total_size
+
+
+# Directory copy ported from Python 3
def copytree3(
src,
dst,
diff --git a/library/python/fs/test/test_fs.py b/library/python/fs/test/test_fs.py
index 9e2c70c069..3aaebd2643 100644
--- a/library/python/fs/test/test_fs.py
+++ b/library/python/fs/test/test_fs.py
@@ -1,961 +1,961 @@
-# coding=utf-8
-
-import errno
-import os
-import pytest
+# coding=utf-8
+
+import errno
+import os
+import pytest
import shutil
import six
-
+
import library.python.fs
import library.python.strings
import library.python.tmp
import library.python.windows
-
+
import yatest.common
+
-
-def in_env(case):
- def wrapped_case(*args, **kwargs):
+def in_env(case):
+ def wrapped_case(*args, **kwargs):
with library.python.tmp.temp_dir() as temp_dir:
- case(lambda path: os.path.join(temp_dir, path))
+ case(lambda path: os.path.join(temp_dir, path))
- return wrapped_case
-
-
-def mkfile(path, data=''):
+ return wrapped_case
+
+
+def mkfile(path, data=''):
with open(path, 'wb') as f:
- if data:
+ if data:
f.write(data) if isinstance(data, six.binary_type) else f.write(
data.encode(library.python.strings.fs_encoding())
)
-
-
-def mktree_example(path, name):
- os.mkdir(path(name))
- mkfile(path(name + '/file1'), 'FILE1')
- os.mkdir(path(name + '/dir1'))
- os.mkdir(path(name + '/dir2'))
- mkfile(path(name + '/dir2/file2'), 'FILE2')
- mkfile(path(name + '/dir2/file3'), 'FILE3')
-
-
-def file_data(path):
+
+
+def mktree_example(path, name):
+ os.mkdir(path(name))
+ mkfile(path(name + '/file1'), 'FILE1')
+ os.mkdir(path(name + '/dir1'))
+ os.mkdir(path(name + '/dir2'))
+ mkfile(path(name + '/dir2/file2'), 'FILE2')
+ mkfile(path(name + '/dir2/file3'), 'FILE3')
+
+
+def file_data(path):
with open(path, 'rb') as f:
return f.read().decode('utf-8')
-
-
-def serialize_tree(path):
- if os.path.isfile(path):
- return file_data(path)
- data = {'dirs': set(), 'files': {}}
- for dirpath, dirnames, filenames in os.walk(path):
- dirpath_rel = os.path.relpath(dirpath, path)
- if dirpath_rel == '.':
- dirpath_rel = ''
- data['dirs'].update(set(os.path.join(dirpath_rel, x) for x in dirnames))
- data['files'].update({os.path.join(dirpath_rel, x): file_data(os.path.join(dirpath, x)) for x in filenames})
- return data
-
-
-def trees_equal(dir1, dir2):
- return serialize_tree(dir1) == serialize_tree(dir2)
-
-
-def inodes_unsupported():
+
+
+def serialize_tree(path):
+ if os.path.isfile(path):
+ return file_data(path)
+ data = {'dirs': set(), 'files': {}}
+ for dirpath, dirnames, filenames in os.walk(path):
+ dirpath_rel = os.path.relpath(dirpath, path)
+ if dirpath_rel == '.':
+ dirpath_rel = ''
+ data['dirs'].update(set(os.path.join(dirpath_rel, x) for x in dirnames))
+ data['files'].update({os.path.join(dirpath_rel, x): file_data(os.path.join(dirpath, x)) for x in filenames})
+ return data
+
+
+def trees_equal(dir1, dir2):
+ return serialize_tree(dir1) == serialize_tree(dir2)
+
+
+def inodes_unsupported():
return library.python.windows.on_win()
-
-
-def inodes_equal(path1, path2):
- return os.stat(path1).st_ino == os.stat(path2).st_ino
-
-
-def gen_error_access_denied():
+
+
+def inodes_equal(path1, path2):
+ return os.stat(path1).st_ino == os.stat(path2).st_ino
+
+
+def gen_error_access_denied():
if library.python.windows.on_win():
- err = WindowsError()
- err.errno = errno.EACCES
- err.strerror = ''
+ err = WindowsError()
+ err.errno = errno.EACCES
+ err.strerror = ''
err.winerror = library.python.windows.ERRORS['ACCESS_DENIED']
- else:
- err = OSError()
- err.errno = errno.EACCES
- err.strerror = os.strerror(err.errno)
- err.filename = 'unknown/file'
- raise err
-
-
-def test_errorfix_win():
+ else:
+ err = OSError()
+ err.errno = errno.EACCES
+ err.strerror = os.strerror(err.errno)
+ err.filename = 'unknown/file'
+ raise err
+
+
+def test_errorfix_win():
@library.python.fs.errorfix_win
- def erroneous_func():
- gen_error_access_denied()
-
- with pytest.raises(OSError) as errinfo:
- erroneous_func()
- assert errinfo.value.errno == errno.EACCES
- assert errinfo.value.filename == 'unknown/file'
+ def erroneous_func():
+ gen_error_access_denied()
+
+ with pytest.raises(OSError) as errinfo:
+ erroneous_func()
+ assert errinfo.value.errno == errno.EACCES
+ assert errinfo.value.filename == 'unknown/file'
# See transcode_error, which encodes strerror, in library/python/windows/__init__.py
assert isinstance(errinfo.value.strerror, (six.binary_type, six.text_type))
- assert errinfo.value.strerror
-
-
-def test_custom_fs_error():
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.strerror
+
+
+def test_custom_fs_error():
+ with pytest.raises(OSError) as errinfo:
raise library.python.fs.CustomFsError(errno.EACCES, filename='some/file')
- assert errinfo.value.errno == errno.EACCES
+ assert errinfo.value.errno == errno.EACCES
# See transcode_error, which encodes strerror, in library/python/windows/__init__.py
assert isinstance(errinfo.value.strerror, (six.binary_type, six.text_type))
- assert errinfo.value.filename == 'some/file'
-
-
-@in_env
-def test_ensure_dir(path):
+ assert errinfo.value.filename == 'some/file'
+
+
+@in_env
+def test_ensure_dir(path):
library.python.fs.ensure_dir(path('dir/subdir'))
- assert os.path.isdir(path('dir'))
- assert os.path.isdir(path('dir/subdir'))
-
-
-@in_env
-def test_ensure_dir_exists(path):
- os.makedirs(path('dir/subdir'))
+ assert os.path.isdir(path('dir'))
+ assert os.path.isdir(path('dir/subdir'))
+
+
+@in_env
+def test_ensure_dir_exists(path):
+ os.makedirs(path('dir/subdir'))
library.python.fs.ensure_dir(path('dir/subdir'))
- assert os.path.isdir(path('dir'))
- assert os.path.isdir(path('dir/subdir'))
-
-
-@in_env
-def test_ensure_dir_exists_partly(path):
- os.mkdir(path('dir'))
+ assert os.path.isdir(path('dir'))
+ assert os.path.isdir(path('dir/subdir'))
+
+
+@in_env
+def test_ensure_dir_exists_partly(path):
+ os.mkdir(path('dir'))
library.python.fs.ensure_dir(path('dir/subdir'))
- assert os.path.isdir(path('dir'))
- assert os.path.isdir(path('dir/subdir'))
-
-
-@in_env
-def test_ensure_dir_exists_file(path):
- mkfile(path('dir'))
- with pytest.raises(OSError) as errinfo:
+ assert os.path.isdir(path('dir'))
+ assert os.path.isdir(path('dir/subdir'))
+
+
+@in_env
+def test_ensure_dir_exists_file(path):
+ mkfile(path('dir'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.ensure_dir(path('dir/subdir'))
- # ENOENT on Windows!
- assert errinfo.value.errno in (errno.ENOTDIR, errno.ENOENT)
- assert os.path.isfile(path('dir'))
-
-
-@in_env
-def test_create_dirs(path):
+ # ENOENT on Windows!
+ assert errinfo.value.errno in (errno.ENOTDIR, errno.ENOENT)
+ assert os.path.isfile(path('dir'))
+
+
+@in_env
+def test_create_dirs(path):
assert library.python.fs.create_dirs(path('dir/subdir')) == path('dir/subdir')
- assert os.path.isdir(path('dir'))
- assert os.path.isdir(path('dir/subdir'))
-
-
-@in_env
-def test_move_file(path):
- mkfile(path('src'), 'SRC')
+ assert os.path.isdir(path('dir'))
+ assert os.path.isdir(path('dir/subdir'))
+
+
+@in_env
+def test_move_file(path):
+ mkfile(path('src'), 'SRC')
library.python.fs.move(path('src'), path('dst'))
- assert not os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'SRC'
-
-
-@in_env
-def test_move_file_no_src(path):
- with pytest.raises(OSError) as errinfo:
+ assert not os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+
+
+@in_env
+def test_move_file_no_src(path):
+ with pytest.raises(OSError) as errinfo:
library.python.fs.move(path('src'), path('dst'))
- assert errinfo.value.errno == errno.ENOENT
-
-
-@in_env
-def test_move_file_exists(path):
- mkfile(path('src'), 'SRC')
- mkfile(path('dst'), 'DST')
+ assert errinfo.value.errno == errno.ENOENT
+
+
+@in_env
+def test_move_file_exists(path):
+ mkfile(path('src'), 'SRC')
+ mkfile(path('dst'), 'DST')
if library.python.windows.on_win():
- # move is platform-dependent, use replace_file for dst replacement on all platforms
- with pytest.raises(OSError) as errinfo:
+ # move is platform-dependent, use replace_file for dst replacement on all platforms
+ with pytest.raises(OSError) as errinfo:
library.python.fs.move(path('src'), path('dst'))
- assert errinfo.value.errno == errno.EEXIST
- assert os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'DST'
- else:
+ assert errinfo.value.errno == errno.EEXIST
+ assert os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'DST'
+ else:
library.python.fs.move(path('src'), path('dst'))
- assert not os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'SRC'
-
-
-@in_env
-def test_move_file_exists_dir_empty(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
- with pytest.raises(OSError) as errinfo:
+ assert not os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+
+
+@in_env
+def test_move_file_exists_dir_empty(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.move(path('src'), path('dst'))
- assert errinfo.value.errno in (errno.EEXIST, errno.EISDIR)
- assert os.path.isfile(path('src'))
- assert os.path.isdir(path('dst'))
- assert not os.path.isfile(path('dst/src'))
-
-
-@in_env
-def test_move_file_exists_dir_nonempty(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
- mkfile(path('dst/dst_file'))
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno in (errno.EEXIST, errno.EISDIR)
+ assert os.path.isfile(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert not os.path.isfile(path('dst/src'))
+
+
+@in_env
+def test_move_file_exists_dir_nonempty(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
+ mkfile(path('dst/dst_file'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.move(path('src'), path('dst'))
- assert errinfo.value.errno in (errno.EEXIST, errno.EISDIR)
- assert os.path.isfile(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.isfile(path('dst/dst_file'))
- assert not os.path.isfile(path('dst/src'))
-
-
-@in_env
-def test_move_dir(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
+ assert errinfo.value.errno in (errno.EEXIST, errno.EISDIR)
+ assert os.path.isfile(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.isfile(path('dst/dst_file'))
+ assert not os.path.isfile(path('dst/src'))
+
+
+@in_env
+def test_move_dir(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
library.python.fs.move(path('src'), path('dst'))
- assert not os.path.isdir(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.isfile(path('dst/src_file'))
-
-
-@in_env
-def test_move_dir_exists_empty(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
- os.mkdir(path('dst'))
+ assert not os.path.isdir(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.isfile(path('dst/src_file'))
+
+
+@in_env
+def test_move_dir_exists_empty(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
+ os.mkdir(path('dst'))
if library.python.windows.on_win():
- # move is platform-dependent, use non-atomic replace for directory replacement
- with pytest.raises(OSError) as errinfo:
+ # move is platform-dependent, use non-atomic replace for directory replacement
+ with pytest.raises(OSError) as errinfo:
library.python.fs.move(path('src'), path('dst'))
- assert errinfo.value.errno == errno.EEXIST
- assert os.path.isdir(path('src'))
- assert os.path.isdir(path('dst'))
- assert not os.path.isfile(path('dst/src_file'))
- else:
+ assert errinfo.value.errno == errno.EEXIST
+ assert os.path.isdir(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert not os.path.isfile(path('dst/src_file'))
+ else:
library.python.fs.move(path('src'), path('dst'))
- assert not os.path.isdir(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.isfile(path('dst/src_file'))
-
-
-@in_env
-def test_move_dir_exists_nonempty(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
- os.mkdir(path('dst'))
- mkfile(path('dst/dst_file'))
- with pytest.raises(OSError) as errinfo:
+ assert not os.path.isdir(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.isfile(path('dst/src_file'))
+
+
+@in_env
+def test_move_dir_exists_nonempty(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
+ os.mkdir(path('dst'))
+ mkfile(path('dst/dst_file'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.move(path('src'), path('dst'))
- assert errinfo.value.errno in (errno.EEXIST, errno.ENOTEMPTY)
- assert os.path.isdir(path('src'))
- assert os.path.isfile(path('src/src_file'))
- assert os.path.isdir(path('dst'))
- assert not os.path.isfile(path('dst/src_file'))
- assert os.path.isfile(path('dst/dst_file'))
-
-
-@in_env
-def test_move_dir_exists_file(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
- mkfile(path('dst'), 'DST')
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno in (errno.EEXIST, errno.ENOTEMPTY)
+ assert os.path.isdir(path('src'))
+ assert os.path.isfile(path('src/src_file'))
+ assert os.path.isdir(path('dst'))
+ assert not os.path.isfile(path('dst/src_file'))
+ assert os.path.isfile(path('dst/dst_file'))
+
+
+@in_env
+def test_move_dir_exists_file(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
+ mkfile(path('dst'), 'DST')
+ with pytest.raises(OSError) as errinfo:
library.python.fs.move(path('src'), path('dst'))
- assert errinfo.value.errno in (errno.EEXIST, errno.ENOTDIR)
- assert os.path.isdir(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'DST'
-
-
-@in_env
-def test_replace_file(path):
- mkfile(path('src'), 'SRC')
+ assert errinfo.value.errno in (errno.EEXIST, errno.ENOTDIR)
+ assert os.path.isdir(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'DST'
+
+
+@in_env
+def test_replace_file(path):
+ mkfile(path('src'), 'SRC')
library.python.fs.replace_file(path('src'), path('dst'))
- assert not os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'SRC'
-
- mkfile(path('src'), 'SRC')
+ assert not os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+
+ mkfile(path('src'), 'SRC')
library.python.fs.replace(path('src'), path('dst2'))
- assert not os.path.isfile(path('src'))
- assert os.path.isfile(path('dst2'))
- assert file_data(path('dst2')) == 'SRC'
-
-
-@in_env
-def test_replace_file_no_src(path):
- with pytest.raises(OSError) as errinfo:
+ assert not os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst2'))
+ assert file_data(path('dst2')) == 'SRC'
+
+
+@in_env
+def test_replace_file_no_src(path):
+ with pytest.raises(OSError) as errinfo:
library.python.fs.replace_file(path('src'), path('dst'))
- assert errinfo.value.errno == errno.ENOENT
-
- with pytest.raises(OSError) as errinfo2:
+ assert errinfo.value.errno == errno.ENOENT
+
+ with pytest.raises(OSError) as errinfo2:
library.python.fs.replace(path('src'), path('dst2'))
- assert errinfo2.value.errno == errno.ENOENT
-
-
-@in_env
-def test_replace_file_exists(path):
- mkfile(path('src'), 'SRC')
- mkfile(path('dst'), 'DST')
+ assert errinfo2.value.errno == errno.ENOENT
+
+
+@in_env
+def test_replace_file_exists(path):
+ mkfile(path('src'), 'SRC')
+ mkfile(path('dst'), 'DST')
library.python.fs.replace_file(path('src'), path('dst'))
- assert not os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'SRC'
-
- mkfile(path('src'), 'SRC')
- mkfile(path('dst2'), 'DST')
+ assert not os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+
+ mkfile(path('src'), 'SRC')
+ mkfile(path('dst2'), 'DST')
library.python.fs.replace(path('src'), path('dst2'))
- assert not os.path.isfile(path('src'))
- assert os.path.isfile(path('dst2'))
- assert file_data(path('dst2')) == 'SRC'
-
-
-@in_env
-def test_replace_file_exists_dir_empty(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
- with pytest.raises(OSError) as errinfo:
+ assert not os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst2'))
+ assert file_data(path('dst2')) == 'SRC'
+
+
+@in_env
+def test_replace_file_exists_dir_empty(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.replace_file(path('src'), path('dst'))
- assert errinfo.value.errno in (errno.EISDIR, errno.EACCES)
- assert os.path.isfile(path('src'))
- assert os.path.isdir(path('dst'))
- assert not os.path.isfile(path('dst/src'))
-
-
-@in_env
-def test_replace_file_exists_dir_empty_overwrite(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
+ assert errinfo.value.errno in (errno.EISDIR, errno.EACCES)
+ assert os.path.isfile(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert not os.path.isfile(path('dst/src'))
+
+
+@in_env
+def test_replace_file_exists_dir_empty_overwrite(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
library.python.fs.replace(path('src'), path('dst'))
- assert not os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'SRC'
-
-
-@in_env
-def test_replace_file_exists_dir_nonempty(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
- mkfile(path('dst/dst_file'))
- with pytest.raises(OSError) as errinfo:
+ assert not os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+
+
+@in_env
+def test_replace_file_exists_dir_nonempty(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
+ mkfile(path('dst/dst_file'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.replace_file(path('src'), path('dst'))
- assert errinfo.value.errno in (errno.EISDIR, errno.EACCES)
- assert os.path.isfile(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.isfile(path('dst/dst_file'))
- assert not os.path.isfile(path('dst/src'))
-
-
-@in_env
-def test_replace_file_exists_dir_nonempty_overwrite(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
- mkfile(path('dst/dst_file'))
+ assert errinfo.value.errno in (errno.EISDIR, errno.EACCES)
+ assert os.path.isfile(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.isfile(path('dst/dst_file'))
+ assert not os.path.isfile(path('dst/src'))
+
+
+@in_env
+def test_replace_file_exists_dir_nonempty_overwrite(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
+ mkfile(path('dst/dst_file'))
library.python.fs.replace(path('src'), path('dst'))
- assert not os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'SRC'
-
-
-@in_env
-def test_replace_dir(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
+ assert not os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+
+
+@in_env
+def test_replace_dir(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
library.python.fs.replace(path('src'), path('dst'))
- assert not os.path.isdir(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.isfile(path('dst/src_file'))
-
-
-@in_env
-def test_replace_dir_exists_empty(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
- os.mkdir(path('dst'))
+ assert not os.path.isdir(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.isfile(path('dst/src_file'))
+
+
+@in_env
+def test_replace_dir_exists_empty(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
+ os.mkdir(path('dst'))
library.python.fs.replace(path('src'), path('dst'))
- assert not os.path.isdir(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.isfile(path('dst/src_file'))
-
-
-@in_env
-def test_replace_dir_exists_nonempty(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
- os.mkdir(path('dst'))
- mkfile(path('dst/dst_file'))
+ assert not os.path.isdir(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.isfile(path('dst/src_file'))
+
+
+@in_env
+def test_replace_dir_exists_nonempty(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
+ os.mkdir(path('dst'))
+ mkfile(path('dst/dst_file'))
library.python.fs.replace(path('src'), path('dst'))
- assert not os.path.isdir(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.isfile(path('dst/src_file'))
- assert not os.path.isfile(path('dst/dst_file'))
-
-
-@in_env
-def test_replace_dir_exists_file(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
- mkfile(path('dst'), 'DST')
+ assert not os.path.isdir(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.isfile(path('dst/src_file'))
+ assert not os.path.isfile(path('dst/dst_file'))
+
+
+@in_env
+def test_replace_dir_exists_file(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
+ mkfile(path('dst'), 'DST')
library.python.fs.replace(path('src'), path('dst'))
- assert not os.path.isdir(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.isfile(path('dst/src_file'))
-
-
-@in_env
-def test_remove_file(path):
- mkfile(path('path'))
+ assert not os.path.isdir(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.isfile(path('dst/src_file'))
+
+
+@in_env
+def test_remove_file(path):
+ mkfile(path('path'))
library.python.fs.remove_file(path('path'))
- assert not os.path.exists(path('path'))
-
-
-@in_env
-def test_remove_file_no(path):
- with pytest.raises(OSError) as errinfo:
+ assert not os.path.exists(path('path'))
+
+
+@in_env
+def test_remove_file_no(path):
+ with pytest.raises(OSError) as errinfo:
library.python.fs.remove_file(path('path'))
- assert errinfo.value.errno == errno.ENOENT
-
-
-@in_env
-def test_remove_file_exists_dir(path):
- os.mkdir(path('path'))
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno == errno.ENOENT
+
+
+@in_env
+def test_remove_file_exists_dir(path):
+ os.mkdir(path('path'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.remove_file(path('path'))
- assert errinfo.value.errno in (errno.EISDIR, errno.EACCES)
- assert os.path.isdir(path('path'))
-
-
-@in_env
-def test_remove_dir(path):
- os.mkdir(path('path'))
+ assert errinfo.value.errno in (errno.EISDIR, errno.EACCES)
+ assert os.path.isdir(path('path'))
+
+
+@in_env
+def test_remove_dir(path):
+ os.mkdir(path('path'))
library.python.fs.remove_dir(path('path'))
- assert not os.path.exists(path('path'))
-
-
-@in_env
-def test_remove_dir_no(path):
- with pytest.raises(OSError) as errinfo:
+ assert not os.path.exists(path('path'))
+
+
+@in_env
+def test_remove_dir_no(path):
+ with pytest.raises(OSError) as errinfo:
library.python.fs.remove_dir(path('path'))
- assert errinfo.value.errno == errno.ENOENT
-
-
-@in_env
-def test_remove_dir_exists_file(path):
- mkfile(path('path'))
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno == errno.ENOENT
+
+
+@in_env
+def test_remove_dir_exists_file(path):
+ mkfile(path('path'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.remove_dir(path('path'))
- assert errinfo.value.errno in (errno.ENOTDIR, errno.EINVAL)
- assert os.path.isfile(path('path'))
-
-
-@in_env
-def test_remove_tree(path):
- mktree_example(path, 'path')
+ assert errinfo.value.errno in (errno.ENOTDIR, errno.EINVAL)
+ assert os.path.isfile(path('path'))
+
+
+@in_env
+def test_remove_tree(path):
+ mktree_example(path, 'path')
library.python.fs.remove_tree(path('path'))
- assert not os.path.exists(path('path'))
-
-
-@in_env
-def test_remove_tree_empty(path):
- os.mkdir(path('path'))
+ assert not os.path.exists(path('path'))
+
+
+@in_env
+def test_remove_tree_empty(path):
+ os.mkdir(path('path'))
library.python.fs.remove_tree(path('path'))
- assert not os.path.exists(path('path'))
-
-
-@in_env
-def test_remove_tree_file(path):
- mkfile(path('path'))
+ assert not os.path.exists(path('path'))
+
+
+@in_env
+def test_remove_tree_file(path):
+ mkfile(path('path'))
library.python.fs.remove_tree(path('path'))
- assert not os.path.exists(path('path'))
-
-
-@in_env
-def test_remove_tree_no(path):
- with pytest.raises(OSError) as errinfo:
+ assert not os.path.exists(path('path'))
+
+
+@in_env
+def test_remove_tree_no(path):
+ with pytest.raises(OSError) as errinfo:
library.python.fs.remove_tree(path('path'))
- assert errinfo.value.errno == errno.ENOENT
-
-
-@in_env
-def test_remove_tree_safe(path):
+ assert errinfo.value.errno == errno.ENOENT
+
+
+@in_env
+def test_remove_tree_safe(path):
library.python.fs.remove_tree_safe(path('path'))
-
-
-@in_env
-def test_ensure_removed(path):
+
+
+@in_env
+def test_ensure_removed(path):
library.python.fs.ensure_removed(path('path'))
-
-
-@in_env
-def test_ensure_removed_exists(path):
- os.makedirs(path('dir/subdir'))
+
+
+@in_env
+def test_ensure_removed_exists(path):
+ os.makedirs(path('dir/subdir'))
library.python.fs.ensure_removed(path('dir'))
- assert not os.path.exists(path('dir'))
-
-
-@in_env
-def test_ensure_removed_exists_precise(path):
- os.makedirs(path('dir/subdir'))
+ assert not os.path.exists(path('dir'))
+
+
+@in_env
+def test_ensure_removed_exists_precise(path):
+ os.makedirs(path('dir/subdir'))
library.python.fs.ensure_removed(path('dir/subdir'))
- assert os.path.exists(path('dir'))
- assert not os.path.exists(path('dir/subdir'))
-
-
-@in_env
-def test_hardlink_file(path):
- mkfile(path('src'), 'SRC')
+ assert os.path.exists(path('dir'))
+ assert not os.path.exists(path('dir/subdir'))
+
+
+@in_env
+def test_hardlink_file(path):
+ mkfile(path('src'), 'SRC')
library.python.fs.hardlink(path('src'), path('dst'))
- assert os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'SRC'
- assert inodes_unsupported() or inodes_equal(path('src'), path('dst'))
-
-
-@in_env
-def test_hardlink_file_no_src(path):
- with pytest.raises(OSError) as errinfo:
+ assert os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+ assert inodes_unsupported() or inodes_equal(path('src'), path('dst'))
+
+
+@in_env
+def test_hardlink_file_no_src(path):
+ with pytest.raises(OSError) as errinfo:
library.python.fs.hardlink(path('src'), path('dst'))
- assert errinfo.value.errno == errno.ENOENT
-
-
-@in_env
-def test_hardlink_file_exists(path):
- mkfile(path('src'), 'SRC')
- mkfile(path('dst'), 'DST')
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno == errno.ENOENT
+
+
+@in_env
+def test_hardlink_file_exists(path):
+ mkfile(path('src'), 'SRC')
+ mkfile(path('dst'), 'DST')
+ with pytest.raises(OSError) as errinfo:
library.python.fs.hardlink(path('src'), path('dst'))
- assert errinfo.value.errno == errno.EEXIST
- assert os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'DST'
- assert inodes_unsupported() or not inodes_equal(path('src'), path('dst'))
-
-
-@in_env
-def test_hardlink_file_exists_dir(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno == errno.EEXIST
+ assert os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'DST'
+ assert inodes_unsupported() or not inodes_equal(path('src'), path('dst'))
+
+
+@in_env
+def test_hardlink_file_exists_dir(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.hardlink(path('src'), path('dst'))
- assert errinfo.value.errno == errno.EEXIST
- assert os.path.isfile(path('src'))
- assert os.path.isdir(path('dst'))
- assert not os.path.isfile(path('dst/src'))
-
-
-@in_env
-def test_hardlink_dir(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno == errno.EEXIST
+ assert os.path.isfile(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert not os.path.isfile(path('dst/src'))
+
+
+@in_env
+def test_hardlink_dir(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.hardlink(path('src'), path('dst'))
- assert errinfo.value.errno in (errno.EPERM, errno.EACCES)
- assert os.path.isdir(path('src'))
- assert not os.path.isdir(path('dst'))
-
-
+ assert errinfo.value.errno in (errno.EPERM, errno.EACCES)
+ assert os.path.isdir(path('src'))
+ assert not os.path.isdir(path('dst'))
+
+
@pytest.mark.skipif(library.python.windows.on_win(), reason='Symlinks disabled on Windows')
-@in_env
-def test_symlink_file(path):
- mkfile(path('src'), 'SRC')
+@in_env
+def test_symlink_file(path):
+ mkfile(path('src'), 'SRC')
library.python.fs.symlink(path('src'), path('dst'))
- assert os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert os.path.islink(path('dst'))
- assert file_data(path('dst')) == 'SRC'
-
-
+ assert os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert os.path.islink(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+
+
@pytest.mark.skipif(library.python.windows.on_win(), reason='Symlinks disabled on Windows')
-@in_env
-def test_symlink_file_no_src(path):
+@in_env
+def test_symlink_file_no_src(path):
library.python.fs.symlink(path('src'), path('dst'))
- assert not os.path.isfile(path('src'))
- assert not os.path.isfile(path('dst'))
- assert os.path.islink(path('dst'))
-
-
+ assert not os.path.isfile(path('src'))
+ assert not os.path.isfile(path('dst'))
+ assert os.path.islink(path('dst'))
+
+
@pytest.mark.skipif(library.python.windows.on_win(), reason='Symlinks disabled on Windows')
-@in_env
-def test_symlink_file_exists(path):
- mkfile(path('src'), 'SRC')
- mkfile(path('dst'), 'DST')
- with pytest.raises(OSError) as errinfo:
+@in_env
+def test_symlink_file_exists(path):
+ mkfile(path('src'), 'SRC')
+ mkfile(path('dst'), 'DST')
+ with pytest.raises(OSError) as errinfo:
library.python.fs.symlink(path('src'), path('dst'))
- assert errinfo.value.errno == errno.EEXIST
- assert os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert not os.path.islink(path('dst'))
- assert file_data(path('dst')) == 'DST'
-
-
+ assert errinfo.value.errno == errno.EEXIST
+ assert os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert not os.path.islink(path('dst'))
+ assert file_data(path('dst')) == 'DST'
+
+
@pytest.mark.skipif(library.python.windows.on_win(), reason='Symlinks disabled on Windows')
-@in_env
-def test_symlink_file_exists_dir(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
- with pytest.raises(OSError) as errinfo:
+@in_env
+def test_symlink_file_exists_dir(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.symlink(path('src'), path('dst'))
- assert errinfo.value.errno == errno.EEXIST
- assert os.path.isfile(path('src'))
- assert os.path.isdir(path('dst'))
- assert not os.path.islink(path('dst'))
- assert not os.path.isfile(path('dst/src'))
-
-
+ assert errinfo.value.errno == errno.EEXIST
+ assert os.path.isfile(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert not os.path.islink(path('dst'))
+ assert not os.path.isfile(path('dst/src'))
+
+
@pytest.mark.skipif(library.python.windows.on_win(), reason='Symlinks disabled on Windows')
-@in_env
-def test_symlink_dir(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
+@in_env
+def test_symlink_dir(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
library.python.fs.symlink(path('src'), path('dst'))
- assert os.path.isdir(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.islink(path('dst'))
- assert os.path.isfile(path('dst/src_file'))
-
-
+ assert os.path.isdir(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.islink(path('dst'))
+ assert os.path.isfile(path('dst/src_file'))
+
+
@pytest.mark.skipif(library.python.windows.on_win(), reason='Symlinks disabled on Windows')
-@in_env
-def test_symlink_dir_no_src(path):
+@in_env
+def test_symlink_dir_no_src(path):
library.python.fs.symlink(path('src'), path('dst'))
- assert not os.path.isdir(path('src'))
- assert not os.path.isdir(path('dst'))
- assert os.path.islink(path('dst'))
-
-
+ assert not os.path.isdir(path('src'))
+ assert not os.path.isdir(path('dst'))
+ assert os.path.islink(path('dst'))
+
+
@pytest.mark.skipif(library.python.windows.on_win(), reason='Symlinks disabled on Windows')
-@in_env
-def test_symlink_dir_exists(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
- os.mkdir(path('dst'))
- with pytest.raises(OSError) as errinfo:
+@in_env
+def test_symlink_dir_exists(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
+ os.mkdir(path('dst'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.symlink(path('src'), path('dst'))
- assert errinfo.value.errno == errno.EEXIST
- assert os.path.isdir(path('src'))
- assert os.path.isdir(path('dst'))
- assert not os.path.islink(path('dst'))
- assert not os.path.isfile(path('dst/src_file'))
-
-
+ assert errinfo.value.errno == errno.EEXIST
+ assert os.path.isdir(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert not os.path.islink(path('dst'))
+ assert not os.path.isfile(path('dst/src_file'))
+
+
@pytest.mark.skipif(library.python.windows.on_win(), reason='Symlinks disabled on Windows')
-@in_env
-def test_symlink_dir_exists_file(path):
- os.mkdir(path('src'))
- mkfile(path('src/src_file'))
- mkfile(path('dst'), 'DST')
- with pytest.raises(OSError) as errinfo:
+@in_env
+def test_symlink_dir_exists_file(path):
+ os.mkdir(path('src'))
+ mkfile(path('src/src_file'))
+ mkfile(path('dst'), 'DST')
+ with pytest.raises(OSError) as errinfo:
library.python.fs.symlink(path('src'), path('dst'))
- assert errinfo.value.errno == errno.EEXIST
- assert os.path.isdir(path('src'))
- assert os.path.isfile(path('dst'))
- assert not os.path.islink(path('dst'))
-
-
-@in_env
-def test_hardlink_tree(path):
- mktree_example(path, 'src')
+ assert errinfo.value.errno == errno.EEXIST
+ assert os.path.isdir(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert not os.path.islink(path('dst'))
+
+
+@in_env
+def test_hardlink_tree(path):
+ mktree_example(path, 'src')
library.python.fs.hardlink_tree(path('src'), path('dst'))
- assert trees_equal(path('src'), path('dst'))
-
-
-@in_env
-def test_hardlink_tree_empty(path):
- os.mkdir(path('src'))
+ assert trees_equal(path('src'), path('dst'))
+
+
+@in_env
+def test_hardlink_tree_empty(path):
+ os.mkdir(path('src'))
library.python.fs.hardlink_tree(path('src'), path('dst'))
- assert trees_equal(path('src'), path('dst'))
-
-
-@in_env
-def test_hardlink_tree_file(path):
- mkfile(path('src'), 'SRC')
+ assert trees_equal(path('src'), path('dst'))
+
+
+@in_env
+def test_hardlink_tree_file(path):
+ mkfile(path('src'), 'SRC')
library.python.fs.hardlink_tree(path('src'), path('dst'))
- assert trees_equal(path('src'), path('dst'))
-
-
-@in_env
-def test_hardlink_tree_no_src(path):
- with pytest.raises(OSError) as errinfo:
+ assert trees_equal(path('src'), path('dst'))
+
+
+@in_env
+def test_hardlink_tree_no_src(path):
+ with pytest.raises(OSError) as errinfo:
library.python.fs.hardlink_tree(path('src'), path('dst'))
- assert errinfo.value.errno == errno.ENOENT
-
-
-@in_env
-def test_hardlink_tree_exists(path):
- mktree_example(path, 'src')
- os.mkdir(path('dst_dir'))
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno == errno.ENOENT
+
+
+@in_env
+def test_hardlink_tree_exists(path):
+ mktree_example(path, 'src')
+ os.mkdir(path('dst_dir'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.hardlink_tree(path('src'), path('dst_dir'))
- assert errinfo.value.errno == errno.EEXIST
- mkfile(path('dst_file'), 'DST')
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno == errno.EEXIST
+ mkfile(path('dst_file'), 'DST')
+ with pytest.raises(OSError) as errinfo:
library.python.fs.hardlink_tree(path('src'), path('dst_file'))
- assert errinfo.value.errno == errno.EEXIST
-
-
-@in_env
-def test_hardlink_tree_file_exists(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst_dir'))
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno == errno.EEXIST
+
+
+@in_env
+def test_hardlink_tree_file_exists(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst_dir'))
+ with pytest.raises(OSError) as errinfo:
library.python.fs.hardlink_tree(path('src'), path('dst_dir'))
- assert errinfo.value.errno == errno.EEXIST
- mkfile(path('dst_file'), 'DST')
- with pytest.raises(OSError) as errinfo:
+ assert errinfo.value.errno == errno.EEXIST
+ mkfile(path('dst_file'), 'DST')
+ with pytest.raises(OSError) as errinfo:
library.python.fs.hardlink_tree(path('src'), path('dst_file'))
- assert errinfo.value.errno == errno.EEXIST
-
-
-@in_env
-def test_copy_file(path):
- mkfile(path('src'), 'SRC')
+ assert errinfo.value.errno == errno.EEXIST
+
+
+@in_env
+def test_copy_file(path):
+ mkfile(path('src'), 'SRC')
library.python.fs.copy_file(path('src'), path('dst'))
- assert os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'SRC'
-
-
-@in_env
-def test_copy_file_no_src(path):
- with pytest.raises(EnvironmentError):
+ assert os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+
+
+@in_env
+def test_copy_file_no_src(path):
+ with pytest.raises(EnvironmentError):
library.python.fs.copy_file(path('src'), path('dst'))
-
-
-@in_env
-def test_copy_file_exists(path):
- mkfile(path('src'), 'SRC')
- mkfile(path('dst'), 'DST')
+
+
+@in_env
+def test_copy_file_exists(path):
+ mkfile(path('src'), 'SRC')
+ mkfile(path('dst'), 'DST')
library.python.fs.copy_file(path('src'), path('dst'))
- assert os.path.isfile(path('src'))
- assert os.path.isfile(path('dst'))
- assert file_data(path('dst')) == 'SRC'
-
-
-@in_env
-def test_copy_file_exists_dir_empty(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
- with pytest.raises(EnvironmentError):
+ assert os.path.isfile(path('src'))
+ assert os.path.isfile(path('dst'))
+ assert file_data(path('dst')) == 'SRC'
+
+
+@in_env
+def test_copy_file_exists_dir_empty(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
+ with pytest.raises(EnvironmentError):
library.python.fs.copy_file(path('src'), path('dst'))
- assert os.path.isfile(path('src'))
- assert os.path.isdir(path('dst'))
- assert not os.path.isfile(path('dst/src'))
-
-
-@in_env
-def test_copy_file_exists_dir_nonempty(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst'))
- mkfile(path('dst/dst_file'))
- with pytest.raises(EnvironmentError):
+ assert os.path.isfile(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert not os.path.isfile(path('dst/src'))
+
+
+@in_env
+def test_copy_file_exists_dir_nonempty(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst'))
+ mkfile(path('dst/dst_file'))
+ with pytest.raises(EnvironmentError):
library.python.fs.copy_file(path('src'), path('dst'))
- assert os.path.isfile(path('src'))
- assert os.path.isdir(path('dst'))
- assert os.path.isfile(path('dst/dst_file'))
- assert not os.path.isfile(path('dst/src'))
-
-
-@in_env
-def test_copy_tree(path):
- mktree_example(path, 'src')
+ assert os.path.isfile(path('src'))
+ assert os.path.isdir(path('dst'))
+ assert os.path.isfile(path('dst/dst_file'))
+ assert not os.path.isfile(path('dst/src'))
+
+
+@in_env
+def test_copy_tree(path):
+ mktree_example(path, 'src')
library.python.fs.copy_tree(path('src'), path('dst'))
- assert trees_equal(path('src'), path('dst'))
-
-
-@in_env
-def test_copy_tree_empty(path):
- os.mkdir(path('src'))
+ assert trees_equal(path('src'), path('dst'))
+
+
+@in_env
+def test_copy_tree_empty(path):
+ os.mkdir(path('src'))
library.python.fs.copy_tree(path('src'), path('dst'))
- assert trees_equal(path('src'), path('dst'))
-
-
-@in_env
-def test_copy_tree_file(path):
- mkfile(path('src'), 'SRC')
+ assert trees_equal(path('src'), path('dst'))
+
+
+@in_env
+def test_copy_tree_file(path):
+ mkfile(path('src'), 'SRC')
library.python.fs.copy_tree(path('src'), path('dst'))
- assert trees_equal(path('src'), path('dst'))
-
-
-@in_env
-def test_copy_tree_no_src(path):
- with pytest.raises(EnvironmentError):
+ assert trees_equal(path('src'), path('dst'))
+
+
+@in_env
+def test_copy_tree_no_src(path):
+ with pytest.raises(EnvironmentError):
library.python.fs.copy_tree(path('src'), path('dst'))
-
-
-@in_env
-def test_copy_tree_exists(path):
- mktree_example(path, 'src')
- os.mkdir(path('dst_dir'))
- with pytest.raises(EnvironmentError):
+
+
+@in_env
+def test_copy_tree_exists(path):
+ mktree_example(path, 'src')
+ os.mkdir(path('dst_dir'))
+ with pytest.raises(EnvironmentError):
library.python.fs.copy_tree(path('src'), path('dst_dir'))
- mkfile(path('dst_file'), 'DST')
- with pytest.raises(EnvironmentError):
+ mkfile(path('dst_file'), 'DST')
+ with pytest.raises(EnvironmentError):
library.python.fs.copy_tree(path('src'), path('dst_file'))
-
-
-@in_env
-def test_copy_tree_file_exists(path):
- mkfile(path('src'), 'SRC')
- os.mkdir(path('dst_dir'))
- with pytest.raises(EnvironmentError):
+
+
+@in_env
+def test_copy_tree_file_exists(path):
+ mkfile(path('src'), 'SRC')
+ os.mkdir(path('dst_dir'))
+ with pytest.raises(EnvironmentError):
library.python.fs.copy_tree(path('src'), path('dst_dir'))
- mkfile(path('dst_file'), 'DST')
+ mkfile(path('dst_file'), 'DST')
library.python.fs.copy_tree(path('src'), path('dst_file'))
- assert trees_equal(path('src'), path('dst_file'))
-
-
-@in_env
-def test_read_file(path):
- mkfile(path('src'), 'SRC')
+ assert trees_equal(path('src'), path('dst_file'))
+
+
+@in_env
+def test_read_file(path):
+ mkfile(path('src'), 'SRC')
assert library.python.fs.read_file(path('src')).decode(library.python.strings.fs_encoding()) == 'SRC'
assert library.python.fs.read_file(path('src'), binary=False) == 'SRC'
-
-
-@in_env
-def test_read_file_empty(path):
- mkfile(path('src'))
+
+
+@in_env
+def test_read_file_empty(path):
+ mkfile(path('src'))
assert library.python.fs.read_file(path('src')).decode(library.python.strings.fs_encoding()) == ''
assert library.python.fs.read_file(path('src'), binary=False) == ''
-
-
-@in_env
-def test_read_file_multiline(path):
- mkfile(path('src'), 'SRC line 1\nSRC line 2\n')
+
+
+@in_env
+def test_read_file_multiline(path):
+ mkfile(path('src'), 'SRC line 1\nSRC line 2\n')
assert (
library.python.fs.read_file(path('src')).decode(library.python.strings.fs_encoding())
== 'SRC line 1\nSRC line 2\n'
)
assert library.python.fs.read_file(path('src'), binary=False) == 'SRC line 1\nSRC line 2\n'
-
-
-@in_env
-def test_read_file_multiline_crlf(path):
- mkfile(path('src'), 'SRC line 1\r\nSRC line 2\r\n')
+
+
+@in_env
+def test_read_file_multiline_crlf(path):
+ mkfile(path('src'), 'SRC line 1\r\nSRC line 2\r\n')
assert (
library.python.fs.read_file(path('src')).decode(library.python.strings.fs_encoding())
== 'SRC line 1\r\nSRC line 2\r\n'
)
if library.python.windows.on_win() or six.PY3: # universal newlines are by default in text mode in python3
assert library.python.fs.read_file(path('src'), binary=False) == 'SRC line 1\nSRC line 2\n'
- else:
+ else:
assert library.python.fs.read_file(path('src'), binary=False) == 'SRC line 1\r\nSRC line 2\r\n'
-
-
-@in_env
-def test_read_file_unicode(path):
- s = u'АБВ'
- mkfile(path('src'), s.encode('utf-8'))
- mkfile(path('src_cp1251'), s.encode('cp1251'))
+
+
+@in_env
+def test_read_file_unicode(path):
+ s = u'АБВ'
+ mkfile(path('src'), s.encode('utf-8'))
+ mkfile(path('src_cp1251'), s.encode('cp1251'))
assert library.python.fs.read_file_unicode(path('src')) == s
assert library.python.fs.read_file_unicode(path('src_cp1251'), enc='cp1251') == s
assert library.python.fs.read_file_unicode(path('src'), binary=False) == s
assert library.python.fs.read_file_unicode(path('src_cp1251'), binary=False, enc='cp1251') == s
-
-
-@in_env
-def test_read_file_unicode_empty(path):
- mkfile(path('src'))
- mkfile(path('src_cp1251'))
+
+
+@in_env
+def test_read_file_unicode_empty(path):
+ mkfile(path('src'))
+ mkfile(path('src_cp1251'))
assert library.python.fs.read_file_unicode(path('src')) == ''
assert library.python.fs.read_file_unicode(path('src_cp1251'), enc='cp1251') == ''
assert library.python.fs.read_file_unicode(path('src'), binary=False) == ''
assert library.python.fs.read_file_unicode(path('src_cp1251'), binary=False, enc='cp1251') == ''
-
-
-@in_env
-def test_read_file_unicode_multiline(path):
- s = u'АБВ\nИ еще\n'
- mkfile(path('src'), s.encode('utf-8'))
- mkfile(path('src_cp1251'), s.encode('cp1251'))
+
+
+@in_env
+def test_read_file_unicode_multiline(path):
+ s = u'АБВ\nИ еще\n'
+ mkfile(path('src'), s.encode('utf-8'))
+ mkfile(path('src_cp1251'), s.encode('cp1251'))
assert library.python.fs.read_file_unicode(path('src')) == s
assert library.python.fs.read_file_unicode(path('src_cp1251'), enc='cp1251') == s
assert library.python.fs.read_file_unicode(path('src'), binary=False) == s
assert library.python.fs.read_file_unicode(path('src_cp1251'), binary=False, enc='cp1251') == s
-
-
-@in_env
-def test_read_file_unicode_multiline_crlf(path):
- s = u'АБВ\r\nИ еще\r\n'
- mkfile(path('src'), s.encode('utf-8'))
- mkfile(path('src_cp1251'), s.encode('cp1251'))
+
+
+@in_env
+def test_read_file_unicode_multiline_crlf(path):
+ s = u'АБВ\r\nИ еще\r\n'
+ mkfile(path('src'), s.encode('utf-8'))
+ mkfile(path('src_cp1251'), s.encode('cp1251'))
assert library.python.fs.read_file_unicode(path('src')) == s
assert library.python.fs.read_file_unicode(path('src_cp1251'), enc='cp1251') == s
if library.python.windows.on_win() or six.PY3: # universal newlines are by default in text mode in python3
assert library.python.fs.read_file_unicode(path('src'), binary=False) == u'АБВ\nИ еще\n'
assert library.python.fs.read_file_unicode(path('src_cp1251'), binary=False, enc='cp1251') == u'АБВ\nИ еще\n'
- else:
+ else:
assert library.python.fs.read_file_unicode(path('src'), binary=False) == s
assert library.python.fs.read_file_unicode(path('src_cp1251'), binary=False, enc='cp1251') == s
-
-
-@in_env
-def test_write_file(path):
+
+
+@in_env
+def test_write_file(path):
library.python.fs.write_file(path('src'), 'SRC')
- assert file_data(path('src')) == 'SRC'
+ assert file_data(path('src')) == 'SRC'
library.python.fs.write_file(path('src2'), 'SRC', binary=False)
- assert file_data(path('src2')) == 'SRC'
-
-
-@in_env
-def test_write_file_empty(path):
+ assert file_data(path('src2')) == 'SRC'
+
+
+@in_env
+def test_write_file_empty(path):
library.python.fs.write_file(path('src'), '')
- assert file_data(path('src')) == ''
+ assert file_data(path('src')) == ''
library.python.fs.write_file(path('src2'), '', binary=False)
- assert file_data(path('src2')) == ''
-
-
-@in_env
-def test_write_file_multiline(path):
+ assert file_data(path('src2')) == ''
+
+
+@in_env
+def test_write_file_multiline(path):
library.python.fs.write_file(path('src'), 'SRC line 1\nSRC line 2\n')
- assert file_data(path('src')) == 'SRC line 1\nSRC line 2\n'
+ assert file_data(path('src')) == 'SRC line 1\nSRC line 2\n'
library.python.fs.write_file(path('src2'), 'SRC line 1\nSRC line 2\n', binary=False)
if library.python.windows.on_win():
- assert file_data(path('src2')) == 'SRC line 1\r\nSRC line 2\r\n'
- else:
- assert file_data(path('src2')) == 'SRC line 1\nSRC line 2\n'
-
-
-@in_env
-def test_write_file_multiline_crlf(path):
+ assert file_data(path('src2')) == 'SRC line 1\r\nSRC line 2\r\n'
+ else:
+ assert file_data(path('src2')) == 'SRC line 1\nSRC line 2\n'
+
+
+@in_env
+def test_write_file_multiline_crlf(path):
library.python.fs.write_file(path('src'), 'SRC line 1\r\nSRC line 2\r\n')
- assert file_data(path('src')) == 'SRC line 1\r\nSRC line 2\r\n'
+ assert file_data(path('src')) == 'SRC line 1\r\nSRC line 2\r\n'
library.python.fs.write_file(path('src2'), 'SRC line 1\r\nSRC line 2\r\n', binary=False)
if library.python.windows.on_win():
- assert file_data(path('src2')) == 'SRC line 1\r\r\nSRC line 2\r\r\n'
- else:
- assert file_data(path('src2')) == 'SRC line 1\r\nSRC line 2\r\n'
-
-
-@in_env
-def test_get_file_size(path):
- mkfile(path('one.txt'), '22')
+ assert file_data(path('src2')) == 'SRC line 1\r\r\nSRC line 2\r\r\n'
+ else:
+ assert file_data(path('src2')) == 'SRC line 1\r\nSRC line 2\r\n'
+
+
+@in_env
+def test_get_file_size(path):
+ mkfile(path('one.txt'), '22')
assert library.python.fs.get_file_size(path('one.txt')) == 2
-@in_env
-def test_get_file_size_empty(path):
- mkfile(path('one.txt'))
+@in_env
+def test_get_file_size_empty(path):
+ mkfile(path('one.txt'))
assert library.python.fs.get_file_size(path('one.txt')) == 0
-
-
-@in_env
-def test_get_tree_size(path):
- os.makedirs(path('deeper'))
- mkfile(path('one.txt'), '1')
- mkfile(path('deeper/two.txt'), '22')
+
+
+@in_env
+def test_get_tree_size(path):
+ os.makedirs(path('deeper'))
+ mkfile(path('one.txt'), '1')
+ mkfile(path('deeper/two.txt'), '22')
assert library.python.fs.get_tree_size(path('one.txt')) == 1
assert library.python.fs.get_tree_size(path('')) == 1
assert library.python.fs.get_tree_size(path(''), recursive=True) == 3
-
-
+
+
@pytest.mark.skipif(library.python.windows.on_win(), reason='Symlinks disabled on Windows')
-@in_env
-def test_get_tree_size_dangling_symlink(path):
- os.makedirs(path('deeper'))
- mkfile(path('one.txt'), '1')
- mkfile(path('deeper/two.txt'), '22')
- os.symlink(path('deeper/two.txt'), path("deeper/link.txt"))
- os.remove(path('deeper/two.txt'))
- # does not fail
+@in_env
+def test_get_tree_size_dangling_symlink(path):
+ os.makedirs(path('deeper'))
+ mkfile(path('one.txt'), '1')
+ mkfile(path('deeper/two.txt'), '22')
+ os.symlink(path('deeper/two.txt'), path("deeper/link.txt"))
+ os.remove(path('deeper/two.txt'))
+ # does not fail
assert library.python.fs.get_tree_size(path(''), recursive=True) == 1
diff --git a/library/python/pytest/allure/ya.make b/library/python/pytest/allure/ya.make
index ab3f449c7f..cd1517f45d 100644
--- a/library/python/pytest/allure/ya.make
+++ b/library/python/pytest/allure/ya.make
@@ -2,10 +2,10 @@ PY23_LIBRARY()
OWNER(exprmntr)
-PY_SRCS(conftest.py)
-
-PEERDIR(
- contrib/python/pytest-allure-adaptor
+PY_SRCS(conftest.py)
+
+PEERDIR(
+ contrib/python/pytest-allure-adaptor
)
END()
diff --git a/library/python/pytest/empty/ya.make b/library/python/pytest/empty/ya.make
index 8f0fa37e2a..5d9e5771f7 100644
--- a/library/python/pytest/empty/ya.make
+++ b/library/python/pytest/empty/ya.make
@@ -1,12 +1,12 @@
LIBRARY()
-OWNER(
- g:yatool
- dmitko
-)
+OWNER(
+ g:yatool
+ dmitko
+)
-SRCS(
- main.c
-)
+SRCS(
+ main.c
+)
END()
diff --git a/library/python/pytest/ya.make b/library/python/pytest/ya.make
index 060c92c313..d74715d981 100644
--- a/library/python/pytest/ya.make
+++ b/library/python/pytest/ya.make
@@ -1,9 +1,9 @@
PY23_LIBRARY()
-OWNER(
- g:yatool
- dmitko
-)
+OWNER(
+ g:yatool
+ dmitko
+)
PY_SRCS(
__init__.py
diff --git a/library/python/pytest/yatest_tools.py b/library/python/pytest/yatest_tools.py
index 6b8b896394..9dc1ed6943 100644
--- a/library/python/pytest/yatest_tools.py
+++ b/library/python/pytest/yatest_tools.py
@@ -233,10 +233,10 @@ def get_python_cmd(opts=None, use_huge=True, suite=None):
return ["python"]
if suite and not suite._use_arcadia_python:
return ["python"]
- if use_huge:
- return ["$(PYTHON)/python"]
- ymake_path = opts.ymake_bin if opts and getattr(opts, 'ymake_bin', None) else "$(YMAKE)/ymake"
- return [ymake_path, "--python"]
+ if use_huge:
+ return ["$(PYTHON)/python"]
+ ymake_path = opts.ymake_bin if opts and getattr(opts, 'ymake_bin', None) else "$(YMAKE)/ymake"
+ return [ymake_path, "--python"]
def normalize_name(name):
diff --git a/library/python/reservoir_sampling/ya.make b/library/python/reservoir_sampling/ya.make
index 24cac20157..12867ce8b1 100644
--- a/library/python/reservoir_sampling/ya.make
+++ b/library/python/reservoir_sampling/ya.make
@@ -5,6 +5,6 @@ OWNER(
PY23_LIBRARY()
-PY_SRCS(__init__.py)
+PY_SRCS(__init__.py)
END()
diff --git a/library/python/resource/ut/lib/ya.make b/library/python/resource/ut/lib/ya.make
index 693e388878..a0d7697e8d 100644
--- a/library/python/resource/ut/lib/ya.make
+++ b/library/python/resource/ut/lib/ya.make
@@ -2,7 +2,7 @@ PY23_LIBRARY()
OWNER(pg)
-TEST_SRCS(test_simple.py)
+TEST_SRCS(test_simple.py)
PEERDIR(
library/python/resource
diff --git a/library/python/resource/ya.make b/library/python/resource/ya.make
index 989329fa4b..7306bd4c1b 100644
--- a/library/python/resource/ya.make
+++ b/library/python/resource/ya.make
@@ -6,8 +6,8 @@ PEERDIR(
contrib/python/six
)
-PY_SRCS(__init__.py)
+PY_SRCS(__init__.py)
END()
-
-RECURSE_FOR_TESTS(ut)
+
+RECURSE_FOR_TESTS(ut)
diff --git a/library/python/runtime_py3/main/ya.make b/library/python/runtime_py3/main/ya.make
index f308a93b28..9ddf6cf912 100644
--- a/library/python/runtime_py3/main/ya.make
+++ b/library/python/runtime_py3/main/ya.make
@@ -1,9 +1,9 @@
LIBRARY()
-OWNER(
- pg
- orivej
-)
+OWNER(
+ pg
+ orivej
+)
PEERDIR(
contrib/tools/python3/src
diff --git a/library/python/runtime_py3/test/traceback/ya.make b/library/python/runtime_py3/test/traceback/ya.make
index b61fe9550b..bf269bb447 100644
--- a/library/python/runtime_py3/test/traceback/ya.make
+++ b/library/python/runtime_py3/test/traceback/ya.make
@@ -1,17 +1,17 @@
PY3_PROGRAM()
-OWNER(
- abodrov
- borman
-)
+OWNER(
+ abodrov
+ borman
+)
PEERDIR(
contrib/python/ipython
)
PY_SRCS(
- MAIN
- __main__.py=main
+ MAIN
+ __main__.py=main
crash.py
mod/__init__.py
)
diff --git a/library/python/runtime_py3/test/ya.make b/library/python/runtime_py3/test/ya.make
index 4ec3db74f5..5c0197e99c 100644
--- a/library/python/runtime_py3/test/ya.make
+++ b/library/python/runtime_py3/test/ya.make
@@ -1,11 +1,11 @@
PY3TEST()
-OWNER(
- abodrov
- borman
+OWNER(
+ abodrov
+ borman
)
-DEPENDS(library/python/runtime_py3/test/traceback)
+DEPENDS(library/python/runtime_py3/test/traceback)
PEERDIR(
contrib/python/parameterized
@@ -17,7 +17,7 @@ PY_SRCS(
resources/__init__.py
resources/submodule/__init__.py
)
-
+
TEST_SRCS(
test_metadata.py
test_resources.py
diff --git a/library/python/runtime_py3/ya.make b/library/python/runtime_py3/ya.make
index fa5c11341a..507ad14c40 100644
--- a/library/python/runtime_py3/ya.make
+++ b/library/python/runtime_py3/ya.make
@@ -1,10 +1,10 @@
PY3_LIBRARY()
-OWNER(
- borman
- orivej
- pg
-)
+OWNER(
+ borman
+ orivej
+ pg
+)
NO_WSHADOW()
@@ -14,7 +14,7 @@ PEERDIR(
library/cpp/resource
)
-CFLAGS(-DCYTHON_REGISTER_ABCS=0)
+CFLAGS(-DCYTHON_REGISTER_ABCS=0)
NO_PYTHON_INCLUDES()
diff --git a/library/python/strings/strings.py b/library/python/strings/strings.py
index 5bfddfe78a..cb903be611 100644
--- a/library/python/strings/strings.py
+++ b/library/python/strings/strings.py
@@ -1,17 +1,17 @@
-import locale
-import logging
+import locale
+import logging
import six
-import sys
+import sys
import codecs
-
+
import library.python.func
-
+
logger = logging.getLogger(__name__)
-
+
DEFAULT_ENCODING = 'utf-8'
-ENCODING_ERRORS_POLICY = 'replace'
-
+ENCODING_ERRORS_POLICY = 'replace'
+
def left_strip(el, prefix):
"""
@@ -20,29 +20,29 @@ def left_strip(el, prefix):
if el.startswith(prefix):
return el[len(prefix):]
return el
-
-
-# Explicit to-text conversion
+
+
+# Explicit to-text conversion
# Chooses between str/unicode, i.e. six.binary_type/six.text_type
-def to_basestring(value):
+def to_basestring(value):
if isinstance(value, (six.binary_type, six.text_type)):
- return value
- try:
+ return value
+ try:
if six.PY2:
return unicode(value)
else:
return str(value)
- except UnicodeDecodeError:
- try:
- return str(value)
- except UnicodeEncodeError:
- return repr(value)
-to_text = to_basestring
-
-
+ except UnicodeDecodeError:
+ try:
+ return str(value)
+ except UnicodeEncodeError:
+ return repr(value)
+to_text = to_basestring
+
+
def to_unicode(value, from_enc=DEFAULT_ENCODING):
if isinstance(value, six.text_type):
- return value
+ return value
if isinstance(value, six.binary_type):
if six.PY2:
return unicode(value, from_enc, ENCODING_ERRORS_POLICY)
@@ -51,23 +51,23 @@ def to_unicode(value, from_enc=DEFAULT_ENCODING):
return six.text_type(value)
-# Optional from_enc enables transcoding
+# Optional from_enc enables transcoding
def to_str(value, to_enc=DEFAULT_ENCODING, from_enc=None):
if isinstance(value, six.binary_type):
- if from_enc is None or to_enc == from_enc:
- # Unknown input encoding or input and output encoding are the same
- return value
- value = to_unicode(value, from_enc=from_enc)
+ if from_enc is None or to_enc == from_enc:
+ # Unknown input encoding or input and output encoding are the same
+ return value
+ value = to_unicode(value, from_enc=from_enc)
if isinstance(value, six.text_type):
- return value.encode(to_enc, ENCODING_ERRORS_POLICY)
+ return value.encode(to_enc, ENCODING_ERRORS_POLICY)
return six.binary_type(value)
-
-
+
+
def _convert_deep(x, enc, convert, relaxed=True):
- if x is None:
- return None
+ if x is None:
+ return None
if isinstance(x, (six.text_type, six.binary_type)):
- return convert(x, enc)
+ return convert(x, enc)
if isinstance(x, dict):
return {convert(k, enc): _convert_deep(v, enc, convert, relaxed) for k, v in six.iteritems(x)}
if isinstance(x, list):
@@ -82,15 +82,15 @@ def _convert_deep(x, enc, convert, relaxed=True):
def unicodize_deep(x, enc=DEFAULT_ENCODING, relaxed=True):
return _convert_deep(x, enc, to_unicode, relaxed)
-
-
+
+
def stringize_deep(x, enc=DEFAULT_ENCODING, relaxed=True):
return _convert_deep(x, enc, to_str, relaxed)
-
-
+
+
@library.python.func.memoize()
-def locale_encoding():
- try:
+def locale_encoding():
+ try:
loc = locale.getdefaultlocale()[1]
if loc:
codecs.lookup(loc)
@@ -98,17 +98,17 @@ def locale_encoding():
except LookupError as e:
logger.debug('Cannot get system locale: %s', e)
return None
- except ValueError as e:
+ except ValueError as e:
logger.warn('Cannot get system locale: %s', e)
- return None
-
-
-def fs_encoding():
- return sys.getfilesystemencoding()
-
-
-def guess_default_encoding():
- enc = locale_encoding()
+ return None
+
+
+def fs_encoding():
+ return sys.getfilesystemencoding()
+
+
+def guess_default_encoding():
+ enc = locale_encoding()
return enc if enc else DEFAULT_ENCODING
diff --git a/library/python/strings/ut/test_strings.py b/library/python/strings/ut/test_strings.py
index dd0c694ee1..0ec4fb5d79 100644
--- a/library/python/strings/ut/test_strings.py
+++ b/library/python/strings/ut/test_strings.py
@@ -1,37 +1,37 @@
-# coding=utf-8
-
-import pytest
+# coding=utf-8
+
+import pytest
import six
-
+
import library.python.strings
-
-
-class Convertible(object):
- text = u'текст'
- text_utf8 = text.encode('utf-8')
-
- def __unicode__(self):
- return self.text
-
- def __str__(self):
- return self.text_utf8
-
-
-class ConvertibleToUnicodeOnly(Convertible):
- def __str__(self):
- return self.text.encode('ascii')
-
-
-class ConvertibleToStrOnly(Convertible):
- def __unicode__(self):
- return self.text_utf8.decode('ascii')
-
-
-class NonConvertible(ConvertibleToUnicodeOnly, ConvertibleToStrOnly):
- pass
-
-
-def test_to_basestring():
+
+
+class Convertible(object):
+ text = u'текст'
+ text_utf8 = text.encode('utf-8')
+
+ def __unicode__(self):
+ return self.text
+
+ def __str__(self):
+ return self.text_utf8
+
+
+class ConvertibleToUnicodeOnly(Convertible):
+ def __str__(self):
+ return self.text.encode('ascii')
+
+
+class ConvertibleToStrOnly(Convertible):
+ def __unicode__(self):
+ return self.text_utf8.decode('ascii')
+
+
+class NonConvertible(ConvertibleToUnicodeOnly, ConvertibleToStrOnly):
+ pass
+
+
+def test_to_basestring():
assert library.python.strings.to_basestring('str') == 'str'
assert library.python.strings.to_basestring(u'юникод') == u'юникод'
if six.PY2: # __str__ should return str not bytes in Python3
@@ -39,9 +39,9 @@ def test_to_basestring():
assert library.python.strings.to_basestring(ConvertibleToUnicodeOnly()) == Convertible.text
assert library.python.strings.to_basestring(ConvertibleToStrOnly()) == Convertible.text_utf8
assert library.python.strings.to_basestring(NonConvertible())
-
-
-def test_to_unicode():
+
+
+def test_to_unicode():
assert library.python.strings.to_unicode(u'юникод') == u'юникод'
assert library.python.strings.to_unicode('str') == u'str'
assert library.python.strings.to_unicode(u'строка'.encode('utf-8')) == u'строка'
@@ -53,14 +53,14 @@ def test_to_unicode():
library.python.strings.to_unicode(ConvertibleToStrOnly())
with pytest.raises(UnicodeDecodeError):
library.python.strings.to_unicode(NonConvertible())
-
-
-def test_to_unicode_errors_replace():
+
+
+def test_to_unicode_errors_replace():
assert library.python.strings.to_unicode(u'abcабв'.encode('utf-8'), 'ascii')
assert library.python.strings.to_unicode(u'абв'.encode('utf-8'), 'ascii')
-
-
-def test_to_str():
+
+
+def test_to_str():
assert library.python.strings.to_str('str') == 'str' if six.PY2 else b'str'
assert library.python.strings.to_str(u'unicode') == 'unicode' if six.PY2 else b'unicode'
assert library.python.strings.to_str(u'юникод') == u'юникод'.encode('utf-8')
@@ -72,134 +72,134 @@ def test_to_str():
assert library.python.strings.to_str(ConvertibleToStrOnly()) == Convertible.text_utf8
with pytest.raises(UnicodeEncodeError):
library.python.strings.to_str(NonConvertible())
-
-
-def test_to_str_errors_replace():
+
+
+def test_to_str_errors_replace():
assert library.python.strings.to_str(u'abcабв', 'ascii')
assert library.python.strings.to_str(u'абв', 'ascii')
-
-
-def test_to_str_transcode():
+
+
+def test_to_str_transcode():
assert library.python.strings.to_str('str', from_enc='ascii') == 'str' if six.PY2 else b'str'
assert library.python.strings.to_str('str', from_enc='utf-8') == 'str' if six.PY2 else b'str'
-
+
assert library.python.strings.to_str(u'юникод'.encode('utf-8'), from_enc='utf-8') == u'юникод'.encode('utf-8')
assert library.python.strings.to_str(u'юникод'.encode('utf-8'), to_enc='utf-8', from_enc='utf-8') == u'юникод'.encode('utf-8')
assert library.python.strings.to_str(u'юникод'.encode('utf-8'), to_enc='cp1251', from_enc='utf-8') == u'юникод'.encode('cp1251')
-
+
assert library.python.strings.to_str(u'юникод'.encode('cp1251'), from_enc='cp1251') == u'юникод'.encode('utf-8')
assert library.python.strings.to_str(u'юникод'.encode('cp1251'), to_enc='cp1251', from_enc='cp1251') == u'юникод'.encode('cp1251')
assert library.python.strings.to_str(u'юникод'.encode('cp1251'), to_enc='utf-8', from_enc='cp1251') == u'юникод'.encode('utf-8')
-
+
assert library.python.strings.to_str(u'юникод'.encode('koi8-r'), from_enc='koi8-r') == u'юникод'.encode('utf-8')
assert library.python.strings.to_str(u'юникод'.encode('koi8-r'), to_enc='koi8-r', from_enc='koi8-r') == u'юникод'.encode('koi8-r')
assert library.python.strings.to_str(u'юникод'.encode('koi8-r'), to_enc='cp1251', from_enc='koi8-r') == u'юникод'.encode('cp1251')
-
-
-def test_to_str_transcode_wrong():
+
+
+def test_to_str_transcode_wrong():
assert library.python.strings.to_str(u'юникод'.encode('utf-8'), from_enc='cp1251')
assert library.python.strings.to_str(u'юникод'.encode('cp1251'), from_enc='utf-8')
-
-
-def test_to_str_transcode_disabled():
- # No transcoding enabled, set from_enc to enable
+
+
+def test_to_str_transcode_disabled():
+ # No transcoding enabled, set from_enc to enable
assert library.python.strings.to_str(u'юникод'.encode('utf-8'), to_enc='utf-8') == u'юникод'.encode('utf-8')
assert library.python.strings.to_str(u'юникод'.encode('utf-8'), to_enc='cp1251') == u'юникод'.encode('utf-8')
assert library.python.strings.to_str(u'юникод'.encode('cp1251'), to_enc='utf-8') == u'юникод'.encode('cp1251')
assert library.python.strings.to_str(u'юникод'.encode('cp1251'), to_enc='cp1251') == u'юникод'.encode('cp1251')
assert library.python.strings.to_str(u'юникод'.encode('cp1251'), to_enc='koi8-r') == u'юникод'.encode('cp1251')
assert library.python.strings.to_str(u'юникод'.encode('koi8-r'), to_enc='cp1251') == u'юникод'.encode('koi8-r')
-
-
-def test_stringize_deep():
+
+
+def test_stringize_deep():
assert library.python.strings.stringize_deep({
- 'key 1': 'value 1',
- u'ключ 2': u'значение 2',
+ 'key 1': 'value 1',
+ u'ключ 2': u'значение 2',
'list': [u'ключ 2', 'key 1', (u'к', 2)]
- }) == {
+ }) == {
'key 1' if six.PY2 else b'key 1': 'value 1' if six.PY2 else b'value 1',
- u'ключ 2'.encode('utf-8'): u'значение 2'.encode('utf-8'),
+ u'ключ 2'.encode('utf-8'): u'значение 2'.encode('utf-8'),
'list' if six.PY2 else b'list': [u'ключ 2'.encode('utf-8'), 'key 1' if six.PY2 else b'key 1', (u'к'.encode('utf-8'), 2)]
- }
-
-
-def test_stringize_deep_doesnt_transcode():
+ }
+
+
+def test_stringize_deep_doesnt_transcode():
assert library.python.strings.stringize_deep({
- u'ключ 1'.encode('utf-8'): u'значение 1'.encode('utf-8'),
- u'ключ 2'.encode('cp1251'): u'значение 2'.encode('cp1251'),
- }) == {
- u'ключ 1'.encode('utf-8'): u'значение 1'.encode('utf-8'),
- u'ключ 2'.encode('cp1251'): u'значение 2'.encode('cp1251'),
- }
-
-
-def test_stringize_deep_nested():
+ u'ключ 1'.encode('utf-8'): u'значение 1'.encode('utf-8'),
+ u'ключ 2'.encode('cp1251'): u'значение 2'.encode('cp1251'),
+ }) == {
+ u'ключ 1'.encode('utf-8'): u'значение 1'.encode('utf-8'),
+ u'ключ 2'.encode('cp1251'): u'значение 2'.encode('cp1251'),
+ }
+
+
+def test_stringize_deep_nested():
assert library.python.strings.stringize_deep({
- 'key 1': 'value 1',
- u'ключ 2': {
- 'subkey 1': 'value 1',
- u'подключ 2': u'value 2',
- },
- }) == {
+ 'key 1': 'value 1',
+ u'ключ 2': {
+ 'subkey 1': 'value 1',
+ u'подключ 2': u'value 2',
+ },
+ }) == {
'key 1' if six.PY2 else b'key 1': 'value 1' if six.PY2 else b'value 1',
- u'ключ 2'.encode('utf-8'): {
+ u'ключ 2'.encode('utf-8'): {
'subkey 1' if six.PY2 else b'subkey 1': 'value 1' if six.PY2 else b'value 1',
- u'подключ 2'.encode('utf-8'): u'value 2'.encode('utf-8'),
- },
- }
-
-
-def test_stringize_deep_plain():
+ u'подключ 2'.encode('utf-8'): u'value 2'.encode('utf-8'),
+ },
+ }
+
+
+def test_stringize_deep_plain():
assert library.python.strings.stringize_deep('str') == 'str' if six.PY2 else b'str'
assert library.python.strings.stringize_deep(u'юникод') == u'юникод'.encode('utf-8')
assert library.python.strings.stringize_deep(u'юникод'.encode('utf-8')) == u'юникод'.encode('utf-8')
-
-
-def test_stringize_deep_nonstr():
- with pytest.raises(TypeError):
+
+
+def test_stringize_deep_nonstr():
+ with pytest.raises(TypeError):
library.python.strings.stringize_deep(Convertible(), relaxed=False)
x = Convertible()
assert x == library.python.strings.stringize_deep(x)
-
-
-def test_unicodize_deep():
+
+
+def test_unicodize_deep():
assert library.python.strings.unicodize_deep({
- 'key 1': 'value 1',
- u'ключ 2': u'значение 2',
- u'ключ 3'.encode('utf-8'): u'значение 3'.encode('utf-8'),
- }) == {
- u'key 1': u'value 1',
- u'ключ 2': u'значение 2',
- u'ключ 3': u'значение 3',
- }
-
-
-def test_unicodize_deep_nested():
+ 'key 1': 'value 1',
+ u'ключ 2': u'значение 2',
+ u'ключ 3'.encode('utf-8'): u'значение 3'.encode('utf-8'),
+ }) == {
+ u'key 1': u'value 1',
+ u'ключ 2': u'значение 2',
+ u'ключ 3': u'значение 3',
+ }
+
+
+def test_unicodize_deep_nested():
assert library.python.strings.unicodize_deep({
- 'key 1': 'value 1',
- u'ключ 2': {
- 'subkey 1': 'value 1',
- u'подключ 2': u'значение 2',
- u'подключ 3'.encode('utf-8'): u'значение 3'.encode('utf-8'),
- },
- }) == {
- u'key 1': u'value 1',
- u'ключ 2': {
- u'subkey 1': u'value 1',
- u'подключ 2': u'значение 2',
- u'подключ 3': u'значение 3',
- },
- }
-
-
-def test_unicodize_deep_plain():
+ 'key 1': 'value 1',
+ u'ключ 2': {
+ 'subkey 1': 'value 1',
+ u'подключ 2': u'значение 2',
+ u'подключ 3'.encode('utf-8'): u'значение 3'.encode('utf-8'),
+ },
+ }) == {
+ u'key 1': u'value 1',
+ u'ключ 2': {
+ u'subkey 1': u'value 1',
+ u'подключ 2': u'значение 2',
+ u'подключ 3': u'значение 3',
+ },
+ }
+
+
+def test_unicodize_deep_plain():
assert library.python.strings.unicodize_deep('str') == u'str'
assert library.python.strings.unicodize_deep(u'юникод') == u'юникод'
assert library.python.strings.unicodize_deep(u'юникод'.encode('utf-8')) == u'юникод'
-
-
-def test_unicodize_deep_nonstr():
- with pytest.raises(TypeError):
+
+
+def test_unicodize_deep_nonstr():
+ with pytest.raises(TypeError):
library.python.strings.unicodize_deep(Convertible(), relaxed=False)
x = Convertible()
assert x == library.python.strings.stringize_deep(x)
diff --git a/library/python/strings/ut/ya.make b/library/python/strings/ut/ya.make
index dfacb226c7..adbeb9a054 100644
--- a/library/python/strings/ut/ya.make
+++ b/library/python/strings/ut/ya.make
@@ -2,7 +2,7 @@ OWNER(g:yatool)
PY23_TEST()
-TEST_SRCS(test_strings.py)
+TEST_SRCS(test_strings.py)
PEERDIR(
library/python/strings
diff --git a/library/python/strings/ya.make b/library/python/strings/ya.make
index 7e0b033717..eee89ae7dc 100644
--- a/library/python/strings/ya.make
+++ b/library/python/strings/ya.make
@@ -8,9 +8,9 @@ PY_SRCS(
strings.py
)
-PEERDIR(
- library/python/func
+PEERDIR(
+ library/python/func
contrib/python/six
-)
+)
END()
diff --git a/library/python/symbols/python/ut/ya.make b/library/python/symbols/python/ut/ya.make
index 2849e01b1e..ba20bf0237 100644
--- a/library/python/symbols/python/ut/ya.make
+++ b/library/python/symbols/python/ut/ya.make
@@ -2,14 +2,14 @@ PY23_LIBRARY()
OWNER(orivej)
-TEST_SRCS(test_ctypes.py)
+TEST_SRCS(test_ctypes.py)
PEERDIR(
library/python/symbols/python
)
END()
-
+
RECURSE_FOR_TESTS(
py2
py3
diff --git a/library/python/symbols/python/ya.make b/library/python/symbols/python/ya.make
index 6bfd54f8bc..7762f87592 100644
--- a/library/python/symbols/python/ya.make
+++ b/library/python/symbols/python/ya.make
@@ -11,5 +11,5 @@ SRCS(
)
END()
-
-RECURSE_FOR_TESTS(ut)
+
+RECURSE_FOR_TESTS(ut)
diff --git a/library/python/testing/import_test/ya.make b/library/python/testing/import_test/ya.make
index fae36ffe8f..68b147a00c 100644
--- a/library/python/testing/import_test/ya.make
+++ b/library/python/testing/import_test/ya.make
@@ -1,7 +1,7 @@
-OWNER(
+OWNER(
g:yatest
- exprmntr
-)
+ exprmntr
+)
PY23_LIBRARY()
diff --git a/library/python/testing/recipe/ya.make b/library/python/testing/recipe/ya.make
index dd323aa245..d6fa84a873 100644
--- a/library/python/testing/recipe/ya.make
+++ b/library/python/testing/recipe/ya.make
@@ -1,7 +1,7 @@
-OWNER(
- exprmntr
+OWNER(
+ exprmntr
g:yatest
-)
+)
PY23_LIBRARY()
diff --git a/library/python/testing/yatest_common/yatest/common/canonical.py b/library/python/testing/yatest_common/yatest/common/canonical.py
index b6a136d3e9..443a5106ea 100644
--- a/library/python/testing/yatest_common/yatest/common/canonical.py
+++ b/library/python/testing/yatest_common/yatest/common/canonical.py
@@ -12,22 +12,22 @@ from . import path
yatest_logger = logging.getLogger("ya.test")
-def _copy(src, dst, universal_lines=False):
- if universal_lines:
- with open(dst, "wb") as f:
+def _copy(src, dst, universal_lines=False):
+ if universal_lines:
+ with open(dst, "wb") as f:
for line in open(src, "rbU"):
- f.write(line)
- return
- shutil.copy(src, dst)
-
-
+ f.write(line)
+ return
+ shutil.copy(src, dst)
+
+
def canonical_file(path, diff_tool=None, local=False, universal_lines=False, diff_file_name=None, diff_tool_timeout=None):
"""
Create canonical file that can be returned from a test
:param path: path to the file
:param diff_tool: custom diff tool to use for comparison with the canonical one, if None - default will be used
:param local: save file locally, otherwise move to sandbox
- :param universal_lines: normalize EOL
+ :param universal_lines: normalize EOL
:param diff_tool_timeout: timeout for running diff tool
:return: object that can be canonized
"""
@@ -36,7 +36,7 @@ def canonical_file(path, diff_tool=None, local=False, universal_lines=False, dif
tempdir = tempfile.mkdtemp(prefix="canon_tmp", dir=runtime.build_path())
safe_path = os.path.join(tempdir, os.path.basename(abs_path))
# if the created file is in output_path, we copy it, so that it will be available when the tests finishes
- _copy(path, safe_path, universal_lines=universal_lines)
+ _copy(path, safe_path, universal_lines=universal_lines)
if diff_tool:
if not isinstance(diff_tool, six.string_types):
try: # check if iterable
diff --git a/library/python/testing/yatest_common/yatest/common/network.py b/library/python/testing/yatest_common/yatest/common/network.py
index 37bcb1b8e0..291aa49151 100644
--- a/library/python/testing/yatest_common/yatest/common/network.py
+++ b/library/python/testing/yatest_common/yatest/common/network.py
@@ -1,4 +1,4 @@
-# coding=utf-8
+# coding=utf-8
import os
import errno
diff --git a/library/python/testing/yatest_common/yatest/common/path.py b/library/python/testing/yatest_common/yatest/common/path.py
index 6fed7dda8a..079770605e 100644
--- a/library/python/testing/yatest_common/yatest/common/path.py
+++ b/library/python/testing/yatest_common/yatest/common/path.py
@@ -1,4 +1,4 @@
-# coding=utf-8
+# coding=utf-8
import errno
import os
diff --git a/library/python/testing/yatest_lib/ya.make b/library/python/testing/yatest_lib/ya.make
index 342bae82ba..7453e5b665 100644
--- a/library/python/testing/yatest_lib/ya.make
+++ b/library/python/testing/yatest_lib/ya.make
@@ -3,8 +3,8 @@ OWNER(g:yatest)
PY23_LIBRARY()
PY_SRCS(
- NAMESPACE
- yatest_lib
+ NAMESPACE
+ yatest_lib
external.py
test_splitter.py
tools.py
diff --git a/library/python/windows/__init__.py b/library/python/windows/__init__.py
index 62861b3309..2e426f2bd8 100644
--- a/library/python/windows/__init__.py
+++ b/library/python/windows/__init__.py
@@ -1,290 +1,290 @@
# coding: utf-8
-import os
+import os
import stat
import sys
import shutil
import logging
-
+
from six import reraise
import library.python.func
import library.python.strings
-
+
logger = logging.getLogger(__name__)
+
-
-ERRORS = {
- 'SUCCESS': 0,
+ERRORS = {
+ 'SUCCESS': 0,
'PATH_NOT_FOUND': 3,
'ACCESS_DENIED': 5,
'SHARING_VIOLATION': 32,
- 'INSUFFICIENT_BUFFER': 122,
- 'DIR_NOT_EMPTY': 145,
-}
-
+ 'INSUFFICIENT_BUFFER': 122,
+ 'DIR_NOT_EMPTY': 145,
+}
+
RETRIABLE_FILE_ERRORS = (ERRORS['ACCESS_DENIED'], ERRORS['SHARING_VIOLATION'])
RETRIABLE_DIR_ERRORS = (ERRORS['ACCESS_DENIED'], ERRORS['DIR_NOT_EMPTY'], ERRORS['SHARING_VIOLATION'])
+
-
-# Check if on Windows
+# Check if on Windows
@library.python.func.lazy
-def on_win():
- return os.name == 'nt'
-
-
-class NotOnWindowsError(RuntimeError):
- def __init__(self, message):
- super(NotOnWindowsError, self).__init__(message)
-
-
-class DisabledOnWindowsError(RuntimeError):
- def __init__(self, message):
- super(DisabledOnWindowsError, self).__init__(message)
-
-
-class NoCTypesError(RuntimeError):
- def __init__(self, message):
- super(NoCTypesError, self).__init__(message)
-
-
-# Decorator for Windows-only functions
-def win_only(f):
- def f_wrapped(*args, **kwargs):
- if not on_win():
- raise NotOnWindowsError('Windows-only function is called, but platform is not Windows')
- return f(*args, **kwargs)
-
- return f_wrapped
-
-
-# Decorator for functions disabled on Windows
-def win_disabled(f):
- def f_wrapped(*args, **kwargs):
- if on_win():
- run_disabled()
- return f(*args, **kwargs)
-
- return f_wrapped
-
-
-def errorfix(f):
- if not on_win():
- return f
-
- def f_wrapped(*args, **kwargs):
- try:
- return f(*args, **kwargs)
+def on_win():
+ return os.name == 'nt'
+
+
+class NotOnWindowsError(RuntimeError):
+ def __init__(self, message):
+ super(NotOnWindowsError, self).__init__(message)
+
+
+class DisabledOnWindowsError(RuntimeError):
+ def __init__(self, message):
+ super(DisabledOnWindowsError, self).__init__(message)
+
+
+class NoCTypesError(RuntimeError):
+ def __init__(self, message):
+ super(NoCTypesError, self).__init__(message)
+
+
+# Decorator for Windows-only functions
+def win_only(f):
+ def f_wrapped(*args, **kwargs):
+ if not on_win():
+ raise NotOnWindowsError('Windows-only function is called, but platform is not Windows')
+ return f(*args, **kwargs)
+
+ return f_wrapped
+
+
+# Decorator for functions disabled on Windows
+def win_disabled(f):
+ def f_wrapped(*args, **kwargs):
+ if on_win():
+ run_disabled()
+ return f(*args, **kwargs)
+
+ return f_wrapped
+
+
+def errorfix(f):
+ if not on_win():
+ return f
+
+ def f_wrapped(*args, **kwargs):
+ try:
+ return f(*args, **kwargs)
except WindowsError:
tp, value, tb = sys.exc_info()
fix_error(value)
reraise(tp, value, tb)
-
- return f_wrapped
-
-
-# Decorator for diehard wrapper
-# On Windows platform retries to run function while specific WindowsError is thrown
-# On non-Windows platforms fallbacks to function itself
-def diehard(winerrors, tries=100, delay=1):
- def wrap(f):
- if not on_win():
- return f
-
- return lambda *args, **kwargs: run_diehard(f, winerrors, tries, delay, *args, **kwargs)
-
- return wrap
-
-
-if on_win():
- import msvcrt
- import time
-
+
+ return f_wrapped
+
+
+# Decorator for diehard wrapper
+# On Windows platform retries to run function while specific WindowsError is thrown
+# On non-Windows platforms fallbacks to function itself
+def diehard(winerrors, tries=100, delay=1):
+ def wrap(f):
+ if not on_win():
+ return f
+
+ return lambda *args, **kwargs: run_diehard(f, winerrors, tries, delay, *args, **kwargs)
+
+ return wrap
+
+
+if on_win():
+ import msvcrt
+ import time
+
import library.python.strings
-
- _has_ctypes = True
- try:
- import ctypes
+
+ _has_ctypes = True
+ try:
+ import ctypes
from ctypes import wintypes
- except ImportError:
- _has_ctypes = False
-
- _INVALID_HANDLE_VALUE = -1
-
- _MOVEFILE_REPLACE_EXISTING = 0x1
- _MOVEFILE_WRITE_THROUGH = 0x8
-
- _SEM_FAILCRITICALERRORS = 0x1
- _SEM_NOGPFAULTERRORBOX = 0x2
- _SEM_NOALIGNMENTFAULTEXCEPT = 0x4
- _SEM_NOOPENFILEERRORBOX = 0x8
-
- _SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1
-
- _CREATE_NO_WINDOW = 0x8000000
-
- _ATOMIC_RENAME_FILE_TRANSACTION_DEFAULT_TIMEOUT = 1000
-
+ except ImportError:
+ _has_ctypes = False
+
+ _INVALID_HANDLE_VALUE = -1
+
+ _MOVEFILE_REPLACE_EXISTING = 0x1
+ _MOVEFILE_WRITE_THROUGH = 0x8
+
+ _SEM_FAILCRITICALERRORS = 0x1
+ _SEM_NOGPFAULTERRORBOX = 0x2
+ _SEM_NOALIGNMENTFAULTEXCEPT = 0x4
+ _SEM_NOOPENFILEERRORBOX = 0x8
+
+ _SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1
+
+ _CREATE_NO_WINDOW = 0x8000000
+
+ _ATOMIC_RENAME_FILE_TRANSACTION_DEFAULT_TIMEOUT = 1000
+
_HANDLE_FLAG_INHERIT = 0x1
- @win_only
- def require_ctypes(f):
- def f_wrapped(*args, **kwargs):
- if not _has_ctypes:
- raise NoCTypesError('No ctypes found')
- return f(*args, **kwargs)
-
- return f_wrapped
-
- # Run function in diehard mode (see diehard decorator commentary)
- @win_only
- def run_diehard(f, winerrors, tries, delay, *args, **kwargs):
- if isinstance(winerrors, int):
- winerrors = (winerrors,)
+ @win_only
+ def require_ctypes(f):
+ def f_wrapped(*args, **kwargs):
+ if not _has_ctypes:
+ raise NoCTypesError('No ctypes found')
+ return f(*args, **kwargs)
+
+ return f_wrapped
+
+ # Run function in diehard mode (see diehard decorator commentary)
+ @win_only
+ def run_diehard(f, winerrors, tries, delay, *args, **kwargs):
+ if isinstance(winerrors, int):
+ winerrors = (winerrors,)
ei = None
- for t in xrange(tries):
- if t:
+ for t in xrange(tries):
+ if t:
logger.debug('Diehard [errs %s]: try #%d in %s', ','.join(str(x) for x in winerrors), t, f)
- try:
- return f(*args, **kwargs)
- except WindowsError as e:
- if e.winerror not in winerrors:
- raise
+ try:
+ return f(*args, **kwargs)
+ except WindowsError as e:
+ if e.winerror not in winerrors:
+ raise
ei = sys.exc_info()
- time.sleep(delay)
+ time.sleep(delay)
reraise(ei[0], ei[1], ei[2])
-
- # Placeholder for disabled functions
- @win_only
- def run_disabled(*args, **kwargs):
- raise DisabledOnWindowsError('Function called is disabled on Windows')
-
- class CustomWinError(WindowsError):
- def __init__(self, winerror, message='', filename=None):
- super(CustomWinError, self).__init__(winerror, message)
- self.message = message
- self.strerror = self.message if self.message else format_error(self.windows_error)
- self.filename = filename
- self.utf8 = True
-
- @win_only
- def unicode_path(path):
+
+ # Placeholder for disabled functions
+ @win_only
+ def run_disabled(*args, **kwargs):
+ raise DisabledOnWindowsError('Function called is disabled on Windows')
+
+ class CustomWinError(WindowsError):
+ def __init__(self, winerror, message='', filename=None):
+ super(CustomWinError, self).__init__(winerror, message)
+ self.message = message
+ self.strerror = self.message if self.message else format_error(self.windows_error)
+ self.filename = filename
+ self.utf8 = True
+
+ @win_only
+ def unicode_path(path):
return library.python.strings.to_unicode(path, library.python.strings.fs_encoding())
-
- @win_only
- @require_ctypes
- def format_error(error):
- if isinstance(error, WindowsError):
- error = error.winerror
- if not isinstance(error, int):
- return 'Unknown'
- return ctypes.FormatError(error)
-
- @win_only
- def fix_error(windows_error):
- if not windows_error.strerror:
- windows_error.strerror = format_error(windows_error)
- transcode_error(windows_error)
-
- @win_only
- def transcode_error(windows_error, to_enc='utf-8'):
+
+ @win_only
+ @require_ctypes
+ def format_error(error):
+ if isinstance(error, WindowsError):
+ error = error.winerror
+ if not isinstance(error, int):
+ return 'Unknown'
+ return ctypes.FormatError(error)
+
+ @win_only
+ def fix_error(windows_error):
+ if not windows_error.strerror:
+ windows_error.strerror = format_error(windows_error)
+ transcode_error(windows_error)
+
+ @win_only
+ def transcode_error(windows_error, to_enc='utf-8'):
from_enc = 'utf-8' if getattr(windows_error, 'utf8', False) else library.python.strings.guess_default_encoding()
- if from_enc != to_enc:
+ if from_enc != to_enc:
windows_error.strerror = library.python.strings.to_str(windows_error.strerror, to_enc=to_enc, from_enc=from_enc)
- setattr(windows_error, 'utf8', to_enc == 'utf-8')
-
- class Transaction(object):
- def __init__(self, timeout=None, description=''):
- self.timeout = timeout
- self.description = description
-
- @require_ctypes
- def __enter__(self):
- self._handle = ctypes.windll.ktmw32.CreateTransaction(None, 0, 0, 0, 0, self.timeout, self.description)
- if self._handle == _INVALID_HANDLE_VALUE:
- raise ctypes.WinError()
- return self._handle
-
- @require_ctypes
- def __exit__(self, t, v, tb):
- try:
- if not ctypes.windll.ktmw32.CommitTransaction(self._handle):
- raise ctypes.WinError()
- finally:
- ctypes.windll.kernel32.CloseHandle(self._handle)
-
- @win_only
- def file_handle(f):
- return msvcrt.get_osfhandle(f.fileno())
-
+ setattr(windows_error, 'utf8', to_enc == 'utf-8')
+
+ class Transaction(object):
+ def __init__(self, timeout=None, description=''):
+ self.timeout = timeout
+ self.description = description
+
+ @require_ctypes
+ def __enter__(self):
+ self._handle = ctypes.windll.ktmw32.CreateTransaction(None, 0, 0, 0, 0, self.timeout, self.description)
+ if self._handle == _INVALID_HANDLE_VALUE:
+ raise ctypes.WinError()
+ return self._handle
+
+ @require_ctypes
+ def __exit__(self, t, v, tb):
+ try:
+ if not ctypes.windll.ktmw32.CommitTransaction(self._handle):
+ raise ctypes.WinError()
+ finally:
+ ctypes.windll.kernel32.CloseHandle(self._handle)
+
+ @win_only
+ def file_handle(f):
+ return msvcrt.get_osfhandle(f.fileno())
+
# https://www.python.org/dev/peps/pep-0446/
# http://mihalop.blogspot.ru/2014/05/python-subprocess-and-file-descriptors.html
@require_ctypes
- @win_only
+ @win_only
def open_file(*args, **kwargs):
f = open(*args, **kwargs)
ctypes.windll.kernel32.SetHandleInformation(file_handle(f), _HANDLE_FLAG_INHERIT, 0)
return f
@win_only
- @require_ctypes
- def replace_file(src, dst):
- if not ctypes.windll.kernel32.MoveFileExW(unicode_path(src), unicode_path(dst), _MOVEFILE_REPLACE_EXISTING | _MOVEFILE_WRITE_THROUGH):
- raise ctypes.WinError()
-
- @win_only
- @require_ctypes
- def replace_file_across_devices(src, dst):
+ @require_ctypes
+ def replace_file(src, dst):
+ if not ctypes.windll.kernel32.MoveFileExW(unicode_path(src), unicode_path(dst), _MOVEFILE_REPLACE_EXISTING | _MOVEFILE_WRITE_THROUGH):
+ raise ctypes.WinError()
+
+ @win_only
+ @require_ctypes
+ def replace_file_across_devices(src, dst):
with Transaction(timeout=_ATOMIC_RENAME_FILE_TRANSACTION_DEFAULT_TIMEOUT, description='ya library.python.windows replace_file_across_devices') as transaction:
- if not ctypes.windll.kernel32.MoveFileTransactedW(unicode_path(src), unicode_path(dst), None, None, _MOVEFILE_REPLACE_EXISTING | _MOVEFILE_WRITE_THROUGH, transaction):
- raise ctypes.WinError()
-
- @win_only
- @require_ctypes
- def hardlink(src, lnk):
- if not ctypes.windll.kernel32.CreateHardLinkW(unicode_path(lnk), unicode_path(src), None):
- raise ctypes.WinError()
-
- # Requires SE_CREATE_SYMBOLIC_LINK_NAME privilege
- @win_only
- @win_disabled
- @require_ctypes
- def symlink_file(src, lnk):
- if not ctypes.windll.kernel32.CreateSymbolicLinkW(unicode_path(lnk), unicode_path(src), 0):
- raise ctypes.WinError()
-
- # Requires SE_CREATE_SYMBOLIC_LINK_NAME privilege
- @win_only
- @win_disabled
- @require_ctypes
- def symlink_dir(src, lnk):
- if not ctypes.windll.kernel32.CreateSymbolicLinkW(unicode_path(lnk), unicode_path(src), _SYMBOLIC_LINK_FLAG_DIRECTORY):
- raise ctypes.WinError()
-
- @win_only
- @require_ctypes
- def lock_file(f, offset, length, raises=True):
- locked = ctypes.windll.kernel32.LockFile(file_handle(f), _low_dword(offset), _high_dword(offset), _low_dword(length), _high_dword(length))
- if not raises:
- return bool(locked)
- if not locked:
- raise ctypes.WinError()
-
- @win_only
- @require_ctypes
- def unlock_file(f, offset, length, raises=True):
- unlocked = ctypes.windll.kernel32.UnlockFile(file_handle(f), _low_dword(offset), _high_dword(offset), _low_dword(length), _high_dword(length))
- if not raises:
- return bool(unlocked)
- if not unlocked:
- raise ctypes.WinError()
-
- @win_only
- @require_ctypes
- def set_error_mode(mode):
- return ctypes.windll.kernel32.SetErrorMode(mode)
-
+ if not ctypes.windll.kernel32.MoveFileTransactedW(unicode_path(src), unicode_path(dst), None, None, _MOVEFILE_REPLACE_EXISTING | _MOVEFILE_WRITE_THROUGH, transaction):
+ raise ctypes.WinError()
+
+ @win_only
+ @require_ctypes
+ def hardlink(src, lnk):
+ if not ctypes.windll.kernel32.CreateHardLinkW(unicode_path(lnk), unicode_path(src), None):
+ raise ctypes.WinError()
+
+ # Requires SE_CREATE_SYMBOLIC_LINK_NAME privilege
+ @win_only
+ @win_disabled
+ @require_ctypes
+ def symlink_file(src, lnk):
+ if not ctypes.windll.kernel32.CreateSymbolicLinkW(unicode_path(lnk), unicode_path(src), 0):
+ raise ctypes.WinError()
+
+ # Requires SE_CREATE_SYMBOLIC_LINK_NAME privilege
+ @win_only
+ @win_disabled
+ @require_ctypes
+ def symlink_dir(src, lnk):
+ if not ctypes.windll.kernel32.CreateSymbolicLinkW(unicode_path(lnk), unicode_path(src), _SYMBOLIC_LINK_FLAG_DIRECTORY):
+ raise ctypes.WinError()
+
+ @win_only
+ @require_ctypes
+ def lock_file(f, offset, length, raises=True):
+ locked = ctypes.windll.kernel32.LockFile(file_handle(f), _low_dword(offset), _high_dword(offset), _low_dword(length), _high_dword(length))
+ if not raises:
+ return bool(locked)
+ if not locked:
+ raise ctypes.WinError()
+
+ @win_only
+ @require_ctypes
+ def unlock_file(f, offset, length, raises=True):
+ unlocked = ctypes.windll.kernel32.UnlockFile(file_handle(f), _low_dword(offset), _high_dword(offset), _low_dword(length), _high_dword(length))
+ if not raises:
+ return bool(unlocked)
+ if not unlocked:
+ raise ctypes.WinError()
+
+ @win_only
+ @require_ctypes
+ def set_error_mode(mode):
+ return ctypes.windll.kernel32.SetErrorMode(mode)
+
@win_only
def rmtree(path):
def error_handler(func, handling_path, execinfo):
@@ -306,23 +306,23 @@ if on_win():
raise e
shutil.rmtree(path, onerror=error_handler)
- # Don't display the Windows GPF dialog if the invoked program dies.
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621.aspx
- @win_only
- def disable_error_dialogs():
+ # Don't display the Windows GPF dialog if the invoked program dies.
+ # http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621.aspx
+ @win_only
+ def disable_error_dialogs():
set_error_mode(_SEM_NOGPFAULTERRORBOX | _SEM_FAILCRITICALERRORS)
-
- @win_only
- def default_process_creation_flags():
- return 0
-
- @require_ctypes
- def _low_dword(x):
- return ctypes.c_ulong(x & ((1 << 32) - 1))
-
- @require_ctypes
- def _high_dword(x):
- return ctypes.c_ulong((x >> 32) & ((1 << 32) - 1))
+
+ @win_only
+ def default_process_creation_flags():
+ return 0
+
+ @require_ctypes
+ def _low_dword(x):
+ return ctypes.c_ulong(x & ((1 << 32) - 1))
+
+ @require_ctypes
+ def _high_dword(x):
+ return ctypes.c_ulong((x >> 32) & ((1 << 32) - 1))
@win_only
@require_ctypes
@@ -351,14 +351,14 @@ if on_win():
assert isinstance(flag, bool)
if not ctypes.windll.kernel32.SetHandleInformation(file_handle(file), _low_dword(value), _low_dword(int(flag))):
raise ctypes.WinError()
-
- @win_only
- @require_ctypes
- def get_windows_directory():
- buf = ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
- size = ctypes.windll.kernel32.GetWindowsDirectoryW(buf, ctypes.wintypes.MAX_PATH)
- if not size:
- raise ctypes.WinError()
- if size > ctypes.wintypes.MAX_PATH - 1:
- raise CustomWinError(ERRORS['INSUFFICIENT_BUFFER'])
- return ctypes.wstring_at(buf, size)
+
+ @win_only
+ @require_ctypes
+ def get_windows_directory():
+ buf = ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
+ size = ctypes.windll.kernel32.GetWindowsDirectoryW(buf, ctypes.wintypes.MAX_PATH)
+ if not size:
+ raise ctypes.WinError()
+ if size > ctypes.wintypes.MAX_PATH - 1:
+ raise CustomWinError(ERRORS['INSUFFICIENT_BUFFER'])
+ return ctypes.wstring_at(buf, size)
diff --git a/library/python/windows/ut/test_windows.py b/library/python/windows/ut/test_windows.py
index bef3ec2dc5..516dfa4bb4 100644
--- a/library/python/windows/ut/test_windows.py
+++ b/library/python/windows/ut/test_windows.py
@@ -1,96 +1,96 @@
-# coding=utf-8
-
-import errno
-import os
-import pytest
-
+# coding=utf-8
+
+import errno
+import os
+import pytest
+
import library.python.strings
import library.python.windows
-
-
-def gen_error_access_denied():
+
+
+def gen_error_access_denied():
if library.python.windows.on_win():
- err = WindowsError()
- err.errno = errno.EACCES
- err.strerror = ''
+ err = WindowsError()
+ err.errno = errno.EACCES
+ err.strerror = ''
err.winerror = library.python.windows.ERRORS['ACCESS_DENIED']
- else:
- err = OSError()
- err.errno = errno.EACCES
- err.strerror = os.strerror(err.errno)
- err.filename = 'unknown/file'
- raise err
-
-
-def test_errorfix_buggy():
+ else:
+ err = OSError()
+ err.errno = errno.EACCES
+ err.strerror = os.strerror(err.errno)
+ err.filename = 'unknown/file'
+ raise err
+
+
+def test_errorfix_buggy():
@library.python.windows.errorfix
- def erroneous_func():
- gen_error_access_denied()
-
- with pytest.raises(OSError) as errinfo:
- erroneous_func()
- assert errinfo.value.errno == errno.EACCES
- assert errinfo.value.filename == 'unknown/file'
- assert isinstance(errinfo.value.strerror, basestring)
- assert errinfo.value.strerror
-
-
-def test_errorfix_explicit():
+ def erroneous_func():
+ gen_error_access_denied()
+
+ with pytest.raises(OSError) as errinfo:
+ erroneous_func()
+ assert errinfo.value.errno == errno.EACCES
+ assert errinfo.value.filename == 'unknown/file'
+ assert isinstance(errinfo.value.strerror, basestring)
+ assert errinfo.value.strerror
+
+
+def test_errorfix_explicit():
@library.python.windows.errorfix
- def erroneous_func():
+ def erroneous_func():
if library.python.windows.on_win():
- err = WindowsError()
+ err = WindowsError()
err.winerror = library.python.windows.ERRORS['ACCESS_DENIED']
- else:
- err = OSError()
- err.errno = errno.EACCES
- err.strerror = 'Some error description'
- err.filename = 'unknown/file'
- raise err
-
- with pytest.raises(OSError) as errinfo:
- erroneous_func()
- assert errinfo.value.errno == errno.EACCES
- assert errinfo.value.filename == 'unknown/file'
- assert errinfo.value.strerror == 'Some error description'
-
-
-def test_errorfix_decoding_cp1251():
+ else:
+ err = OSError()
+ err.errno = errno.EACCES
+ err.strerror = 'Some error description'
+ err.filename = 'unknown/file'
+ raise err
+
+ with pytest.raises(OSError) as errinfo:
+ erroneous_func()
+ assert errinfo.value.errno == errno.EACCES
+ assert errinfo.value.filename == 'unknown/file'
+ assert errinfo.value.strerror == 'Some error description'
+
+
+def test_errorfix_decoding_cp1251():
@library.python.windows.errorfix
- def erroneous_func():
- model_msg = u'Какое-то описание ошибки'
+ def erroneous_func():
+ model_msg = u'Какое-то описание ошибки'
if library.python.windows.on_win():
- err = WindowsError()
+ err = WindowsError()
err.strerror = library.python.strings.to_str(model_msg, 'cp1251')
- else:
- err = OSError()
+ else:
+ err = OSError()
err.strerror = library.python.strings.to_str(model_msg)
- raise err
-
- with pytest.raises(OSError) as errinfo:
- erroneous_func()
- error_msg = errinfo.value.strerror
- if not isinstance(errinfo.value.strerror, unicode):
+ raise err
+
+ with pytest.raises(OSError) as errinfo:
+ erroneous_func()
+ error_msg = errinfo.value.strerror
+ if not isinstance(errinfo.value.strerror, unicode):
error_msg = library.python.strings.to_unicode(error_msg)
- assert error_msg == u'Какое-то описание ошибки'
-
-
-def test_diehard():
+ assert error_msg == u'Какое-то описание ошибки'
+
+
+def test_diehard():
@library.python.windows.diehard(library.python.windows.ERRORS['ACCESS_DENIED'], tries=5)
- def erroneous_func(errors):
- try:
- gen_error_access_denied()
- except Exception as e:
- errors.append(e)
- raise
-
- raised_errors = []
- with pytest.raises(OSError) as errinfo:
- erroneous_func(raised_errors)
- assert errinfo.value.errno == errno.EACCES
- assert any(e.errno == errno.EACCES for e in raised_errors)
- assert raised_errors and errinfo.value == raised_errors[-1]
+ def erroneous_func(errors):
+ try:
+ gen_error_access_denied()
+ except Exception as e:
+ errors.append(e)
+ raise
+
+ raised_errors = []
+ with pytest.raises(OSError) as errinfo:
+ erroneous_func(raised_errors)
+ assert errinfo.value.errno == errno.EACCES
+ assert any(e.errno == errno.EACCES for e in raised_errors)
+ assert raised_errors and errinfo.value == raised_errors[-1]
if library.python.windows.on_win():
- assert len(raised_errors) == 5
- else:
- assert len(raised_errors) == 1
+ assert len(raised_errors) == 5
+ else:
+ assert len(raised_errors) == 1
diff --git a/library/python/windows/ut/ya.make b/library/python/windows/ut/ya.make
index c39f1797b8..992afe0259 100644
--- a/library/python/windows/ut/ya.make
+++ b/library/python/windows/ut/ya.make
@@ -2,7 +2,7 @@ OWNER(g:yatool)
PY2TEST()
-TEST_SRCS(test_windows.py)
+TEST_SRCS(test_windows.py)
PEERDIR(
library/python/windows
diff --git a/library/python/ya.make b/library/python/ya.make
index 2e1eb6e0e1..04b9e61286 100644
--- a/library/python/ya.make
+++ b/library/python/ya.make
@@ -135,8 +135,8 @@ RECURSE(
openssl
par_apply
par_apply/test
- path
- path/tests
+ path
+ path/tests
protobuf
pymain
pyscopg2
@@ -154,8 +154,8 @@ RECURSE(
reservoir_sampling
refsclient
resource
- retry
- retry/tests
+ retry
+ retry/tests
runtime
runtime/main
runtime/test