aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/setuptools/unicode_utils.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/setuptools/unicode_utils.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/setuptools/unicode_utils.py')
-rw-r--r--.venv/lib/python3.12/site-packages/setuptools/unicode_utils.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/setuptools/unicode_utils.py b/.venv/lib/python3.12/site-packages/setuptools/unicode_utils.py
new file mode 100644
index 00000000..f502f5b0
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/setuptools/unicode_utils.py
@@ -0,0 +1,102 @@
+import sys
+import unicodedata
+from configparser import RawConfigParser
+
+from .compat import py39
+from .warnings import SetuptoolsDeprecationWarning
+
+
+# HFS Plus uses decomposed UTF-8
+def decompose(path):
+ if isinstance(path, str):
+ return unicodedata.normalize('NFD', path)
+ try:
+ path = path.decode('utf-8')
+ path = unicodedata.normalize('NFD', path)
+ path = path.encode('utf-8')
+ except UnicodeError:
+ pass # Not UTF-8
+ return path
+
+
+def filesys_decode(path):
+ """
+ Ensure that the given path is decoded,
+ ``None`` when no expected encoding works
+ """
+
+ if isinstance(path, str):
+ return path
+
+ fs_enc = sys.getfilesystemencoding() or 'utf-8'
+ candidates = fs_enc, 'utf-8'
+
+ for enc in candidates:
+ try:
+ return path.decode(enc)
+ except UnicodeDecodeError:
+ continue
+
+ return None
+
+
+def try_encode(string, enc):
+ "turn unicode encoding into a functional routine"
+ try:
+ return string.encode(enc)
+ except UnicodeEncodeError:
+ return None
+
+
+def _read_utf8_with_fallback(file: str, fallback_encoding=py39.LOCALE_ENCODING) -> str:
+ """
+ First try to read the file with UTF-8, if there is an error fallback to a
+ different encoding ("locale" by default). Returns the content of the file.
+ Also useful when reading files that might have been produced by an older version of
+ setuptools.
+ """
+ try:
+ with open(file, "r", encoding="utf-8") as f:
+ return f.read()
+ except UnicodeDecodeError: # pragma: no cover
+ _Utf8EncodingNeeded.emit(file=file, fallback_encoding=fallback_encoding)
+ with open(file, "r", encoding=fallback_encoding) as f:
+ return f.read()
+
+
+def _cfg_read_utf8_with_fallback(
+ cfg: RawConfigParser, file: str, fallback_encoding=py39.LOCALE_ENCODING
+) -> None:
+ """Same idea as :func:`_read_utf8_with_fallback`, but for the
+ :meth:`RawConfigParser.read` method.
+
+ This method may call ``cfg.clear()``.
+ """
+ try:
+ cfg.read(file, encoding="utf-8")
+ except UnicodeDecodeError: # pragma: no cover
+ _Utf8EncodingNeeded.emit(file=file, fallback_encoding=fallback_encoding)
+ cfg.clear()
+ cfg.read(file, encoding=fallback_encoding)
+
+
+class _Utf8EncodingNeeded(SetuptoolsDeprecationWarning):
+ _SUMMARY = """
+ `encoding="utf-8"` fails with {file!r}, trying `encoding={fallback_encoding!r}`.
+ """
+
+ _DETAILS = """
+ Fallback behavior for UTF-8 is considered **deprecated** and future versions of
+ `setuptools` may not implement it.
+
+ Please encode {file!r} with "utf-8" to ensure future builds will succeed.
+
+ If this file was produced by `setuptools` itself, cleaning up the cached files
+ and re-building/re-installing the package with a newer version of `setuptools`
+ (e.g. by updating `build-system.requires` in its `pyproject.toml`)
+ might solve the problem.
+ """
+ # TODO: Add a deadline?
+ # Will we be able to remove this?
+ # The question comes to mind mainly because of sdists that have been produced
+ # by old versions of setuptools and published to PyPI...