SF.net SVN: docutils:[9910 ] trunk/docutils/docutils

milde--- via Docutils-checkins <[email protected]>
Newsgroups gmane.text.docutils.cvs
Message-ID <[email protected]>
Revision: 9910
          http://sourceforge.net/p/docutils/code/9910
Author:   milde
Date:     2024-08-18 14:56:56 +0000 (Sun, 18 Aug 2024)
Log Message:
-----------
Review "docutils.utils" after type hint addition.

Use the same alias name for `str | os.PathLike[str]` also in
parsers.rst.directives.misc.

Formatting: more concise function defs,
blank line after summary in multi-line docstrings.

Simplify initialization of utils.DependencyList.

Modified Paths:
--------------
    trunk/docutils/docutils/parsers/rst/directives/misc.py
    trunk/docutils/docutils/utils/__init__.py

Modified: trunk/docutils/docutils/parsers/rst/directives/misc.py
===================================================================
--- trunk/docutils/docutils/parsers/rst/directives/misc.py	2024-08-15 16:35:34 UTC (rev 9909)
+++ trunk/docutils/docutils/parsers/rst/directives/misc.py	2024-08-18 14:56:56 UTC (rev 9910)
@@ -31,13 +31,10 @@
 
     from docutils.nodes import Node
 
-    PathString: TypeAlias = str | os.PathLike[str]
-    """File system path."""
+    StrPath: TypeAlias = str | os.PathLike[str]
+    """File system path. No bytes!"""
 
-    SourceString: TypeAlias = str | os.PathLike[str]
-    """Path to or informal description of a Docutils input source."""
 
-
 def adapt_path(path: str, source='', root_prefix='/') -> str:
     # Adapt path to files to include or embed.
     # `root_prefix` is prepended to absolute paths (cf. root_prefix setting),
@@ -121,7 +118,7 @@
         self.insert_into_input_lines(inputstring)
         return []
 
-    def read_file(self, path: PathString) -> str:
+    def read_file(self, path: StrPath) -> str:
         """Read text file at `path`. Clip and return content.
 
         Provisional.

Modified: trunk/docutils/docutils/utils/__init__.py
===================================================================
--- trunk/docutils/docutils/utils/__init__.py	2024-08-15 16:35:34 UTC (rev 9909)
+++ trunk/docutils/docutils/utils/__init__.py	2024-08-18 14:56:56 UTC (rev 9910)
@@ -36,15 +36,14 @@
     from docutils.nodes import Node
     from docutils.frontend import Values
 
-    _StrPath: TypeAlias = str | os.PathLike[str]
+    StrPath: TypeAlias = str | os.PathLike[str]
     _ObserverFunc: TypeAlias = Callable[[nodes.system_message], None]
 
 
 class SystemMessage(ApplicationError):
 
-    def __init__(
-        self, system_message: nodes.system_message, level: int,
-    ) -> None:
+    def __init__(self, system_message: nodes.system_message, level: int,
+                 ) -> None:
         Exception.__init__(self, system_message.astext())
         self.level = level
 
@@ -85,17 +84,10 @@
     """
 
     # Reporter.get_source_and_line is patched in by ``RSTState.runtime_init``
-    get_source_and_line: Callable[
-        [int | None], tuple[_StrPath | None, int | None]
-    ]
+    get_source_and_line: Callable[[int|None], tuple[StrPath|None, int|None]]
 
     levels: Final[Sequence[str]] = (
-        'DEBUG',
-        'INFO',
-        'WARNING',
-        'ERROR',
-        'SEVERE',
-    )
+        'DEBUG', 'INFO', 'WARNING', 'ERROR', 'SEVERE')
     """List of names for system message levels, indexed by level."""
 
     # system message level constants:
@@ -106,16 +98,17 @@
     SEVERE_LEVEL: Final = 4
 
     def __init__(
-        self,
-        source: _StrPath,
-        report_level: int,
-        halt_level: int,
-        stream: io.ErrorOutput | TextIO | str | Literal[False] | None = None,
-        debug: bool = False,
-        encoding: str | None = None,
-        error_handler: str = 'backslashreplace',
-    ) -> None:
-        """
+            self,
+            source: StrPath,
+            report_level: int,
+            halt_level: int,
+            stream: io.ErrorOutput|TextIO|str|Literal[False]|None = None,
+            debug: bool = False,
+            encoding: str|None = None,
+            error_handler: str = 'backslashreplace',
+            ) -> None:
+        """Low level instantiating. See also `new_reporter().`.
+
         :Parameters:
             - `source`: The path to or description of the source data.
             - `report_level`: The level at or above which warning output will
@@ -230,51 +223,47 @@
         self.max_level = max(level, self.max_level)
         return msg
 
-    def debug(
-        self, *args: Node, **kwargs: Any
-    ) -> nodes.system_message:
+    def debug(self, *args: Node, **kwargs: Any) -> nodes.system_message:
         """
-        Level-0, "DEBUG": an internal reporting issue. Typically, there is no
-        effect on the processing. Level-0 system messages are handled
-        separately from the others.
+        Level-0, "DEBUG": an internal reporting issue.
+
+        Typically, there is no effect on the processing. Level-0 system
+        messages are handled separately from the others.
         """
         if self.debug_flag:
             return self.system_message(self.DEBUG_LEVEL, *args, **kwargs)
 
-    def info(
-        self, *args: Node, **kwargs: Any
-    ) -> nodes.system_message:
+    def info(self, *args: Node, **kwargs: Any) -> nodes.system_message:
         """
-        Level-1, "INFO": a minor issue that can be ignored. Typically there is
-        no effect on processing, and level-1 system messages are not reported.
+        Level-1, "INFO": a minor issue that can be ignored.
+
+        Typically, there is no effect on processing and level-1 system
+        messages are not reported.
         """
         return self.system_message(self.INFO_LEVEL, *args, **kwargs)
 
-    def warning(
-        self, *args: Node, **kwargs: Any
-    ) -> nodes.system_message:
+    def warning(self, *args: Node, **kwargs: Any) -> nodes.system_message:
         """
-        Level-2, "WARNING": an issue that should be addressed. If ignored,
-        there may be unpredictable problems with the output.
+        Level-2, "WARNING": an issue that should be addressed.
+
+        If ignored, there may be unpredictable problems with the output.
         """
         return self.system_message(self.WARNING_LEVEL, *args, **kwargs)
 
-    def error(
-        self, *args: Node, **kwargs: Any
-    ) -> nodes.system_message:
+    def error(self, *args: Node, **kwargs: Any) -> nodes.system_message:
         """
-        Level-3, "ERROR": an error that should be addressed. If ignored, the
-        output will contain errors.
+        Level-3, "ERROR": an error that should be addressed.
+
+        If ignored, the output will contain errors.
         """
         return self.system_message(self.ERROR_LEVEL, *args, **kwargs)
 
-    def severe(
-        self, *args: Node, **kwargs: Any
-    ) -> nodes.system_message:
+    def severe(self, *args: Node, **kwargs: Any) -> nodes.system_message:
         """
-        Level-4, "SEVERE": a severe error that must be addressed. If ignored,
-        the output will contain severe errors. Typically level-4 system
-        messages are turned into exceptions which halt processing.
+        Level-4, "SEVERE": a severe error that must be addressed.
+
+        If ignored, the output will contain severe errors. Typically level-4
+        system messages are turned into exceptions which halt processing.
         """
         return self.system_message(self.SEVERE_LEVEL, *args, **kwargs)
 
@@ -312,9 +301,8 @@
     return assemble_option_dict(option_list, options_spec)
 
 
-def extract_options(
-    field_list: nodes.field_list
-) -> list[tuple[str, str | None]]:
+def extract_options(field_list: nodes.field_list
+                    ) -> list[tuple[str, str|None]]:
     """
     Return a list of option (name, value) pairs from field names & bodies.
 
@@ -349,7 +337,7 @@
     return option_list
 
 
-def assemble_option_dict(option_list: list[tuple[str, str | None]],
+def assemble_option_dict(option_list: list[tuple[str, str|None]],
                          options_spec: dict[str, Callable[object], Any],
                          ) -> dict[str, Any]:
     """
@@ -387,11 +375,13 @@
 class NameValueError(DataError): pass
 
 
-def decode_path(path: str | None | bytes) -> str:
+def decode_path(path: str|bytes|None) -> str:
     """
     Ensure `path` is Unicode. Return `str` instance.
 
     Decode file/path string in a failsafe manner if not already done.
+
+    Deprecated.
     """
     # TODO: is this still required with Python 3?
     if isinstance(path, str):
@@ -400,7 +390,7 @@
         return ''
     try:
         path = path.decode(sys.getfilesystemencoding(), 'strict')
-    except AttributeError:  # default value None has no decode method
+    except AttributeError:
         raise ValueError('`path` value must be a String or ``None``, '
                          f'not {path!r}')
     except UnicodeDecodeError:
@@ -456,7 +446,7 @@
     return attlist
 
 
-def new_reporter(source_path: _StrPath, settings: Values) -> Reporter:
+def new_reporter(source_path: StrPath, settings: Values) -> Reporter:
     """
     Return a new Reporter object.
 
@@ -474,8 +464,7 @@
     return reporter
 
 
-def new_document(source_path: _StrPath,
-                 settings: Values | None = None
+def new_document(source_path: StrPath, settings: Values|None = None
                  ) -> nodes.document:
     """
     Return a new empty document object.
@@ -514,9 +503,9 @@
 
 
 def clean_rcs_keywords(
-    paragraph: nodes.paragraph,
-    keyword_substitutions: Sequence[tuple[re.Pattern[[str], str]]],
-) -> None:
+        paragraph: nodes.paragraph,
+        keyword_substitutions: Sequence[tuple[re.Pattern[[str], str]]],
+        ) -> None:
     if len(paragraph) == 1 and isinstance(paragraph[0], nodes.Text):
         textnode = paragraph[0]
         for pattern, substitution in keyword_substitutions:
@@ -526,7 +515,7 @@
                 return
 
 
-def relative_path(source: _StrPath | None, target: _StrPath) -> str:
+def relative_path(source: StrPath|None, target: StrPath) -> str:
     """
     Build and return a path to `target`, relative to `source` (both files).
 
@@ -582,7 +571,7 @@
 
 
 def get_stylesheet_reference(settings: Values,
-                             relative_to: _StrPath | None = None
+                             relative_to: StrPath|None = None
                              ) -> str:
     """
     Retrieve a stylesheet reference from the settings object.
@@ -616,9 +605,7 @@
 #   (if required, use ``utils.relative_path(source, target)``
 #   in the calling script)
 def get_stylesheet_list(settings: Values) -> list[str]:
-    """
-    Retrieve list of stylesheet references from the settings object.
-    """
+    """Retrieve list of stylesheet references from the settings object."""
     assert not (settings.stylesheet and settings.stylesheet_path), (
             'stylesheet and stylesheet_path are mutually exclusive.')
     stylesheets = settings.stylesheet_path or settings.stylesheet or []
@@ -632,7 +619,7 @@
     return stylesheets
 
 
-def find_file_in_dirs(path: _StrPath, dirs: Iterable[_StrPath]) -> str:
+def find_file_in_dirs(path: StrPath, dirs: Iterable[StrPath]) -> str:
     """
     Search for `path` in the list of directories `dirs`.
 
@@ -663,7 +650,7 @@
         return settings.trim_footnote_reference_space
 
 
-def get_source_line(node: Node) -> tuple[_StrPath | None, int | None]:
+def get_source_line(node: Node) -> tuple[StrPath|None, int|None]:
     """
     Return the "source" and "line" attributes from the `node` given or from
     its closest ancestor.
@@ -789,7 +776,7 @@
     return taglist
 
 
-def xml_declaration(encoding: str | Literal['unicode'] | None = None) -> str:
+def xml_declaration(encoding: str|Literal['unicode']|None = None) -> str:
     """Return an XML text declaration.
 
     Include an encoding declaration, if `encoding`
@@ -812,8 +799,8 @@
     """
 
     def __init__(self,
-                 output_file: Literal['-'] | _StrPath | None = None,
-                 dependencies: Iterable[_StrPath] = ()
+                 output_file: Literal['-'] | StrPath | None = None,
+                 dependencies: Iterable[StrPath] = ()
                  ) -> None:
         """
         Initialize the dependency list, automatically setting the
@@ -822,28 +809,28 @@
 
         If output_file is None, no file output is done when calling add().
         """
-        self.list = []
-        self.file: TextIO | None = None
-        if output_file:
-            self.set_output(output_file)
+        self.set_output(output_file)
         self.add(*dependencies)
 
-    def set_output(self, output_file: Literal['-'] | _StrPath) -> None:
+    def set_output(self, output_file: Literal['-']|StrPath|None) -> None:
         """
         Set the output file and clear the list of already added
         dependencies.
 
-        `output_file` must be a string.  The specified file is
-        immediately overwritten.
+        The specified file is immediately overwritten.
 
-        If output_file is '-', the output will be written to stdout.
+        If `output_file` is '-', the output will be written to stdout.
+        The empty string or None stop output.
         """
         if output_file == '-':
             self.file = sys.stdout
         elif output_file:
             self.file = open(output_file, 'w', encoding='utf-8')
+        else:
+            self.file = None
+        self.list = []
 
-    def add(self, *paths: _StrPath) -> None:
+    def add(self, *paths: StrPath) -> None:
         """
         Append `path` to `self.list` unless it is already there.
 

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



_______________________________________________
Docutils-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/docutils-checkins
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.