• Stars
    star
    183
  • Rank 210,154 (Top 5 %)
  • Language
    Python
  • License
    Apache License 2.0
  • Created over 9 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

aioftp

Github actions ci for master branch 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

aioftp 0.21.4 (python 3.11.2)

STOR (client -> server)                              280.17 MB/sec
RETR (server -> client)                              399.23 MB/sec
200 concurrent clients (connect, login)                0.22 secs
STOR (1 file with 200 idle clients)                  248.46 MB/sec
RETR (1 file with 200 idle clients)                  362.43 MB/sec
200 concurrent clients (RETR 10.0M file)               5.41 secs
200 concurrent clients (STOR 10.0M file)               2.04 secs
200 concurrent clients (QUIT)                          0.04 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

WARNING

For all commands, which use some sort of «stats» or «listing», aioftp tries at first MLSx-family commands (since they have structured, machine readable format for all platforms). But old/lazy/nasty servers do not implement this commands. In this case aioftp tries a LIST command, which have no standard format and can not be parsed in all cases. Take a look at FileZilla «directory listing» parser code. So, before creating new issue be sure this is not your case (you can check it with logs). Anyway, you can provide your own LIST parser routine (see the client documentation).

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

More Repositories

1

aiohttp

Asynchronous HTTP client/server framework for asyncio and Python
Python
14,457
star
2

aiomysql

aiomysql is a library for accessing a MySQL database from the asyncio
Python
1,748
star
3

aiopg

aiopg is a library for accessing a PostgreSQL database from the asyncio
Python
1,369
star
4

yarl

Yet another URL library
Python
1,200
star
5

aiobotocore

asyncio support for botocore library using aiohttp
Python
1,193
star
6

aiokafka

asyncio client for kafka
Python
1,143
star
7

aiocache

Asyncio cache manager for redis, memcached and memory
Python
1,032
star
8

aiojobs

Jobs scheduler for managing background task (asyncio)
Python
839
star
9

janus

Thread-safe asyncio-aware queue for Python
Python
774
star
10

async-lru

Simple LRU cache for asyncio
Python
710
star
11

aiohttp-demos

Demos for aiohttp project
Makefile
705
star
12

aiomonitor

aiomonitor is module that adds monitor and python REPL capabilities for asyncio application
Python
644
star
13

async-timeout

asyncio-compatible timeout class
Python
536
star
14

aiodocker

Python Docker API client based on asyncio and aiohttp
Python
429
star
15

aiozmq

Asyncio (pep 3156) integration with ZeroMQ
Python
420
star
16

multidict

The multidict implementation
Python
386
star
17

aiosmtpd

A reimplementation of the Python stdlib smtpd.py based on asyncio.
Python
319
star
18

create-aio-app

The boilerplate for aiohttp. Quick setup for your asynchronous web service.
Python
306
star
19

aioodbc

aioodbc - is a library for accessing a ODBC databases from the asyncio
Python
304
star
20

aiohttp-devtools

dev tools for aiohttp
Python
248
star
21

aiohttp-session

Web sessions for aiohttp.web
Python
238
star
22

aiohttp-security

auth and permissions for aiohttp
Python
229
star
23

aiohttp-jinja2

jinja2 template renderer for aiohttp.web
Python
228
star
24

aiohttp-admin

admin interface for aiohttp application http://aiohttp-admin.readthedocs.io
Python
216
star
25

aiohttp-cors

CORS support for aiohttp
Python
199
star
26

aiohttp-sse

Server-sent events support for aiohttp
Python
197
star
27

aiohttp-debugtoolbar

aiohttp_debugtoolbar is library for debugtoolbar support for aiohttp
JavaScript
193
star
28

aiozipkin

Distributed tracing instrumentation for asyncio with zipkin
Python
184
star
29

aiomcache

Minimal asyncio memcached client
Python
139
star
30

aioelasticsearch

aioelasticsearch-py wrapper for asyncio
Python
138
star
31

aiosignal

aiosignal: a list of registered asynchronous callbacks
Python
130
star
32

pytest-aiohttp

pytest plugin for aiohttp support
Python
129
star
33

aiorwlock

Read/Write Lock - synchronization primitive for asyncio
Python
129
star
34

sockjs

SockJS Server
Python
118
star
35

frozenlist

`FrozenList` is a `list`-like structure that implements `collections.abc.MutableSequence` and can be made immutable.
Python
95
star
36

aiocassandra

Simple threaded cassandra wrapper for asyncio
Python
88
star
37

aiohttp-remotes

A set of useful tools for aiohttp.web server
Python
79
star
38

aiologstash

asyncio logging handler for logstash
Python
58
star
39

aiocouchdb

CouchDB client built on top of aiohttp (asyncio)
Python
53
star
40

aioamqp_consumer

consumer/producer/rpc library built over aioamqp
Python
36
star
41

aiohttp-mako

mako template renderer for aiohttp.web
Python
31
star
42

aioneo4j

asyncio client for neo4j
Python
30
star
43

aiosparql

An asynchronous SPARQL client library using aiohttp
Python
26
star
44

sort-all

Sort __all__ lists alphabetically
Python
25
star
45

aioga

Google Analytics client for asyncio
Python
22
star
46

aioppspp

IETF PPSP RFC7574 in Python/asyncio
Python
21
star
47

sphinxcontrib-asyncio

Sphinx extension to add asyncio-specific markups
Python
20
star
48

aiohttp-benchmarks

Python
17
star
49

aioloop-proxy

A proxy for asyncio.AbstractEventLoop for testing purposes
Python
14
star
50

aiohttp-flashbag

The library provides flashbag for aiohttp
Python
10
star
51

idna-ssl

Patch ssl.match_hostname for Unicode(idna) domains support
Python
9
star
52

aiohttp-bot

A bot for automating boring tasks
Python
8
star
53

aio-libs.github.io

aio-libs static site
HTML
8
star
54

dynoname

Dynamic name resolution for asyncio libraries
Python
8
star
55

.github

Organization wide community settings
Python
7
star
56

triagers

A repo for request for aio-libs triage
5
star
57

get-releasenote

GitHub action for getting release note from towncrier rendered file
Python
5
star
58

aiohappyeyeballs

Happy Eyeballs for pre-resolved hosts
Python
5
star
59

create-release

GitHub action for release creation
4
star
60

aiohttp-site

A site for aiohttp project
HTML
3
star
61

prepare-coverage

Temporarily store coverage in Artifact storage
Makefile
3
star
62

aiohttp-theme

Sphinx theme for aiohttp
Python
2
star
63

azure-pipelines

Common azure pipelines templates used by aio-libs
2
star
64

night-watch

Ops purposes repo: validates Travis CI configs of all the repos in @aio-libs on daily basis
2
star
65

upload-coverage

Upload coverage chunks previously stored by prepare-coverage action
Makefile
1
star