Перейти к документации
Python

Файлы

`files.list`, `list_all`, `iterate`, `get`, `download`, `list_links`, `list_all_links`, `iterate_links`, `create_link`, `revoke_link`, `stats`, `upload`, `delete` и `delete_many`.

Все методы

files.py
from pathlib import Path from openemail import openemail page = openemail.files.list(kind='pdf', sort='largest')file = page['items'][0] Path(file['filename']).write_bytes(openemail.files.download(file['id'])) links = openemail.files.list_all_links(file['id'])print([(link['url'], link['downloads']) for link in links]) stats = openemail.files.stats()print(stats['totals']['files'], stats['uploaded']['bytes'])

Каждый файл, который хранит ящик: отправленные и полученные вложения и загруженные в него файлы, то есть страница «Файлы» в приложении. download возвращает весь файл как bytes, ссылки являются ссылками для скачивания, с которыми ушёл файл, с числом скачиваний по каждой, а stats соответствует вкладке «Аналитика».

list, list_all и iterate принимают q, kind и sort, а также direction (inbound, outbound или uploaded), address, то есть файлы одного адреса, сравниваемого без учёта регистра, и since и until, datetime или строку ISO 8601. since включает свой момент, а until останавливается перед ним.

Для чтения нужен files:read, а для загрузки, удаления, публикации и отзыва ссылок files:write, который включает files:read. Ключ, созданный до того, как у файлов появились собственные права, получил соответствующие. Ключ, ограниченный определёнными адресами или доменами, видит только файлы на них.

Загрузка и удаление

upload.py
from pathlib import Path from openemail import openemail upload = openemail.files.upload(    Path('price-list.pdf').read_bytes(),    filename='price-list.pdf',    content_type='application/pdf',) if upload['deletable']:    openemail.files.delete(upload['id']) result = openemail.files.delete_many([    'file_0c4e7a91d2b84f63a5e19b7d',    'file_6bb640f5b99e47deb758f1f5',])for kept in result['kept']:    print(kept['filename'], kept['reason'])

upload сохраняет байты как есть, до 100 МБ, под именем filename и возвращает файл, id которого отправка прикрепляет как {'fileId': upload['id']}. Передайте content_type, иначе байты сохраняются как application/octet-stream. Вызов никогда не повторяется, потому что вторая попытка сохранила бы вторую копию.

Удалить можно только загруженный файл, от которого ничего не зависит, и deletable и usage у каждого файла заранее говорят об этом. delete отклоняет любой другой файл с 409 file_in_use. delete_many принимает до 100 id, удаляет что может и сообщает об остальном в kept, каждый с причиной, и в missing.

upload принимает bytes, bytearray или memoryview. Он ждёт ответа не меньше 600 секунд, каким бы коротким ни был timeout клиента, если только вы не передадите timeout= в вызов, а пустой filename выбрасывает ValueError до какой-либо отправки.

Справочник