Skip to main content

ftp client/server for asyncio

Project description

Travis status for master branch https://codecov.io/gh/aio-libs/aioftp/branch/master/graph/badge.svg https://img.shields.io/pypi/v/aioftp.svg https://img.shields.io/pypi/pyversions/aioftp.svg https://pepy.tech/badge/aioftp/month

ftp client/server for asyncio (http://aioftp.readthedocs.org)

Features

  • Simple.

  • Extensible.

  • Client socks proxy via siosocks (pip install aioftp[socks]).

Goals

  • Minimum usable core.

  • Do not use deprecated or overridden commands and features (if possible).

  • Very high level api.

Client use this commands: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD, MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT, REST, LIST (as fallback)

Server support this commands: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD, MLSD, LIST (but it’s not recommended to use it, cause it has no standard format), MLST, RNFR, RNTO, DELE, STOR, RETR, TYPE (“I” and “A”), PASV, ABOR, APPE, REST

This subsets are enough for 99% of tasks, but if you need something, then you can easily extend current set of commands.

Server benchmark

Compared with pyftpdlib and checked with its ftpbench script.

aioftp 0.8.0

STOR (client -> server)                              284.95 MB/sec
RETR (server -> client)                              408.44 MB/sec
200 concurrent clients (connect, login)                0.18 secs
STOR (1 file with 200 idle clients)                  287.52 MB/sec
RETR (1 file with 200 idle clients)                  382.05 MB/sec
200 concurrent clients (RETR 10.0M file)              13.33 secs
200 concurrent clients (STOR 10.0M file)              12.56 secs
200 concurrent clients (QUIT)                          0.03 secs

pyftpdlib 1.5.2

STOR (client -> server)                             1235.56 MB/sec
RETR (server -> client)                             3960.21 MB/sec
200 concurrent clients (connect, login)                0.06 secs
STOR (1 file with 200 idle clients)                 1208.58 MB/sec
RETR (1 file with 200 idle clients)                 3496.03 MB/sec
200 concurrent clients (RETR 10.0M file)               0.55 secs
200 concurrent clients (STOR 10.0M file)               1.46 secs
200 concurrent clients (QUIT)                          0.02 secs

Dependencies

  • Python 3.7+

0.13.0 is the last version which supports python 3.5.3+

0.16.1 is the last version which supports python 3.6+

License

aioftp is offered under the Apache 2 license.

Library installation

pip install aioftp

Getting started

Client example

import asyncio
import aioftp


async def get_mp3(host, port, login, password):
    async with aioftp.Client.context(host, port, login, password) as client:
        for path, info in (await client.list(recursive=True)):
            if info["type"] == "file" and path.suffix == ".mp3":
                await client.download(path)


tasks = (
    get_mp3("server1.com", 21, "login", "password"),
    get_mp3("server2.com", 21, "login", "password"),
    get_mp3("server3.com", 21, "login", "password"),
)
asyncio.run(asyncio.wait(tasks))

Server example

import asyncio
import aioftp


async def main():
    server = aioftp.Server([user], path_io_factory=path_io_factory)
    await server.run()

asyncio.run(main())

Or just use simple server

python -m aioftp --help

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aioftp-0.17.1.tar.gz (49.2 kB view details)

Uploaded Source

Built Distribution

aioftp-0.17.1-py3-none-any.whl (36.6 kB view details)

Uploaded Python 3

File details

Details for the file aioftp-0.17.1.tar.gz.

File metadata

  • Download URL: aioftp-0.17.1.tar.gz
  • Upload date:
  • Size: 49.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.5.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.1

File hashes

Hashes for aioftp-0.17.1.tar.gz
Algorithm Hash digest
SHA256 87869958fa98c4691acad0815840a94c1b50c6925d037d4dbb51331ddf4911f3
MD5 ea71378fe1f45c775a9d98766e3f6749
BLAKE2b-256 d8e8e0393cf55c48b86da28ecc0c13088605f22418ef9879e1c639ba689fe753

See more details on using hashes here.

File details

Details for the file aioftp-0.17.1-py3-none-any.whl.

File metadata

  • Download URL: aioftp-0.17.1-py3-none-any.whl
  • Upload date:
  • Size: 36.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.5.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.1

File hashes

Hashes for aioftp-0.17.1-py3-none-any.whl
Algorithm Hash digest
SHA256 93b383761d9188d9f1ff7d7de06ec3eeaa312db0399afbe3562390cf9f35e26c
MD5 b66167234944dfc05e62b3f66018d03c
BLAKE2b-256 0f0abe212d6d0edb68f86c6fc7ce50f62c2b855ce55d8bb9a5cbd68953f4fe66

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page