prlps-ya300


Nameprlps-ya300 JSON
Version 0.0.1 PyPI version JSON
download
home_pagehttps://github.com/gniloyprolaps/ya300
Summaryполучения содержания статей или видео с YouTube и запуска API-сервера для суммаризации через сервис 300.ya.ru
upload_time2024-12-11 07:14:33
maintainerNone
docs_urlNone
authorprolapser
requires_python>=3.10
licenseLICENSE.txt
keywords
VCS
bugtrack_url
requirements fastapi pydantic uvicorn httpx
Travis-CI No Travis.
coveralls test coverage No coveralls.
            пакет предоставляет функции для получения содержания статей или видео с YouTube и запуска API-сервера для суммаризации через сервис 300.ya.ru. 

## установка

- из репозитория pypi:
`pip install prlps_ya300`

- из репозитория github:
`pip install git+https://github.com/gniloyprolaps/ya300.git`


## как использовать

### непосредственно в коде Python:

функция `get_summary` служит для получения содержания статьи или видео с YouTube.

#### аргументы:
- `article_or_youtube_url` (str): URL статьи или видео (поддерживаются только ссылки с YouTube).
- `short` (bool): возвратить только краткие заголовки тезисов для статей и только озаглавленные таймкоды для видео.
- `session_id` (str): `Session_id` из cookies с залогиненной страницы https://300.ya.ru.

#### возвращает:
- `str | None`: содержание статьи или видео в виде заголовков и тезисов или None, если возникли проблемы со ссылкой или авторизацией.

```python
import asyncio
from prlps_ya300 import get_summary  # импортируем функцию

# пример использования в асинхронном коде
async def main():
    session_id = "3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404"
    # получение содержания видео с YouTube:
    youtube_url = "https://www.youtube.com/watch?v=mloZU0LW8aQ"
    youtube_summary = await get_summary(youtube_url, short=False, session_id=session_id)
    print(youtube_summary)
    # получение озаглавленных таймкодов видео с YouTube:
    titled_timecodes = await get_summary(youtube_url, short=True, session_id=session_id)
    print(titled_timecodes)
    # получение содержания статьи:
    article_url = "https://azbyka.ru/otechnik/Ignatij_Brjanchaninov/simfonija-po-tvorenijam-svjatitelja-ignatija-brjanchaninova-tereshenko/3"
    article_summary = await get_summary(article_url, short=False, session_id=session_id)
    print(article_summary)
    # получение кратких тезисов статьи:
    article_url = "https://azbyka.ru/otechnik/Ignatij_Brjanchaninov/simfonija-po-tvorenijam-svjatitelja-ignatija-brjanchaninova-tereshenko/3"
    article_summary = await get_summary(article_url, short=True, session_id=session_id)
    print(article_summary)

asyncio.run(main())  # запуск асинхронного кода
```

### поднятие апи

функция `api_start` служит для запуска API-сервера FastAPI на указанном порту.

#### в коде:

```python
from prlps_ya300 import api_start  # импортируем функцию

api_start()  # запуск API-сервера
```

#### в консоли:
```bash
python -m prlps_ya300
```
или
```bash
python -c "from prlps_ya300 import api_start; api_start()"
```

#### запуск API-сервера через Docker:

```dockerfile
# базовый образ (вместо версии с alpine можно указать просто python:3.12):
FROM python:3.12-alpine
# установка библиотеки с апи:
RUN pip install --no-cache-dir --upgrade prlps_ya300
# уровень логирования, не обязательно:
ENV YA300_LOG_LEVEL=DEBUG
# порт, не обязательно (по умолчанию 7860):
ENV YA300_API_PORT=8080
# команда запуска апи:
CMD ["python", "-m", "prlps_ya300"]
```

#### выполнение запроса к API

##### через `curl`

```sh
curl -X GET "http://127.0.0.1:8000/summarize" -H "Content-Type: application/json" -d '{"url": "https://www.youtube.com/watch?v=mloZU0LW8aQ", "short": false, "session_id": "3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404"}'
```

##### в коде Python

```python
from httpx import AsyncClient

async def fetch_summary():
    async with AsyncClient() as client:
        response = await client.post(
            "http://127.0.0.1:8000/summarize",
            json={"url": "https://www.youtube.com/watch?v=mloZU0LW8aQ", "short": False, "session_id": "3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404"}
        )
        print(response.json())

import asyncio
asyncio.run(fetch_summary())
```


## переменные окружения

### session_id для 300.ya.ru

необходимо указать `Session_id` из cookies с залогиненной страницы https://300.ya.ru.

задается в переменной окружения `YA300_SESSION_ID`:

```python
from os import environ
environ['YA300_SESSION_ID'] = '3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404'
```

в консоли:

```sh
export YA300_SESSION_ID='3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404'
```

### уровень логгирования (можно не указывать, по умолчанию INFO)

задается в переменной окружения `YA300_LOG_LEVEL`:

```python
from os import environ
environ['YA300_LOG_LEVEL'] = 'WARNING'
```

в консоли:

```sh
export YA300_LOG_LEVEL=DEBUG
```

### порт для API-сервера

задается в переменной окружения `YA300_API_PORT` (можно не указывать, по умолчанию 7860):

```python
from os import environ
environ['YA300_API_PORT'] = '8000'
```

в консоли:

```sh
export YA300_API_PORT=8000
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/gniloyprolaps/ya300",
    "name": "prlps-ya300",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": null,
    "author": "prolapser",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/6c/a4/7af93ced0f4a7de9ab3b8af7097bee1ff21a20977ba92c41611ce95d834a/prlps_ya300-0.0.1.tar.gz",
    "platform": null,
    "description": "\u043f\u0430\u043a\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0435\u0439 \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e \u0441 YouTube \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 API-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0438\u0441 300.ya.ru. \n\n## \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\n- \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f pypi:\n`pip install prlps_ya300`\n\n- \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f github:\n`pip install git+https://github.com/gniloyprolaps/ya300.git`\n\n\n## \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\n\n### \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u0434\u0435 Python:\n\n\u0444\u0443\u043d\u043a\u0446\u0438\u044f `get_summary` \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e \u0441 YouTube.\n\n#### \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:\n- `article_or_youtube_url` (str): URL \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e (\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u043a\u0438 \u0441 YouTube).\n- `short` (bool): \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0442\u043a\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0442\u0435\u0437\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0435\u0439 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0437\u0430\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0439\u043c\u043a\u043e\u0434\u044b \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e.\n- `session_id` (str): `Session_id` \u0438\u0437 cookies \u0441 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b https://300.ya.ru.\n\n#### \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:\n- `str | None`: \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e \u0432 \u0432\u0438\u0434\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0438 \u0442\u0435\u0437\u0438\u0441\u043e\u0432 \u0438\u043b\u0438 None, \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439.\n\n```python\nimport asyncio\nfrom prlps_ya300 import get_summary  # \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e\n\n# \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435\nasync def main():\n    session_id = \"3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404\"\n    # \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e \u0441 YouTube:\n    youtube_url = \"https://www.youtube.com/watch?v=mloZU0LW8aQ\"\n    youtube_summary = await get_summary(youtube_url, short=False, session_id=session_id)\n    print(youtube_summary)\n    # \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0437\u0430\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0430\u0439\u043c\u043a\u043e\u0434\u043e\u0432 \u0432\u0438\u0434\u0435\u043e \u0441 YouTube:\n    titled_timecodes = await get_summary(youtube_url, short=True, session_id=session_id)\n    print(titled_timecodes)\n    # \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438:\n    article_url = \"https://azbyka.ru/otechnik/Ignatij_Brjanchaninov/simfonija-po-tvorenijam-svjatitelja-ignatija-brjanchaninova-tereshenko/3\"\n    article_summary = await get_summary(article_url, short=False, session_id=session_id)\n    print(article_summary)\n    # \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0430\u0442\u043a\u0438\u0445 \u0442\u0435\u0437\u0438\u0441\u043e\u0432 \u0441\u0442\u0430\u0442\u044c\u0438:\n    article_url = \"https://azbyka.ru/otechnik/Ignatij_Brjanchaninov/simfonija-po-tvorenijam-svjatitelja-ignatija-brjanchaninova-tereshenko/3\"\n    article_summary = await get_summary(article_url, short=True, session_id=session_id)\n    print(article_summary)\n\nasyncio.run(main())  # \u0437\u0430\u043f\u0443\u0441\u043a \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430\n```\n\n### \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u0435 \u0430\u043f\u0438\n\n\u0444\u0443\u043d\u043a\u0446\u0438\u044f `api_start` \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 API-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 FastAPI \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u0442\u0443.\n\n#### \u0432 \u043a\u043e\u0434\u0435:\n\n```python\nfrom prlps_ya300 import api_start  # \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e\n\napi_start()  # \u0437\u0430\u043f\u0443\u0441\u043a API-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\n```\n\n#### \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:\n```bash\npython -m prlps_ya300\n```\n\u0438\u043b\u0438\n```bash\npython -c \"from prlps_ya300 import api_start; api_start()\"\n```\n\n#### \u0437\u0430\u043f\u0443\u0441\u043a API-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 Docker:\n\n```dockerfile\n# \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 (\u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 alpine \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e python:3.12):\nFROM python:3.12-alpine\n# \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u0430\u043f\u0438:\nRUN pip install --no-cache-dir --upgrade prlps_ya300\n# \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e:\nENV YA300_LOG_LEVEL=DEBUG\n# \u043f\u043e\u0440\u0442, \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 7860):\nENV YA300_API_PORT=8080\n# \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0430\u043f\u0438:\nCMD [\"python\", \"-m\", \"prlps_ya300\"]\n```\n\n#### \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a API\n\n##### \u0447\u0435\u0440\u0435\u0437 `curl`\n\n```sh\ncurl -X GET \"http://127.0.0.1:8000/summarize\" -H \"Content-Type: application/json\" -d '{\"url\": \"https://www.youtube.com/watch?v=mloZU0LW8aQ\", \"short\": false, \"session_id\": \"3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404\"}'\n```\n\n##### \u0432 \u043a\u043e\u0434\u0435 Python\n\n```python\nfrom httpx import AsyncClient\n\nasync def fetch_summary():\n    async with AsyncClient() as client:\n        response = await client.post(\n            \"http://127.0.0.1:8000/summarize\",\n            json={\"url\": \"https://www.youtube.com/watch?v=mloZU0LW8aQ\", \"short\": False, \"session_id\": \"3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404\"}\n        )\n        print(response.json())\n\nimport asyncio\nasyncio.run(fetch_summary())\n```\n\n\n## \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\n\n### session_id \u0434\u043b\u044f 300.ya.ru\n\n\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c `Session_id` \u0438\u0437 cookies \u0441 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b https://300.ya.ru.\n\n\u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f `YA300_SESSION_ID`:\n\n```python\nfrom os import environ\nenviron['YA300_SESSION_ID'] = '3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404'\n```\n\n\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:\n\n```sh\nexport YA300_SESSION_ID='3:173323456.5.0.1724108495806:Y12iog:x21y.1.2:1|1141634570.0.2.3:1728003508|6:10200414.986812.uaRU96USIomXSkGPPOV1-Zov404'\n```\n\n### \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e INFO)\n\n\u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f `YA300_LOG_LEVEL`:\n\n```python\nfrom os import environ\nenviron['YA300_LOG_LEVEL'] = 'WARNING'\n```\n\n\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:\n\n```sh\nexport YA300_LOG_LEVEL=DEBUG\n```\n\n### \u043f\u043e\u0440\u0442 \u0434\u043b\u044f API-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\n\n\u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f `YA300_API_PORT` (\u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 7860):\n\n```python\nfrom os import environ\nenviron['YA300_API_PORT'] = '8000'\n```\n\n\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:\n\n```sh\nexport YA300_API_PORT=8000\n```\n",
    "bugtrack_url": null,
    "license": "LICENSE.txt",
    "summary": "\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0435\u0439 \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e \u0441 YouTube \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 API-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0443\u043c\u043c\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0438\u0441 300.ya.ru",
    "version": "0.0.1",
    "project_urls": {
        "Homepage": "https://github.com/gniloyprolaps/ya300"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2feb1e2262c1facb14ffc3ac30ef5dbf794566f7c5b1ef218376061fb3534fd6",
                "md5": "910faab4e200abe4fc8a41a24e1c509a",
                "sha256": "8989127f38d4d35cc5247e00368e57da92250b0a799aaa75c0ee6d638e1224b8"
            },
            "downloads": -1,
            "filename": "prlps_ya300-0.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "910faab4e200abe4fc8a41a24e1c509a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 10128,
            "upload_time": "2024-12-11T07:14:31",
            "upload_time_iso_8601": "2024-12-11T07:14:31.245227Z",
            "url": "https://files.pythonhosted.org/packages/2f/eb/1e2262c1facb14ffc3ac30ef5dbf794566f7c5b1ef218376061fb3534fd6/prlps_ya300-0.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6ca47af93ced0f4a7de9ab3b8af7097bee1ff21a20977ba92c41611ce95d834a",
                "md5": "f205bfee186f52cca75307e956660ba3",
                "sha256": "113c58ddff5039d80dd01cfac73cd52521f4816c3fcf4412ecc400914a5d093e"
            },
            "downloads": -1,
            "filename": "prlps_ya300-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "f205bfee186f52cca75307e956660ba3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 9678,
            "upload_time": "2024-12-11T07:14:33",
            "upload_time_iso_8601": "2024-12-11T07:14:33.543053Z",
            "url": "https://files.pythonhosted.org/packages/6c/a4/7af93ced0f4a7de9ab3b8af7097bee1ff21a20977ba92c41611ce95d834a/prlps_ya300-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-11 07:14:33",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "gniloyprolaps",
    "github_project": "ya300",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "fastapi",
            "specs": []
        },
        {
            "name": "pydantic",
            "specs": []
        },
        {
            "name": "uvicorn",
            "specs": []
        },
        {
            "name": "httpx",
            "specs": []
        }
    ],
    "lcname": "prlps-ya300"
}
        
Elapsed time: 0.33808s