Skip to main content

ftp client/server for asyncio

Project description

https://img.shields.io/travis/pohmelie/aioftp.svg https://img.shields.io/coveralls/pohmelie/aioftp.svg https://img.shields.io/pypi/v/aioftp.svg https://img.shields.io/pypi/pyversions/aioftp.svg

ftp client/server for asyncio (http://pohmelie.github.io/aioftp or http://aioftp.readthedocs.org)

Features

  • Simple.

  • Extensible.

  • Proxy via twunnel3.

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

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 (only “I”), 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.4.1

$ ./ftpbench -u anonymous -p none -P 8021 -b all
STOR (client -> server)                              146.06 MB/sec
RETR (server -> client)                              273.88 MB/sec
200 concurrent clients (connect, login)                0.36 secs
STOR (1 file with 200 idle clients)                  121.02 MB/sec
RETR (1 file with 200 idle clients)                  274.31 MB/sec
200 concurrent clients (RETR 10.0M file)              16.09 secs
200 concurrent clients (STOR 10.0M file)              19.03 secs
200 concurrent clients (QUIT)                          0.11 secs

pyftpdlib 1.5.0

$ ./ftpbench -u anonymous -p none -P 8021 -b all
STOR (client -> server)                              198.65 MB/sec
RETR (server -> client)                             3361.68 MB/sec
200 concurrent clients (connect, login)                0.09 secs
STOR (1 file with 200 idle clients)                  209.34 MB/sec
RETR (1 file with 200 idle clients)                 3367.59 MB/sec
200 concurrent clients (RETR 10.0M file)               1.04 secs
200 concurrent clients (STOR 10.0M file)               1.98 secs
200 concurrent clients (QUIT)                          0.02 secs

Dependencies

  • Python 3.5

License

aioftp is offered under the WTFPL 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.ClientSession(host, port, login, password) as client:

        async for path, info in client.list(recursive=True):

            if info["type"] == "file" and path.suffix == ".mp3":

                await client.download(path)


loop = asyncio.get_event_loop()
tasks = (
    get_mp3("server1.com", 21, "login", "password")),
    get_mp3("server2.com", 21, "login", "password")),
    get_mp3("server3.com", 21, "login", "password")),
)
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

Server example

import asyncio
import aioftp


loop = asyncio.get_event_loop()
server = aioftp.Server()
loop.run_until_complete(server.start(None, 8021))
try:

    loop.run_forever()

except KeyboardInterrupt:

    server.close()
    loop.run_until_complete(server.wait_closed())
    loop.close()

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

Uploaded Source

Built Distribution

aioftp-0.6.2-py3-none-any.whl (30.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: aioftp-0.6.2.tar.gz
  • Upload date:
  • Size: 37.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for aioftp-0.6.2.tar.gz
Algorithm Hash digest
SHA256 1967a6df2db773d6f0f9a11fc2fa66c89cd1c553c6017ddbb0efa3b79273ea3e
MD5 691085bceab187c341fe3e21fe0ef26b
BLAKE2b-256 08545d09123ea11dfbd34ca718f800afcbf6972503fd05ff9aa2110398cabd89

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aioftp-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d71f8c3869470cf8ce11c56d40f97e569de19e50fc7f17ca9e5b37b9cb19a2f5
MD5 afc34c004ec9c763e15c6c442d905478
BLAKE2b-256 4e63a099a87eb5516d3f27a31c7918fdc726d3c4f674cc3f6ae2b7322a016d18

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