Skip to main content

monokeys

Клиент «Ключей» — маленьких умных функций, которые зовутся одним вызовом. Зависимостей нет: внутри только стандартная библиотека, один файл.

pip install monokeys
from monokeys import Keys

k = Keys()                      # ничего настраивать не надо
res = k.alive("@durov")

print(res.is_alive)             # True
print(res.title)                # Pavel Durov

Ключ доступа заводить не нужно

Мы сделали работу за вас: публичный ключ работает у всех, без счётчика и без срока. Клиент берёт его сам, поэтому Keys() работает сразу — ни регистрации, ни настройки.

from monokeys import Keys
print(Keys().alive.text("@durov"))   # и всё, больше ничего не нужно

Свой ключ нужен только тем, кто хочет собственный рубильник: его выдаёт владелец сервиса, он тоже бессрочный и без счётчика. Положите его в .env:

KEYS_API_KEY=kx_...

Отозвать свой ключ, если он утёк:

curl -X POST -H "Authorization: Bearer kx_..." https://АДРЕС/token/revoke

Три способа позвать ключ

k.alive("@durov")                    # весь ответ: объект с полями
k.alive.members_count("@durov")      # только одно поле, уже числом
k.alive.text("@durov")               # строка для человека
жив · channel · Pavel Durov · 11 005 185 subscribers

Аргументы

Keys(...) — подключение

Аргумент По умолчанию Что делает
token KEYS_API_KEY, иначе публичный ключ с сервера ключ доступа; передаётся только заголовком
base адрес, откуда скачан клиент адрес сервера
timeout 20.0 сколько ждать ответа, секунд
retries 1 повторов при обрыве связи (отказ сервера не повторяется)
user_agent monokeys/<версия> как представляться серверу
k = Keys(token="kx_...", base="https://АДРЕС", timeout=5, retries=2)

k.<ключ>(...) — вызов

Аргумент По умолчанию Что делает
value — главное значение: для alive это ссылка, @username или +hash
only "" вернуть только это поле вместо всего ответа
fmt "json" json — поля, text — строка для человека, bool — да/нет
timeout как у клиента переопределить ожидание для одного вызова
**params — остальные параметры ключа по именам
k.alive("@durov", only="members_count")   # 11005185
k.alive("@durov", fmt="bool")             # 'true'
k.alive("@durov", timeout=3)              # не ждать дольше трёх секунд

Что можно спросить у клиента

Вызов Что вернёт
k.names() имена всех доступных ключей
k.fields("alive") какие поля возвращает ключ
k.alive.fields() то же самое, короче
k.catalog(refresh=True) полный каталог с описаниями, спросить заново
k.call("alive", "@durov") позвать ключ, имя которого известно только в рантайме

Ответ

Answer — это словарь, который умеет отвечать и как объект:

res = k.alive("@durov")
res.title == res["title"]     # одно и то же
bool(res)                     # True, если ключ ответил утвердительно
dict(res)                     # обычный словарь

Опечатка в имени поля не молчит:

res.tittle
# AttributeError: в ответе нет поля 'tittle'; есть: username, url, is_alive, ...

k.alive.members_cout("@durov")
# AttributeError: у ключа 'alive' нет поля 'members_cout'; есть: is_alive, kind, ...

Ошибки

Исключение Когда
AccessDenied ключ неизвестен, отозван или отправлен не по HTTPS
Unavailable сервер занят или источник не ответил — осмысленно повторить
KeysError всё остальное: нет такого ключа, мусор на входе

У всех трёх есть .status (код ответа) и .body (что сказал сервер). AccessDenied и Unavailable — потомки KeysError, так что можно ловить одним except KeysError.

from monokeys import Keys, AccessDenied, Unavailable

try:
    res = k.alive("@durov")
except AccessDenied:
    print("ключ доступа не подошёл — попросите новый у владельца")
except Unavailable:
    print("сейчас занято, попробую позже")

Методы не зашиты в клиент

Список ключей и их полей приходит с сервера. Появился новый ключ — он доступен сразу, без обновления пакета:

k.names()          # ['alive', ...]
k.несуществующий   # AttributeError со списком существующих

Если ставить пакет не хочется

Тот же самый файл можно просто скачать — это буквально один исходник, из которого собран пакет:

curl https://АДРЕС/sdk/python > monokeys.py

А можно вообще без клиента — ключ это обычная ссылка:

https://АДРЕС/alive/@durov  ->  жив · channel · Pavel Durov · ...

Metadata

Release files for monokeys 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for monokeys 0.2.0
File Size Uploaded
monokeys-0.2.0.tar.gz 7.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for monokeys 0.2.0
File Interpreter ABI Platform
monokeys-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 15.6 kB

Release files / monokeys-0.2.0.tar.gz

Download URL monokeys-0.2.0.tar.gz
Size 7.3 kB
Tags Source
SHA-256 checksum
How to use checksums
98dd4c5455818f1eb400ec068b524118fcd37a022f879c1422f68ccaac6e9f73
BLAKE2b-256 checksum
How to use checksums
74654a0fc8e5d522261e62cebdbfdac582db1320211973f8b02a8c70b8955595
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release files / monokeys-0.2.0-py3-none-any.whl

Download URL monokeys-0.2.0-py3-none-any.whl
Size 8.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0d15922538eb6ea2e34cfb70c8615963b166647237e5a709112b076018ea6c7a
BLAKE2b-256 checksum
How to use checksums
bee02efe26b45d1339dd99fe4c328c2f6404a5ddfc95b34c3d12e3e963c1ef79
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release history Release notifications | RSS feed

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page