feat: Complete PyPI Query MCP Server Implementation (#3)
Merge pull request implementing complete PyPI query MCP server with comprehensive features and CI/CD pipeline.
This commit is contained in:
parent
b1a1a6866d
commit
030b3a2607
33 changed files with 3238 additions and 246 deletions
56
pypi_query_mcp/core/exceptions.py
Normal file
56
pypi_query_mcp/core/exceptions.py
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
"""Custom exceptions for PyPI Query MCP Server."""
|
||||
|
||||
|
||||
class PyPIError(Exception):
|
||||
"""Base exception for PyPI-related errors."""
|
||||
|
||||
def __init__(self, message: str, status_code: int = None):
|
||||
super().__init__(message)
|
||||
self.message = message
|
||||
self.status_code = status_code
|
||||
|
||||
|
||||
class PackageNotFoundError(PyPIError):
|
||||
"""Raised when a package is not found on PyPI."""
|
||||
|
||||
def __init__(self, package_name: str):
|
||||
message = f"Package '{package_name}' not found on PyPI"
|
||||
super().__init__(message, status_code=404)
|
||||
self.package_name = package_name
|
||||
|
||||
|
||||
class NetworkError(PyPIError):
|
||||
"""Raised when network-related errors occur."""
|
||||
|
||||
def __init__(self, message: str, original_error: Exception = None):
|
||||
super().__init__(message)
|
||||
self.original_error = original_error
|
||||
|
||||
|
||||
class RateLimitError(PyPIError):
|
||||
"""Raised when API rate limit is exceeded."""
|
||||
|
||||
def __init__(self, retry_after: int = None):
|
||||
message = "PyPI API rate limit exceeded"
|
||||
if retry_after:
|
||||
message += f". Retry after {retry_after} seconds"
|
||||
super().__init__(message, status_code=429)
|
||||
self.retry_after = retry_after
|
||||
|
||||
|
||||
class InvalidPackageNameError(PyPIError):
|
||||
"""Raised when package name is invalid."""
|
||||
|
||||
def __init__(self, package_name: str):
|
||||
message = f"Invalid package name: '{package_name}'"
|
||||
super().__init__(message, status_code=400)
|
||||
self.package_name = package_name
|
||||
|
||||
|
||||
class PyPIServerError(PyPIError):
|
||||
"""Raised when PyPI server returns a server error."""
|
||||
|
||||
def __init__(self, status_code: int, message: str = None):
|
||||
if not message:
|
||||
message = f"PyPI server error (HTTP {status_code})"
|
||||
super().__init__(message, status_code=status_code)
|
||||
Loading…
Add table
Add a link
Reference in a new issue