Skip to content

Commit df24a55

Browse files
authored
Add ReadmeCoreRenderer and ReadmeIntegrationRenderer (#2)
1 parent 45c45e0 commit df24a55

File tree

2 files changed

+67
-1
lines changed

2 files changed

+67
-1
lines changed

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ classifiers = [
2525
"Programming Language :: Python :: Implementation :: PyPy",
2626
]
2727
dependencies = [
28-
"pydoc-markdown==4.8.2"
28+
"pydoc-markdown==4.8.2",
29+
"requests"
2930
]
3031

3132
[project.urls]

src/haystack_pydoc_tools/renderers.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import base64
22
import dataclasses
33
import os
4+
import subprocess
45
import sys
56
import typing as t
67
import warnings
78
from pathlib import Path
9+
from typing import List, Optional
810

911
import docspec
1012
import requests
13+
from packaging.version import Version
1114
from pydoc_markdown.contrib.renderers.markdown import MarkdownRenderer
1215
from pydoc_markdown.interfaces import Context, Renderer
1316

@@ -145,3 +148,65 @@ def _doc_version(self) -> str:
145148
Returns the hardcoded docs version 2.0.
146149
"""
147150
return "v2.0"
151+
152+
153+
@dataclasses.dataclass
154+
class ReadmeCoreRenderer(ReadmeRenderer):
155+
"""
156+
This custom Renderer behaves just like the ReadmeRenderer but gets the version from `hatch`.
157+
This is meant to be used by the Haystack core repository.
158+
"""
159+
160+
def _doc_version(self) -> str:
161+
"""
162+
Returns the docs version.
163+
"""
164+
# We're assuming hatch is installed and working
165+
res = subprocess.run(["hatch", "version"], capture_output=True, check=True)
166+
res.check_returncode()
167+
full_version = res.stdout.decode().strip()
168+
major, minor = full_version.split(".")[:2]
169+
if "rc0" in full_version:
170+
return f"v{major}.{minor}-unstable"
171+
return f"v{major}.{minor}"
172+
173+
174+
@dataclasses.dataclass
175+
class ReadmeIntegrationRenderer(ReadmeRenderer):
176+
"""
177+
This custom Renderer behaves just like the ReadmeRenderer but get the latest stable Haystack version released.
178+
This is meant to be used by the Haystack integration repository.
179+
"""
180+
181+
def _get_latest_stable_version(self, versions: List[Version]) -> Optional[Version]:
182+
latest_version = None
183+
for version in versions:
184+
if version.pre or version.dev:
185+
# Skip pre-releases, we only want stable ones
186+
continue
187+
if latest_version is None or version > latest_version:
188+
latest_version = version
189+
return latest_version
190+
191+
def _doc_version(self) -> str:
192+
"""
193+
Returns the docs version.
194+
"""
195+
# Get the Haystack data from PyPI
196+
res = requests.get(
197+
"https://pypi.org/simple/haystack-ai",
198+
headers={"Accept": "application/vnd.pypi.simple.v1+json"},
199+
timeout=30,
200+
)
201+
res.raise_for_status()
202+
203+
data = res.json()
204+
versions = [Version(v) for v in data["versions"]]
205+
206+
latest_version = self._get_latest_stable_version(versions)
207+
if latest_version is None:
208+
msg = "No stable version found"
209+
raise ValueError(msg)
210+
211+
major, minor = latest_version.major, latest_version.minor
212+
return f"v{major}.{minor}"

0 commit comments

Comments
 (0)