Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5dcd15889 | ||
|
|
e64e20133a | ||
|
|
52949a952a | ||
|
|
3d7edbf7d9 |
@@ -33,7 +33,7 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install -e ".[dev]"
|
pip install -e . --group dev
|
||||||
|
|
||||||
# - name: Run mypy
|
# - name: Run mypy
|
||||||
# run: |
|
# run: |
|
||||||
|
|||||||
@@ -1,6 +1,24 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
0.5.3
|
||||||
|
-----
|
||||||
|
|
||||||
|
- Make sphinx a required dependency since there are imports from Sphinx
|
||||||
|
`#44 <https://github.com/jdillard/sphinx-llms-txt/pull/44>`_
|
||||||
|
|
||||||
|
0.5.2
|
||||||
|
-----
|
||||||
|
|
||||||
|
- Remove support for singlehtml
|
||||||
|
`#40 <https://github.com/jdillard/sphinx-llms-txt/pull/40>`_
|
||||||
|
|
||||||
|
0.5.1
|
||||||
|
-----
|
||||||
|
|
||||||
|
- Only allow builders that have _sources directory
|
||||||
|
`#38 <https://github.com/jdillard/sphinx-llms-txt/pull/38>`_
|
||||||
|
|
||||||
0.5.0
|
0.5.0
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Local development
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
pip install -e ".[dev]"
|
pip install -e . --group dev
|
||||||
|
|
||||||
#. Install pre-commit Git hook scripts:
|
#. Install pre-commit Git hook scripts:
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -26,13 +26,16 @@ classifiers = [
|
|||||||
license = {text = "MIT"}
|
license = {text = "MIT"}
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
|
dependencies = [
|
||||||
|
"sphinx",
|
||||||
|
]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
download = "https://pypi.org/project/sphinx-llms-txt/"
|
download = "https://pypi.org/project/sphinx-llms-txt/"
|
||||||
source = "https://github.com/jdillard/sphinx-llms-txt"
|
source = "https://github.com/jdillard/sphinx-llms-txt"
|
||||||
changelog = "https://github.com/jdillard/sphinx-llms-txt/blob/master/CHANGELOG.rst"
|
changelog = "https://github.com/jdillard/sphinx-llms-txt/blob/master/CHANGELOG.rst"
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[dependency-groups]
|
||||||
dev = [
|
dev = [
|
||||||
"pytest>=7.0.0",
|
"pytest>=7.0.0",
|
||||||
"black",
|
"black",
|
||||||
@@ -40,7 +43,6 @@ dev = [
|
|||||||
"mypy",
|
"mypy",
|
||||||
"isort",
|
"isort",
|
||||||
"pre-commit",
|
"pre-commit",
|
||||||
"sphinx",
|
|
||||||
]
|
]
|
||||||
test = [
|
test = [
|
||||||
"pytest>=7.0.0",
|
"pytest>=7.0.0",
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from .manager import LLMSFullManager
|
|||||||
from .processor import DocumentProcessor
|
from .processor import DocumentProcessor
|
||||||
from .writer import FileWriter
|
from .writer import FileWriter
|
||||||
|
|
||||||
__version__ = "0.5.0"
|
__version__ = "0.5.3"
|
||||||
|
|
||||||
# Export classes needed by tests
|
# Export classes needed by tests
|
||||||
__all__ = [
|
__all__ = [
|
||||||
@@ -113,7 +113,6 @@ def build_finished(app: Sphinx, exception):
|
|||||||
def setup(app: Sphinx) -> Dict[str, Any]:
|
def setup(app: Sphinx) -> Dict[str, Any]:
|
||||||
"""Set up the Sphinx extension."""
|
"""Set up the Sphinx extension."""
|
||||||
|
|
||||||
# Add configuration options
|
|
||||||
app.add_config_value("llms_txt_file", True, "env")
|
app.add_config_value("llms_txt_file", True, "env")
|
||||||
app.add_config_value("llms_txt_filename", "llms.txt", "env")
|
app.add_config_value("llms_txt_filename", "llms.txt", "env")
|
||||||
app.add_config_value("llms_txt_full_file", True, "env")
|
app.add_config_value("llms_txt_full_file", True, "env")
|
||||||
@@ -127,15 +126,21 @@ def setup(app: Sphinx) -> Dict[str, Any]:
|
|||||||
app.add_config_value("llms_txt_code_files", [], "env")
|
app.add_config_value("llms_txt_code_files", [], "env")
|
||||||
app.add_config_value("llms_txt_code_base_path", None, "env")
|
app.add_config_value("llms_txt_code_base_path", None, "env")
|
||||||
|
|
||||||
# Connect to Sphinx events
|
def builder_inited(app):
|
||||||
app.connect("doctree-resolved", doctree_resolved)
|
"""Used to limit what builders are allowed to run the extension."""
|
||||||
app.connect("build-finished", build_finished)
|
|
||||||
|
|
||||||
|
allowed_builders = ["html", "dirhtml"]
|
||||||
|
if hasattr(app, "builder") and app.builder.name in allowed_builders:
|
||||||
# Reset manager and root paragraph for each build
|
# Reset manager and root paragraph for each build
|
||||||
global _manager, _root_first_paragraph
|
global _manager, _root_first_paragraph
|
||||||
_manager = LLMSFullManager()
|
_manager = LLMSFullManager()
|
||||||
_root_first_paragraph = ""
|
_root_first_paragraph = ""
|
||||||
|
|
||||||
|
app.connect("doctree-resolved", doctree_resolved)
|
||||||
|
app.connect("build-finished", build_finished)
|
||||||
|
|
||||||
|
app.connect("builder-inited", builder_inited)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"version": __version__,
|
"version": __version__,
|
||||||
"parallel_read_safe": True,
|
"parallel_read_safe": True,
|
||||||
|
|||||||
@@ -197,7 +197,6 @@ class LLMSFullManager:
|
|||||||
possible_sources = [
|
possible_sources = [
|
||||||
Path(outdir) / "_sources",
|
Path(outdir) / "_sources",
|
||||||
Path(outdir) / "html" / "_sources",
|
Path(outdir) / "html" / "_sources",
|
||||||
Path(outdir) / "singlehtml" / "_sources",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
for path in possible_sources:
|
for path in possible_sources:
|
||||||
|
|||||||
@@ -41,6 +41,42 @@ def test_setup_returns_valid_dict():
|
|||||||
assert "parallel_write_safe" in result
|
assert "parallel_write_safe" in result
|
||||||
|
|
||||||
|
|
||||||
|
def test_builder_inited_with_disallowed_builder():
|
||||||
|
"""Test that disallowed builders do not trigger extension setup."""
|
||||||
|
import sphinx_llms_txt
|
||||||
|
|
||||||
|
# Reset global state
|
||||||
|
sphinx_llms_txt._manager = sphinx_llms_txt.LLMSFullManager()
|
||||||
|
sphinx_llms_txt._root_first_paragraph = ""
|
||||||
|
|
||||||
|
# Mock a Sphinx app with a disallowed builder
|
||||||
|
class MockBuilder:
|
||||||
|
name = "text" # Not in allowed list
|
||||||
|
|
||||||
|
class MockApp:
|
||||||
|
def __init__(self):
|
||||||
|
self.config_values = {}
|
||||||
|
self.connections = {}
|
||||||
|
self.builder = MockBuilder()
|
||||||
|
|
||||||
|
def add_config_value(self, name, default, rebuild):
|
||||||
|
self.config_values[name] = (default, rebuild)
|
||||||
|
|
||||||
|
def connect(self, event, handler):
|
||||||
|
self.connections[event] = handler
|
||||||
|
|
||||||
|
app = MockApp()
|
||||||
|
setup(app)
|
||||||
|
|
||||||
|
# Trigger builder-inited
|
||||||
|
builder_inited_handler = app.connections["builder-inited"]
|
||||||
|
builder_inited_handler(app)
|
||||||
|
|
||||||
|
# With disallowed builder, other events should NOT be connected
|
||||||
|
assert "doctree-resolved" not in app.connections
|
||||||
|
assert "build-finished" not in app.connections
|
||||||
|
|
||||||
|
|
||||||
def test_document_collector_initialization():
|
def test_document_collector_initialization():
|
||||||
"""Test initialization of DocumentCollector."""
|
"""Test initialization of DocumentCollector."""
|
||||||
collector = DocumentCollector()
|
collector = DocumentCollector()
|
||||||
|
|||||||
Reference in New Issue
Block a user