Tool for easy working with https://portal5.cbr.ru API


Keywords
cbr, rest, api, client
License
MIT
Install
pip install cbr-client==0.3.4

Documentation

cbr-client

PyPI - License PyPI - Python Version

ΠšΠ»ΠΈΠ΅Π½Ρ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с api Π¦Π‘ Π Π€

ОписаниС АПИ - https://cbr.ru/lk_uio/guide/rest_api/

Установка

pip install cbr-client

Зависимости

ИспользованиС

# Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ python -m asyncio
from cbr_client import Client

conn_params = dict(
    url='https://portal5test.cbr.ru',
    login='test',
    password='test',
    user_agent='test app'
)

client = Client(**conn_params)
# ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· контСкстный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€
# async with Client(**conn_params) as client:
#     ...

files = [
        ('report.zip.enc', b'encrypted report content'),
        ('report.zip.1.sig', b'operator signature'),
        ('report.zip.2.sig', b'client signature')
    ]

# ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π½Π° ΠΏΠΎΡ€Ρ‚Π°Π» Π¦Π‘
# созданиС сообщСния
msg = await client.create_message(files, '1-ПИ')
# Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²
for f in msg.files:
    await client.upload(f)
# ΠΈΠ»ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‡Π°Π½ΠΊΠ°ΠΌΠΈ
for f in msg.files:
    await client.upload(f, chunked=True, chunk_size=2**16)
# финализация (Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ сСссии)
await client.finalize_message(msg)

# ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ²ΠΈΡ‚Π°Π½Ρ†ΠΈΠΉ
receipts =await client.get_receipts(msg_id=msg.oid)
for rcpt in receipts:
    # ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°
    for f in rcpt.files:
        # сохраняСтся Π² f.content
        await client.download(f)

# ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сообщСний ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Ρ„ΠΎΡ€ΠΌΡ‹
messages = await client.get_messages(form='1-ПИ')
# ΠΈΠ»ΠΈ ΠΏΠΎ статусу
messages = await client.get_messages(status='draft')
# ΠΈΠ»ΠΈ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ сообщСния (inbox/outbox)
messages = await client.get_messages(msg_type='outbox')
# падТинация, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ возвращаСтся пСрвая страница
messages = await client.get_messages(status='draft', page=4)
# ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠ°ΠΊ трСбуСтся 

# ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² сообщСния
messages = await client.get_messages()
for msg in messages:
    # ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°
    for f in msg.files:
        # сохраняСтся Π² f.content
        await client.download(f)

# ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡
tasks = await client.get_tasks()

# ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка справочников с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
dictionaries = await client.get_dictionaries()

# ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ справочника
d = await client.get_dictionary(oid='dictionary_id')

# ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… профиля
profile = await client.get_profile()

# ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ доступной ΠΊΠ²ΠΎΡ‚Ρ‹ использования Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°
quota = await client.get_profile_quota()

# ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ сообщСния 
await client.delete_message(msg_id='message_id')

# Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ соСдинСниС
await client.close()