entry variables tested
This commit is contained in:
parent
8f8cbe6784
commit
511df8fb5b
7 changed files with 84 additions and 30 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
Entry Variables
|
Entry Variables
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,15 @@ def get_file_extension(file_name: Path | str) -> str:
|
||||||
return file_name.rsplit(".", maxsplit=1)[-1]
|
return file_name.rsplit(".", maxsplit=1)[-1]
|
||||||
|
|
||||||
|
|
||||||
|
def get_md5_hash(contents: str | bytes) -> str:
|
||||||
|
"""
|
||||||
|
Helper function to compute md5 hash
|
||||||
|
"""
|
||||||
|
if isinstance(contents, str):
|
||||||
|
contents = contents.encode("utf-8")
|
||||||
|
return hashlib.md5(contents).hexdigest()
|
||||||
|
|
||||||
|
|
||||||
def get_file_md5_hash(full_file_path: Path | str) -> str:
|
def get_file_md5_hash(full_file_path: Path | str) -> str:
|
||||||
"""
|
"""
|
||||||
Parameters
|
Parameters
|
||||||
|
|
@ -45,7 +54,7 @@ def get_file_md5_hash(full_file_path: Path | str) -> str:
|
||||||
md5 hash of its contents
|
md5 hash of its contents
|
||||||
"""
|
"""
|
||||||
with open(full_file_path, "rb") as file:
|
with open(full_file_path, "rb") as file:
|
||||||
return hashlib.md5(file.read()).hexdigest()
|
return get_md5_hash(file.read())
|
||||||
|
|
||||||
|
|
||||||
def files_equal(full_file_path_a: Path | str, full_file_path_b: Path | str) -> bool:
|
def files_equal(full_file_path_a: Path | str, full_file_path_b: Path | str) -> bool:
|
||||||
|
|
|
||||||
0
tests/unit/docgen/__init__.py
Normal file
0
tests/unit/docgen/__init__.py
Normal file
11
tests/unit/docgen/test_docgen.py
Normal file
11
tests/unit/docgen/test_docgen.py
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
from tools.docgen.entry_variables import EntryVariableDocGen
|
||||||
|
from ytdl_sub.utils.file_handler import get_file_md5_hash
|
||||||
|
from ytdl_sub.utils.file_handler import get_md5_hash
|
||||||
|
|
||||||
|
|
||||||
|
class TestDocGen:
|
||||||
|
def test_entry_variables_generated(self):
|
||||||
|
md5_hash = get_file_md5_hash(EntryVariableDocGen.LOCATION)
|
||||||
|
expected_md5_hash = get_md5_hash(EntryVariableDocGen.generate_and_maybe_write_to_file())
|
||||||
|
|
||||||
|
assert md5_hash == expected_md5_hash
|
||||||
32
tools/docgen/docgen.py
Normal file
32
tools/docgen/docgen.py
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
from abc import abstractmethod
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
REGENERATE_DOCS: bool = True
|
||||||
|
|
||||||
|
|
||||||
|
class DocGen:
|
||||||
|
"""
|
||||||
|
Home-made auto doc generation
|
||||||
|
"""
|
||||||
|
|
||||||
|
LOCATION: Path
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@abstractmethod
|
||||||
|
def generate(cls) -> str:
|
||||||
|
"""
|
||||||
|
Generate the docs as a single string
|
||||||
|
"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def generate_and_maybe_write_to_file(cls) -> str:
|
||||||
|
"""
|
||||||
|
Maybe writes the docs to their file if the global is set to True, and returns
|
||||||
|
the generated docs
|
||||||
|
"""
|
||||||
|
contents = cls.generate()
|
||||||
|
if REGENERATE_DOCS:
|
||||||
|
with open(cls.LOCATION, "w", encoding="utf-8") as out:
|
||||||
|
out.write(contents)
|
||||||
|
|
||||||
|
return contents
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from typing import Type
|
from typing import Type
|
||||||
|
|
||||||
|
from tools.docgen.docgen import DocGen
|
||||||
from tools.docgen.utils import camel_case_to_human
|
from tools.docgen.utils import camel_case_to_human
|
||||||
from tools.docgen.utils import get_function_docs
|
from tools.docgen.utils import get_function_docs
|
||||||
from tools.docgen.utils import properties
|
from tools.docgen.utils import properties
|
||||||
|
|
@ -9,20 +11,27 @@ from tools.docgen.utils import section
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
||||||
|
|
||||||
|
|
||||||
def variable_class_to_name(obj: Type[Any]) -> str:
|
class EntryVariableDocGen(DocGen):
|
||||||
assert "VariableDefinitions" in obj.__name__, f"{obj.__name__} doesnt have VariableDefinitions"
|
|
||||||
|
LOCATION = Path("docs/source/config_reference/scripting/entry_variables.rst")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _variable_class_to_name(cls, obj: Type[Any]) -> str:
|
||||||
|
assert (
|
||||||
|
"VariableDefinitions" in obj.__name__
|
||||||
|
), f"{obj.__name__} doesnt have VariableDefinitions"
|
||||||
return (
|
return (
|
||||||
camel_case_to_human(obj.__name__)
|
camel_case_to_human(obj.__name__)
|
||||||
.replace("Variable Definitions", "Variables")
|
.replace("Variable Definitions", "Variables")
|
||||||
.replace("Ytdl Sub", "Ytdl-Sub")
|
.replace("Ytdl Sub", "Ytdl-Sub")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
def generate_variable_docs() -> str:
|
def generate(cls) -> str:
|
||||||
docs = section("Entry Variables", level=0)
|
docs = section("Entry Variables", level=0)
|
||||||
|
|
||||||
parent_objs: Dict[str, Type[Any]] = {
|
parent_objs: Dict[str, Type[Any]] = {
|
||||||
variable_class_to_name(obj): obj for obj in VariableDefinitions.__bases__
|
cls._variable_class_to_name(obj): obj for obj in VariableDefinitions.__bases__
|
||||||
}
|
}
|
||||||
|
|
||||||
for name in sorted(parent_objs.keys()):
|
for name in sorted(parent_objs.keys()):
|
||||||
|
|
@ -36,6 +45,3 @@ def generate_variable_docs() -> str:
|
||||||
)
|
)
|
||||||
|
|
||||||
return docs
|
return docs
|
||||||
|
|
||||||
|
|
||||||
print(generate_variable_docs())
|
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,3 @@ def get_function_docs(
|
||||||
docs += inspect.cleandoc(getattr(obj, function_name).__doc__)
|
docs += inspect.cleandoc(getattr(obj, function_name).__doc__)
|
||||||
docs += "\n"
|
docs += "\n"
|
||||||
return docs
|
return docs
|
||||||
|
|
||||||
|
|
||||||
def to_out_dir(name: str, docs: str) -> None:
|
|
||||||
with open(Path("tools") / "docgen" / "out" / name, "w", encoding="utf-8") as out:
|
|
||||||
out.write(docs)
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue