Skip to content

alekseydevel/aioftp

 
 

Repository files navigation

aioftp

image

image

image

image

ftp client/server for asyncio. (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

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

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

Dependencies

  • Python 3.4.2+
  • docopt (for execution module as script only)

License

aioftp is offered under the Apache 2 license.

Library Installation

pip install aioftp

Getting started

Client example

import asyncio
import aioftp


@asyncio.coroutine
def get_mp3(host, login, password):

    ftp = aioftp.Client()
    yield from ftp.connect(host)
    yield from ftp.login(login, password)
    for path, info in (yield from ftp.list(recursive=True)):

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

            yield from ftp.download(path)


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

Server example

import asyncio
import aioftp


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

    loop.run_forever()

except KeyboardInterrupt:

    ftp.close()
    loop.run_until_complete(ftp.wait_closed())
    loop.close()

Or just use simple server

python -m aioftp --help

Packages

No packages published

Languages

  • Python 100.0%