43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
# -*- coding=utf-8 -*-
|
|
import sys
|
|
|
|
import six
|
|
|
|
if sys.version_info[:2] <= (3, 4):
|
|
from pipenv.vendor.pathlib2 import Path # type: ignore # noqa
|
|
else:
|
|
from pathlib import Path
|
|
|
|
if six.PY3:
|
|
from functools import lru_cache
|
|
from builtins import TimeoutError
|
|
else:
|
|
from backports.functools_lru_cache import lru_cache # type: ignore # noqa
|
|
|
|
class TimeoutError(OSError):
|
|
pass
|
|
|
|
|
|
def getpreferredencoding():
|
|
import locale
|
|
# Borrowed from Invoke
|
|
# (see https://github.com/pyinvoke/invoke/blob/93af29d/invoke/runners.py#L881)
|
|
_encoding = locale.getpreferredencoding(False)
|
|
if six.PY2 and not sys.platform == "win32":
|
|
_default_encoding = locale.getdefaultlocale()[1]
|
|
if _default_encoding is not None:
|
|
_encoding = _default_encoding
|
|
return _encoding
|
|
|
|
|
|
DEFAULT_ENCODING = getpreferredencoding()
|
|
|
|
|
|
def fs_str(string):
|
|
"""Encodes a string into the proper filesystem encoding"""
|
|
|
|
if isinstance(string, str):
|
|
return string
|
|
assert not isinstance(string, bytes)
|
|
return string.encode(DEFAULT_ENCODING)
|