Source code for sphinx_uml.pyreverse.sphinx_html_proxy
from pathlib import Path
from ..singleton import Singleton
[docs]
class SphinxHtmlProxy(metaclass=Singleton):
"""
The :py:class:`SphinxHtmlProxy` is a singleton in charge of returning
the path of an HTML file corresponding to a class of the project being
pyreversed.
"""
def __init__(self):
"""
Constructor. The attributes are set by the calling code,
depending on the context.
"""
self.sphinx_html_dir: str # The HTML Spring address or directory
self.module_name: str # The module being processed
self.class_name: str # The class being processed
[docs]
def set_sphinx_html_dir(self, sphinx_html_dir: Path | str):
"""
Set the HTML Sphinx documentation directory.
Args:
sphinx_html_dir (Path | str): The input directory.
*Example:* ``~/git/unext/docs/_build/html``.
"""
# assert Path(sphinx_html_dir).exists(), sphinx_html_dir
self.sphinx_html_dir = sphinx_html_dir
[docs]
def url(self, name: str = "") -> str:
"""
Crafts an Sphinx URL depending on:
- the HTML Sphinx directory (:py:attr:`sphinx_html_dir`);
- the current module (:py:attr:`module_name`);
- the current class (:py:attr:`class_name`);
- the current method/attribute if any (see ``name``).
Args:
name (str): The current method/attribute name if any,
``""`` otherwise.
Returns:
The resulting URL if any, ``None`` otherwise.
"""
if not self.sphinx_html_dir:
# HTML documentation directory not set.
return None
if ":" in name:
name = name[:name.find(":")]
return (
# File
f"{self.sphinx_html_dir}/{self.module_name}.html"
# Anchor (class)
f"#{self.module_name}.{self.class_name}"
) + (
# Anchor (attr / method)
f".{name}" if name
else ""
)