Ir a la documentación
Python

Archivos

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

Todos los métodos

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'])

Cada archivo que guarda el buzón, adjuntos enviados y recibidos y los archivos subidos a él, la página Archivos de la aplicación. download devuelve el archivo entero como bytes, los enlaces son los enlaces de descarga con los que salió un archivo, con cuántas veces se descargó cada uno, y stats es la pestaña Analíticas.

list, list_all e iterate admiten q, kind y sort, y también direction (inbound, outbound o uploaded), address, los archivos de una dirección comparada sin distinguir mayúsculas y minúsculas, y since y until, un datetime o una cadena ISO 8601. since incluye su momento y until se detiene antes.

Leer necesita files:read, y subir, eliminar y publicar o revocar enlaces necesitan files:write, que incluye files:read. Una clave creada antes de que los archivos tuvieran scopes propios recibió los correspondientes. Una clave limitada a direcciones o dominios concretos solo ve los archivos de ellos.

Subir y eliminar

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 guarda los bytes tal cual, hasta 100 MB, con el nombre filename, y devuelve el archivo, cuyo id un envío adjunta como {'fileId': upload['id']}. Pasa content_type, o los bytes se guardarán como application/octet-stream. Nunca se reintenta, porque un segundo intento guardaría una segunda copia.

Solo se puede eliminar un archivo subido del que nada depende, y deletable y usage en cada archivo lo indican de antemano. delete rechaza cualquier otro archivo con un 409 file_in_use. delete_many admite hasta 100 ids, elimina lo que puede e informa del resto en kept, cada uno con su motivo, y en missing.

upload acepta bytes, bytearray o memoryview. Espera al menos 600 segundos una respuesta, por corto que sea el timeout del cliente, salvo que pases timeout= a la llamada, y un filename en blanco lanza ValueError antes de enviar nada.

Referencia