From d6e736922cb69cc87dd6595ef93f247ce99a960a Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 18:56:09 +0100 Subject: Add final types to config.py --- git/config.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'git/config.py') diff --git a/git/config.py b/git/config.py index ad02b437..a3f41c60 100644 --- a/git/config.py +++ b/git/config.py @@ -40,6 +40,7 @@ if TYPE_CHECKING: from io import BytesIO T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser') +T_OMD_value = TypeVar('T_OMD_value', str, bytes, int, float, bool) if sys.version_info[:3] < (3, 7, 2): # typing.Ordereddict not added until py 3.7.2 @@ -47,7 +48,7 @@ if sys.version_info[:3] < (3, 7, 2): OrderedDict_OMD = OrderedDict # type: ignore # until 3.6 dropped else: from typing import OrderedDict # type: ignore # until 3.6 dropped - OrderedDict_OMD = OrderedDict[str, List[_T]] # type: ignore[assignment, misc] + OrderedDict_OMD = OrderedDict[str, List[T_OMD_value]] # type: ignore[assignment, misc] # ------------------------------------------------------------- @@ -97,23 +98,23 @@ class MetaParserBuilder(abc.ABCMeta): return new_type -def needs_values(func: Callable) -> Callable: +def needs_values(func: Callable[..., _T]) -> Callable[..., _T]: """Returns method assuring we read values (on demand) before we try to access them""" @wraps(func) - def assure_data_present(self, *args: Any, **kwargs: Any) -> Any: + def assure_data_present(self: GitConfigParser, *args: Any, **kwargs: Any) -> _T: self.read() return func(self, *args, **kwargs) # END wrapper method return assure_data_present -def set_dirty_and_flush_changes(non_const_func: Callable) -> Callable: +def set_dirty_and_flush_changes(non_const_func: Callable[..., _T]) -> Callable[..., _T]: """Return method that checks whether given non constant function may be called. If so, the instance will be set dirty. Additionally, we flush the changes right to disk""" - def flush_changes(self, *args: Any, **kwargs: Any) -> Any: + def flush_changes(self: GitConfigParser, *args: Any, **kwargs: Any) -> _T: rval = non_const_func(self, *args, **kwargs) self._dirty = True self.write() @@ -356,7 +357,7 @@ class GitConfigParser(cp.RawConfigParser, metaclass=MetaParserBuilder): self._acquire_lock() return self - def __exit__(self, exception_type, exception_value, traceback) -> None: + def __exit__(self, *args: Any) -> None: self.release() def release(self) -> None: @@ -613,12 +614,15 @@ class GitConfigParser(cp.RawConfigParser, metaclass=MetaParserBuilder): def _write(self, fp: IO) -> None: """Write an .ini-format representation of the configuration state in git compatible format""" - def write_section(name, section_dict): + def write_section(name: str, section_dict: _OMD) -> None: fp.write(("[%s]\n" % name).encode(defenc)) + + values: Sequence[Union[str, bytes, int, float, bool]] for (key, values) in section_dict.items_all(): if key == "__name__": continue + v: Union[str, bytes, int, float, bool] for v in values: fp.write(("\t%s = %s\n" % (key, self._value_to_string(v).replace('\n', '\n\t'))).encode(defenc)) # END if key is not __name__ -- cgit v1.2.1 From 476f4de6aa893bc0289c345a7d06b85256ab98bc Mon Sep 17 00:00:00 2001 From: Yobmod Date: Sat, 31 Jul 2021 19:00:23 +0100 Subject: Add set_dirty_and_flush_changes() types to config.py --- git/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'git/config.py') diff --git a/git/config.py b/git/config.py index a3f41c60..011d0e0b 100644 --- a/git/config.py +++ b/git/config.py @@ -102,7 +102,7 @@ def needs_values(func: Callable[..., _T]) -> Callable[..., _T]: """Returns method assuring we read values (on demand) before we try to access them""" @wraps(func) - def assure_data_present(self: GitConfigParser, *args: Any, **kwargs: Any) -> _T: + def assure_data_present(self: 'GitConfigParser', *args: Any, **kwargs: Any) -> _T: self.read() return func(self, *args, **kwargs) # END wrapper method @@ -114,7 +114,7 @@ def set_dirty_and_flush_changes(non_const_func: Callable[..., _T]) -> Callable[. If so, the instance will be set dirty. Additionally, we flush the changes right to disk""" - def flush_changes(self: GitConfigParser, *args: Any, **kwargs: Any) -> _T: + def flush_changes(self: 'GitConfigParser', *args: Any, **kwargs: Any) -> _T: rval = non_const_func(self, *args, **kwargs) self._dirty = True self.write() -- cgit v1.2.1