Skip to content

Commit 5763586

Browse files
committed
Handle invalid versions better. Closes #29
1 parent d734257 commit 5763586

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

simple_repository_browser/controller.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
import fastapi
1010
from fastapi.responses import StreamingResponse
1111
from markupsafe import Markup
12-
from packaging.version import InvalidVersion, Version
12+
from packaging.version import InvalidVersion as InvalidVersionError
13+
from packaging.version import Version
1314

1415
from . import errors, model, view
16+
from .short_release_info import InvalidVersion
1517
from .static_files import HashedStaticFileHandler, StaticFilesManifest
1618

1719

@@ -141,10 +143,10 @@ async def project(
141143
if version:
142144
try:
143145
_version = Version(version)
144-
except InvalidVersion:
145-
raise errors.RequestError(
146-
status_code=404, detail=f"Invalid version {version}."
147-
)
146+
except InvalidVersionError:
147+
# Version string doesn't conform to PEP 440.
148+
# Try to find it as an InvalidVersion in the releases.
149+
_version = InvalidVersion(version)
148150

149151
t = asyncio.create_task(
150152
self.model.project_page(project_name, _version, recache)

simple_repository_browser/model.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from . import _search, compatibility_matrix, crawler, errors, fetch_projects
1616
from .fetch_description import PackageInfo
17-
from .short_release_info import ReleaseInfoModel, ShortReleaseInfo
17+
from .short_release_info import InvalidVersion, ReleaseInfoModel, ShortReleaseInfo
1818

1919

2020
@dataclasses.dataclass(frozen=True)
@@ -219,9 +219,19 @@ async def project_page(
219219
version = latest_version
220220

221221
if version not in releases:
222+
# Provide a more helpful error message for invalid versions
223+
if isinstance(version, InvalidVersion):
224+
available_versions = [f'"{vn}"' for vn in releases]
225+
detail = (
226+
f'Release "{version}" not found for {project_name}. '
227+
f"Note: This version does not conform to PEP 440. "
228+
f"Available versions: {', '.join(available_versions[:10])}"
229+
)
230+
else:
231+
detail = f'Release "{version}" not found for {project_name}.'
222232
raise errors.RequestError(
223233
status_code=404,
224-
detail=f'Release "{version}" not found for {project_name}.',
234+
detail=detail,
225235
)
226236

227237
release = releases[version]

0 commit comments

Comments
 (0)