From aa3fd2865bbe878c12d8a4495526db280097fe5e Mon Sep 17 00:00:00 2001 From: pennae Date: Wed, 25 Jan 2023 20:55:27 +0100 Subject: [PATCH] nixos-render-docs: move some options helpers to new module --- .../src/nixos_render_docs/__init__.py | 15 +++++---------- .../src/nixos_render_docs/options.py | 12 ++++++++++++ .../src/nixos_render_docs/types.py | 4 ++++ 3 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py create mode 100644 pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/types.py diff --git a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py index b4fd100a1f70..b8dc8e7f08eb 100644 --- a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py +++ b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/__init__.py @@ -18,6 +18,7 @@ from xml.sax.saxutils import escape, quoteattr from .docbook import make_xml_id, DocBookRenderer from .md import md_escape +from .options import option_is class Converter: def __init__(self, manpage_urls: Dict[str, str]): @@ -47,16 +48,10 @@ md = Converter(json.load(open(os.getenv('MANPAGE_URLS')))) # converts in-place! def convertMD(options: Dict[str, Any]) -> str: - def optionIs(option: Dict[str, Any], key: str, typ: str) -> bool: - if key not in option: return False - if type(option[key]) != dict: return False - if '_type' not in option[key]: return False - return option[key]['_type'] == typ - def convertCode(name: str, option: Dict[str, Any], key: str): - if optionIs(option, key, 'literalMD'): + if option_is(option, key, 'literalMD'): option[key] = md.render(f"*{key.capitalize()}:*\n{option[key]['text']}") - elif optionIs(option, key, 'literalExpression'): + elif option_is(option, key, 'literalExpression'): code = option[key]['text'] # for multi-line code blocks we only have to count ` runs at the beginning # of a line, but this is much easier. @@ -70,14 +65,14 @@ def convertMD(options: Dict[str, Any]) -> str: ticks, sep = ('`' * (longest + (3 if multiline else 1)), '\n' if multiline else ' ') code = f"{ticks}{sep}{code}{sep}{ticks}" option[key] = md.render(f"*{key.capitalize()}:*\n{code}") - elif optionIs(option, key, 'literalDocBook'): + elif option_is(option, key, 'literalDocBook'): option[key] = f"{key.capitalize()}: {option[key]['text']}" elif key in option: raise Exception(f"{name} {key} has unrecognized type", option[key]) for (name, option) in options.items(): try: - if optionIs(option, 'description', 'mdDoc'): + if option_is(option, 'description', 'mdDoc'): option['description'] = md.render(option['description']['text']) elif markdownByDefault: option['description'] = md.render(option['description']) diff --git a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py new file mode 100644 index 000000000000..0bba89a1e9a0 --- /dev/null +++ b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/options.py @@ -0,0 +1,12 @@ +from typing import Optional + +from .types import Option + +def option_is(option: Option, key: str, typ: str) -> Optional[dict[str, str]]: + if key not in option: + return None + if type(option[key]) != dict: + return None + if option[key].get('_type') != typ: # type: ignore[union-attr] + return None + return option[key] # type: ignore[return-value] diff --git a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/types.py b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/types.py new file mode 100644 index 000000000000..f6825ac936a9 --- /dev/null +++ b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/types.py @@ -0,0 +1,4 @@ +from typing import Optional, Tuple + +OptionLoc = str | dict[str, str] +Option = dict[str, str | dict[str, str] | list[OptionLoc]]