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"),
    }