File size: 1,854 Bytes
7edb85f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | from typing import Any
import requests
from config import PYPI_API
def search_pypi(package_name: str) -> dict[str, Any]:
"""
PyPI API üzerinden bir Python paketinin meta verilerini getirir.
"""
package_name = package_name.strip()
if not package_name:
raise ValueError("Paket adı boş olamaz.")
url = f"{PYPI_API}/{package_name}/json"
try:
response = requests.get(
url,
timeout=20,
)
except requests.RequestException as exc:
return {
"success": False,
"package_name": package_name,
"error": f"PyPI API isteği başarısız oldu: {exc}",
}
if response.status_code == 404:
return {
"success": False,
"package_name": package_name,
"error": "Paket PyPI üzerinde bulunamadı.",
}
if response.status_code != 200:
return {
"success": False,
"package_name": package_name,
"status_code": response.status_code,
"error": "PyPI API beklenmeyen bir yanıt döndürdü.",
}
try:
data = response.json()
except ValueError:
return {
"success": False,
"package_name": package_name,
"error": "PyPI API geçerli bir JSON yanıtı döndürmedi.",
}
info = data.get("info", {})
return {
"success": True,
"package_name": info.get("name") or package_name,
"version": info.get("version"),
"summary": info.get("summary"),
"author": info.get("author"),
"license": info.get("license"),
"python_requires": info.get("requires_python"),
"home_page": info.get("home_page"),
"project_url": info.get("project_url"),
"package_url": info.get("package_url"),
} |