From 1325ca4baadd581d2ed67fc83cbe71e80ef70569 Mon Sep 17 00:00:00 2001 From: "d.kovalenko" Date: Sun, 2 Nov 2025 15:19:49 +0300 Subject: [PATCH] ConfigurationFileReader::ReadLine returns typing.Optional[str] It returns str or None None - it is EOF. --- src/implementation/v00/configuration_base.py | 2 +- src/os/abstract/configuration_os_ops.py | 3 ++- src/os/local/configuration_os_ops.py | 12 ++++++++++-- tests/CfgFileReader.py | 13 +++++++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/implementation/v00/configuration_base.py b/src/implementation/v00/configuration_base.py index 19b11e9..361876d 100644 --- a/src/implementation/v00/configuration_base.py +++ b/src/implementation/v00/configuration_base.py @@ -3308,7 +3308,7 @@ def Helper__LoadFileContent( lineData = fileContent.ReadLine() if not lineData: - # assert lineData is None + assert lineData is None break assert type(lineData) == str diff --git a/src/os/abstract/configuration_os_ops.py b/src/os/abstract/configuration_os_ops.py index 3d4bde1..209db11 100644 --- a/src/os/abstract/configuration_os_ops.py +++ b/src/os/abstract/configuration_os_ops.py @@ -6,6 +6,7 @@ from ...core.raise_error import RaiseError import datetime +import typing # ////////////////////////////////////////////////////////////////////////////// @@ -13,7 +14,7 @@ class ConfigurationFileReader: - def ReadLine(self) -> str: + def ReadLine(self) -> typing.Optional[str]: RaiseError.MethodIsNotImplemented(__class__, "ReadLine") diff --git a/src/os/local/configuration_os_ops.py b/src/os/local/configuration_os_ops.py index c73fac6..03e3620 100644 --- a/src/os/local/configuration_os_ops.py +++ b/src/os/local/configuration_os_ops.py @@ -8,6 +8,7 @@ import os import io import datetime +import typing # ////////////////////////////////////////////////////////////////////////////// # class ConfigurationOsFile @@ -49,9 +50,16 @@ def IsClosed(self) -> bool: return self.m_file is None # -------------------------------------------------------------------- - def ReadLine(self) -> str: + def ReadLine(self) -> typing.Optional[str]: assert isinstance(self.m_file, io.TextIOWrapper) - return self.m_file.readline() + r = self.m_file.readline() + assert type(r) == str # noqa: E721 + if not r: + assert r == "" + return None + + assert r != "" + return r # -------------------------------------------------------------------- def Overwrite(self, text: str) -> None: diff --git a/tests/CfgFileReader.py b/tests/CfgFileReader.py index 1f80f31..52691e5 100644 --- a/tests/CfgFileReader.py +++ b/tests/CfgFileReader.py @@ -4,6 +4,7 @@ from src.os.abstract.configuration_os_ops import ConfigurationFileReader import io +import typing # ////////////////////////////////////////////////////////////////////////////// # class CfgFileReader @@ -19,9 +20,17 @@ def __init__(self, text: str): self.m_file = io.StringIO(text) # -------------------------------------------------------------------- - def ReadLine(self) -> str: + def ReadLine(self) -> typing.Optional[str]: assert type(self.m_file) == io.StringIO - return self.m_file.readline() + + r = self.m_file.readline() + assert type(r) == str # noqa: E721 + if not r: + assert r == "" + return None + + assert r != "" + return r # //////////////////////////////////////////////////////////////////////////////