Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/git/compat.py: 43%
52 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1# -*- coding: utf-8 -*-
2# config.py
3# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors
4#
5# This module is part of GitPython and is released under
6# the BSD License: http://www.opensource.org/licenses/bsd-license.php
7"""utilities to help provide compatibility with python 3"""
8# flake8: noqa
10import locale
11import os
12import sys
14from gitdb.utils.encoding import (
15 force_bytes, # @UnusedImport
16 force_text, # @UnusedImport
17)
19# typing --------------------------------------------------------------------
21from typing import (
22 Any,
23 AnyStr,
24 Dict,
25 IO,
26 Optional,
27 Tuple,
28 Type,
29 Union,
30 overload,
31)
33# ---------------------------------------------------------------------------
36is_win: bool = os.name == "nt"
37is_posix = os.name == "posix"
38is_darwin = os.name == "darwin"
39defenc = sys.getfilesystemencoding()
42@overload
43def safe_decode(s: None) -> None:
44 ...
47@overload
48def safe_decode(s: AnyStr) -> str:
49 ...
52def safe_decode(s: Union[AnyStr, None]) -> Optional[str]:
53 """Safely decodes a binary string to unicode"""
54 if isinstance(s, str): 54 ↛ 55line 54 didn't jump to line 55, because the condition on line 54 was never true
55 return s
56 elif isinstance(s, bytes): 56 ↛ 58line 56 didn't jump to line 58, because the condition on line 56 was never false
57 return s.decode(defenc, "surrogateescape")
58 elif s is None:
59 return None
60 else:
61 raise TypeError("Expected bytes or text, but got %r" % (s,))
64@overload
65def safe_encode(s: None) -> None:
66 ...
69@overload
70def safe_encode(s: AnyStr) -> bytes:
71 ...
74def safe_encode(s: Optional[AnyStr]) -> Optional[bytes]:
75 """Safely encodes a binary string to unicode"""
76 if isinstance(s, str):
77 return s.encode(defenc)
78 elif isinstance(s, bytes):
79 return s
80 elif s is None:
81 return None
82 else:
83 raise TypeError("Expected bytes or text, but got %r" % (s,))
86@overload
87def win_encode(s: None) -> None:
88 ...
91@overload
92def win_encode(s: AnyStr) -> bytes:
93 ...
96def win_encode(s: Optional[AnyStr]) -> Optional[bytes]:
97 """Encode unicodes for process arguments on Windows."""
98 if isinstance(s, str):
99 return s.encode(locale.getpreferredencoding(False))
100 elif isinstance(s, bytes):
101 return s
102 elif s is not None:
103 raise TypeError("Expected bytes or text, but got %r" % (s,))
104 return None