Skip to main content

ftp client/server for asyncio

Project description

Github actions ci 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)


async def main():
    tasks = [
        asyncio.create_task(get_mp3("server1.com", 21, "login", "password")),
        asyncio.create_task(get_mp3("server2.com", 21, "login", "password")),
        asyncio.create_task(get_mp3("server3.com", 21, "login", "password")),
    ]
    await asyncio.wait(tasks)

asyncio.run(main())

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.21.0.tar.gz (51.6 kB view details)

Uploaded Source

Built Distribution

aioftp-0.21.0-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: aioftp-0.21.0.tar.gz
  • Upload date:
  • Size: 51.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2

File hashes

Hashes for aioftp-0.21.0.tar.gz
Algorithm Hash digest
SHA256 4f03917c287299a0789394370803e3b0f6935e241d8f28bbb367c2379a934f92
MD5 d7918dc067d103a5fc1eb18bf87ddac7
BLAKE2b-256 91e0f4b73c10142416170e6525a0a2be783507cd84528939eba52bb59c54df38

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aioftp-0.21.0-py3-none-any.whl
  • Upload date:
  • Size: 37.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2

File hashes

Hashes for aioftp-0.21.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b0e2bc1da5df2ae4ad469db58681d34904047ba8a5f36e9980e6649371c9a824
MD5 ed74fbdeeb16a0f7bd3bf9d5bfec81fd
BLAKE2b-256 7a35ed6c209cce24387445f258c369f73bbcc17c462ac26a643aaae2b0ce3fc6

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