codecov[bot]: # [Codecov](https://codecov.io/gh/aio-libs/aioftp/pull/113?src=pr&el=h1) Report
> Merging [#113](https://codecov.io/gh/aio-libs/aioftp/pull/113?src=pr&el=desc) into [master](https://codecov.io/gh/aio-libs/aioftp/commit/531b63eface3500b82cb2bf596da63876c1d5417&el=desc) will **not change** coverage.
> The diff coverage is `100.00%`.

[![Impacted file tree graph](https://codecov.io/gh/aio-libs/aioftp/pull/113/graphs/tree.svg?width=650&height=150&src=pr&token=CQXBXDpq1g)](https://codecov.io/gh/aio-libs/aioftp/pull/113?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master     #113   +/-   ##
=======================================
  Coverage   99.35%   99.35%           
=======================================
  Files           6        6           
  Lines        1864     1864           
=======================================
  Hits         1852     1852           
  Misses         12       12           
```


| [Impacted Files](https://codecov.io/gh/aio-libs/aioftp/pull/113?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [aioftp/client.py](https://codecov.io/gh/aio-libs/aioftp/pull/113/diff?src=pr&el=tree#diff-YWlvZnRwL2NsaWVudC5weQ==) | `98.75% <100.00%> (ø)` | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/aio-libs/aioftp/pull/113?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/aio-libs/aioftp/pull/113?src=pr&el=footer). Last update [531b63e...1d1f5e5](https://codecov.io/gh/aio-libs/aioftp/pull/113?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

pohmelie: > Maybe I'm blind, but I don't see a CHANGES folder.

There is a `history.rst` file.
diff --git a/aioftp/client.py b/aioftp/client.py
index a1072b6..566a397 100644
--- a/aioftp/client.py
+++ b/aioftp/client.py
@@ -360,7 +360,7 @@ class BaseClient:
     def parse_ls_date(cls, s, *, now=None):
         """
         Parsing dates from the ls unix utility. For example,
-        "Nov 18  1958" and "Nov 18 12:29".
+        "Nov 18  1958", "Jan 03 2018", and "Nov 18 12:29".
 
         :param s: ls date
         :type s: :py:class:`str`
@@ -439,7 +439,7 @@ class BaseClient:
             raise ValueError
 
         s = s[i:].lstrip()
-        info["modify"] = self.parse_ls_date(s[:12])
+        info["modify"] = self.parse_ls_date(s[:12].strip())
         s = s[12:].strip()
         if info["type"] == "link":
             i = s.rindex(" -> ")
diff --git a/history.rst b/history.rst
index 20ea7de..a78574f 100644
--- a/history.rst
+++ b/history.rst
@@ -1,6 +1,9 @@
 x.x.x (xx-xx-xxxx)
 ------------------
 
+- client: strip date before parsing (#113)
+Thanks to `ndhansen <https://github.com/ndhansen>`_
+
 0.16.0 (11-03-2020)
 ------------------
 

`parse_ls_date` doesn't handle singe-spaced servers.
I'm using aioftp across a multitude of FTP servers, and just discovered that one of them uses a timestamp of `%b %d %Y` instead of `%b %d  %Y`.
Because the parser assumes the date is exactly 12 characters long, it will catch `Jan 03 2018` as `Jan 03 2018 `. This in turn leads to a datetime parsing error.
diff --git a/tests/test_simple_functions.py b/tests/test_simple_functions.py
index cada55a..e46448b 100644
--- a/tests/test_simple_functions.py
+++ b/tests/test_simple_functions.py
@@ -165,6 +165,8 @@ def test_parse_list_line_unix():
         ],
         "dir": [
             "drw-rw-r--  1 poh  poh   6595 Feb 27 04:14 history.rst",
+            "drw-rw-r--  1 poh  poh   6595 Jan 03 2016  changes.rst",
+            "drw-rw-r--  1 poh  poh   6595 Mar 10  1996 README.rst",
         ],
         "unknown": [
             "Erw-rw-r--  1 poh  poh   6595 Feb 27 04:14 history.rst",

pip install -e .[dev]
parse_log_pytest
pytest
pytest pytest-asyncio pytest-cov trustme async_timeout siosocks
apt-get update apt-get install -y gcc
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
-e git+https://github.com/aio-libs/aioftp.git@531b63eface3500b82cb2bf596da63876c1d5417#egg=aioftp
async-timeout==5.0.1
cffi==1.17.1
coverage==7.8.0
cryptography==44.0.2
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
idna==3.10
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
packaging @ file:///croot/packaging_1734472117206/work
pluggy @ file:///croot/pluggy_1733169602837/work
pycparser==2.22
pytest @ file:///croot/pytest_1738938843180/work
pytest-asyncio==0.26.0
pytest-cov==6.0.0
siosocks==0.3.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
trustme==1.2.1
typing_extensions==4.13.0

name: aioftp
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py39h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pip=25.0=py39h06a4308_0
  - pluggy=1.5.0=py39h06a4308_0
  - pytest=8.3.4=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - async-timeout==5.0.1
      - cffi==1.17.1
      - coverage==7.8.0
      - cryptography==44.0.2
      - idna==3.10
      - pycparser==2.22
      - pytest-asyncio==0.26.0
      - pytest-cov==6.0.0
      - siosocks==0.3.0
      - trustme==1.2.1
      - typing-extensions==4.13.0
prefix: /opt/conda/envs/aioftp

tests/test_simple_functions.py::test_parse_list_line_unix tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-s-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-s-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-s--] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-s-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-x-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-x-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-x--] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-x-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t---s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t---x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t----] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t---E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-E-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-E-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-E--] tests/test_simple_functions.py::test_parse_unix_mode[w-r-t-E-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-s-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-s-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-s--] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-s-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-x-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-x-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-x--] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-x-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x---s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x---x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x----] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x---E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-E-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-E-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-E--] tests/test_simple_functions.py::test_parse_unix_mode[w-r-x-E-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r---s-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r---s-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r---s--] tests/test_simple_functions.py::test_parse_unix_mode[w-r---s-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r---x-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r---x-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r---x--] tests/test_simple_functions.py::test_parse_unix_mode[w-r---x-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-----s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-----x] tests/test_simple_functions.py::test_parse_unix_mode[w-r------] tests/test_simple_functions.py::test_parse_unix_mode[w-r-----E] tests/test_simple_functions.py::test_parse_unix_mode[w-r---E-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r---E-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r---E--] tests/test_simple_functions.py::test_parse_unix_mode[w-r---E-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-s-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-s-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-s--] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-s-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-x-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-x-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-x--] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-x-E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E---s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E---x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E----] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E---E] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-E-s] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-E-x] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-E--] tests/test_simple_functions.py::test_parse_unix_mode[w-r-E-E-E] tests/test_simple_functions.py::test_parse_unix_mode[w---t-s-s] tests/test_simple_functions.py::test_parse_unix_mode[w---t-s-x] tests/test_simple_functions.py::test_parse_unix_mode[w---t-s--] tests/test_simple_functions.py::test_parse_unix_mode[w---t-s-E] tests/test_simple_functions.py::test_parse_unix_mode[w---t-x-s] tests/test_simple_functions.py::test_parse_unix_mode[w---t-x-x] tests/test_simple_functions.py::test_parse_unix_mode[w---t-x--] tests/test_simple_functions.py::test_parse_unix_mode[w---t-x-E] tests/test_simple_functions.py::test_parse_unix_mode[w---t---s] tests/test_simple_functions.py::test_parse_unix_mode[w---t---x] tests/test_simple_functions.py::test_parse_unix_mode[w---t----] tests/test_simple_functions.py::test_parse_unix_mode[w---t---E] tests/test_simple_functions.py::test_parse_unix_mode[w---t-E-s] tests/test_simple_functions.py::test_parse_unix_mode[w---t-E-x] tests/test_simple_functions.py::test_parse_unix_mode[w---t-E--] tests/test_simple_functions.py::test_parse_unix_mode[w---t-E-E] tests/test_simple_functions.py::test_parse_unix_mode[w---x-s-s] tests/test_simple_functions.py::test_parse_unix_mode[w---x-s-x] tests/test_simple_functions.py::test_parse_unix_mode[w---x-s--] tests/test_simple_functions.py::test_parse_unix_mode[w---x-s-E] tests/test_simple_functions.py::test_parse_unix_mode[w---x-x-s] tests/test_simple_functions.py::test_parse_unix_mode[w---x-x-x] tests/test_simple_functions.py::test_parse_unix_mode[w---x-x--] tests/test_simple_functions.py::test_parse_unix_mode[w---x-x-E] tests/test_simple_functions.py::test_parse_unix_mode[w---x---s] tests/test_simple_functions.py::test_parse_unix_mode[w---x---x] tests/test_simple_functions.py::test_parse_unix_mode[w---x----] tests/test_simple_functions.py::test_parse_unix_mode[w---x---E] tests/test_simple_functions.py::test_parse_unix_mode[w---x-E-s] tests/test_simple_functions.py::test_parse_unix_mode[w---x-E-x] tests/test_simple_functions.py::test_parse_unix_mode[w---x-E--] tests/test_simple_functions.py::test_parse_unix_mode[w---x-E-E] tests/test_simple_functions.py::test_parse_unix_mode[w-----s-s] tests/test_simple_functions.py::test_parse_unix_mode[w-----s-x] tests/test_simple_functions.py::test_parse_unix_mode[w-----s--] tests/test_simple_functions.py::test_parse_unix_mode[w-----s-E] tests/test_simple_functions.py::test_parse_unix_mode[w-----x-s] tests/test_simple_functions.py::test_parse_unix_mode[w-----x-x] tests/test_simple_functions.py::test_parse_unix_mode[w-----x--] tests/test_simple_functions.py::test_parse_unix_mode[w-----x-E] tests/test_simple_functions.py::test_parse_unix_mode[w-------s] tests/test_simple_functions.py::test_parse_unix_mode[w-------x] tests/test_simple_functions.py::test_parse_unix_mode[w--------] tests/test_simple_functions.py::test_parse_unix_mode[w-------E] tests/test_simple_functions.py::test_parse_unix_mode[w-----E-s] tests/test_simple_functions.py::test_parse_unix_mode[w-----E-x] tests/test_simple_functions.py::test_parse_unix_mode[w-----E--] tests/test_simple_functions.py::test_parse_unix_mode[w-----E-E] tests/test_simple_functions.py::test_parse_unix_mode[w---E-s-s] tests/test_simple_functions.py::test_parse_unix_mode[w---E-s-x] tests/test_simple_functions.py::test_parse_unix_mode[w---E-s--] tests/test_simple_functions.py::test_parse_unix_mode[w---E-s-E] tests/test_simple_functions.py::test_parse_unix_mode[w---E-x-s] tests/test_simple_functions.py::test_parse_unix_mode[w---E-x-x] tests/test_simple_functions.py::test_parse_unix_mode[w---E-x--] tests/test_simple_functions.py::test_parse_unix_mode[w---E-x-E] tests/test_simple_functions.py::test_parse_unix_mode[w---E---s] tests/test_simple_functions.py::test_parse_unix_mode[w---E---x] tests/test_simple_functions.py::test_parse_unix_mode[w---E----] tests/test_simple_functions.py::test_parse_unix_mode[w---E---E] tests/test_simple_functions.py::test_parse_unix_mode[w---E-E-s] tests/test_simple_functions.py::test_parse_unix_mode[w---E-E-x] tests/test_simple_functions.py::test_parse_unix_mode[w---E-E--] tests/test_simple_functions.py::test_parse_unix_mode[w---E-E-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-s-s] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-s-x] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-s--] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-s-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-x-s] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-x-x] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-x--] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-x-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-t---s] tests/test_simple_functions.py::test_parse_unix_mode[--r-t---x] tests/test_simple_functions.py::test_parse_unix_mode[--r-t----] tests/test_simple_functions.py::test_parse_unix_mode[--r-t---E] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-E-s] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-E-x] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-E--] tests/test_simple_functions.py::test_parse_unix_mode[--r-t-E-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-s-s] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-s-x] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-s--] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-s-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-x-s] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-x-x] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-x--] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-x-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-x---s] tests/test_simple_functions.py::test_parse_unix_mode[--r-x---x] tests/test_simple_functions.py::test_parse_unix_mode[--r-x----] tests/test_simple_functions.py::test_parse_unix_mode[--r-x---E] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-E-s] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-E-x] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-E--] tests/test_simple_functions.py::test_parse_unix_mode[--r-x-E-E] tests/test_simple_functions.py::test_parse_unix_mode[--r---s-s] tests/test_simple_functions.py::test_parse_unix_mode[--r---s-x] tests/test_simple_functions.py::test_parse_unix_mode[--r---s--] tests/test_simple_functions.py::test_parse_unix_mode[--r---s-E] tests/test_simple_functions.py::test_parse_unix_mode[--r---x-s] tests/test_simple_functions.py::test_parse_unix_mode[--r---x-x] tests/test_simple_functions.py::test_parse_unix_mode[--r---x--] tests/test_simple_functions.py::test_parse_unix_mode[--r---x-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-----s] tests/test_simple_functions.py::test_parse_unix_mode[--r-----x] tests/test_simple_functions.py::test_parse_unix_mode[--r------] tests/test_simple_functions.py::test_parse_unix_mode[--r-----E] tests/test_simple_functions.py::test_parse_unix_mode[--r---E-s] tests/test_simple_functions.py::test_parse_unix_mode[--r---E-x] tests/test_simple_functions.py::test_parse_unix_mode[--r---E--] tests/test_simple_functions.py::test_parse_unix_mode[--r---E-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-s-s] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-s-x] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-s--] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-s-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-x-s] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-x-x] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-x--] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-x-E] tests/test_simple_functions.py::test_parse_unix_mode[--r-E---s] tests/test_simple_functions.py::test_parse_unix_mode[--r-E---x] tests/test_simple_functions.py::test_parse_unix_mode[--r-E----] tests/test_simple_functions.py::test_parse_unix_mode[--r-E---E] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-E-s] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-E-x] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-E--] tests/test_simple_functions.py::test_parse_unix_mode[--r-E-E-E] tests/test_simple_functions.py::test_parse_unix_mode[----t-s-s] tests/test_simple_functions.py::test_parse_unix_mode[----t-s-x] tests/test_simple_functions.py::test_parse_unix_mode[----t-s--] tests/test_simple_functions.py::test_parse_unix_mode[----t-s-E] tests/test_simple_functions.py::test_parse_unix_mode[----t-x-s] tests/test_simple_functions.py::test_parse_unix_mode[----t-x-x] tests/test_simple_functions.py::test_parse_unix_mode[----t-x--] tests/test_simple_functions.py::test_parse_unix_mode[----t-x-E] tests/test_simple_functions.py::test_parse_unix_mode[----t---s] tests/test_simple_functions.py::test_parse_unix_mode[----t---x] tests/test_simple_functions.py::test_parse_unix_mode[----t----] tests/test_simple_functions.py::test_parse_unix_mode[----t---E] tests/test_simple_functions.py::test_parse_unix_mode[----t-E-s] tests/test_simple_functions.py::test_parse_unix_mode[----t-E-x] tests/test_simple_functions.py::test_parse_unix_mode[----t-E--] tests/test_simple_functions.py::test_parse_unix_mode[----t-E-E] tests/test_simple_functions.py::test_parse_unix_mode[----x-s-s] tests/test_simple_functions.py::test_parse_unix_mode[----x-s-x] tests/test_simple_functions.py::test_parse_unix_mode[----x-s--] tests/test_simple_functions.py::test_parse_unix_mode[----x-s-E] tests/test_simple_functions.py::test_parse_unix_mode[----x-x-s] tests/test_simple_functions.py::test_parse_unix_mode[----x-x-x] tests/test_simple_functions.py::test_parse_unix_mode[----x-x--] tests/test_simple_functions.py::test_parse_unix_mode[----x-x-E] tests/test_simple_functions.py::test_parse_unix_mode[----x---s] tests/test_simple_functions.py::test_parse_unix_mode[----x---x] tests/test_simple_functions.py::test_parse_unix_mode[----x----] tests/test_simple_functions.py::test_parse_unix_mode[----x---E] tests/test_simple_functions.py::test_parse_unix_mode[----x-E-s] tests/test_simple_functions.py::test_parse_unix_mode[----x-E-x] tests/test_simple_functions.py::test_parse_unix_mode[----x-E--] tests/test_simple_functions.py::test_parse_unix_mode[----x-E-E] tests/test_simple_functions.py::test_parse_unix_mode[------s-s] tests/test_simple_functions.py::test_parse_unix_mode[------s-x] tests/test_simple_functions.py::test_parse_unix_mode[------s--] tests/test_simple_functions.py::test_parse_unix_mode[------s-E] tests/test_simple_functions.py::test_parse_unix_mode[------x-s] tests/test_simple_functions.py::test_parse_unix_mode[------x-x] tests/test_simple_functions.py::test_parse_unix_mode[------x--] tests/test_simple_functions.py::test_parse_unix_mode[------x-E] tests/test_simple_functions.py::test_parse_unix_mode[--------s] tests/test_simple_functions.py::test_parse_unix_mode[--------x] tests/test_simple_functions.py::test_parse_unix_mode[---------] tests/test_simple_functions.py::test_parse_unix_mode[--------E] tests/test_simple_functions.py::test_parse_unix_mode[------E-s] tests/test_simple_functions.py::test_parse_unix_mode[------E-x] tests/test_simple_functions.py::test_parse_unix_mode[------E--] tests/test_simple_functions.py::test_parse_unix_mode[------E-E] tests/test_simple_functions.py::test_parse_unix_mode[----E-s-s] tests/test_simple_functions.py::test_parse_unix_mode[----E-s-x] tests/test_simple_functions.py::test_parse_unix_mode[----E-s--] tests/test_simple_functions.py::test_parse_unix_mode[----E-s-E] tests/test_simple_functions.py::test_parse_unix_mode[----E-x-s] tests/test_simple_functions.py::test_parse_unix_mode[----E-x-x] tests/test_simple_functions.py::test_parse_unix_mode[----E-x--] tests/test_simple_functions.py::test_parse_unix_mode[----E-x-E] tests/test_simple_functions.py::test_parse_unix_mode[----E---s] tests/test_simple_functions.py::test_parse_unix_mode[----E---x] tests/test_simple_functions.py::test_parse_unix_mode[----E----] tests/test_simple_functions.py::test_parse_unix_mode[----E---E] tests/test_simple_functions.py::test_parse_unix_mode[----E-E-s] tests/test_simple_functions.py::test_parse_unix_mode[----E-E-x] tests/test_simple_functions.py::test_parse_unix_mode[----E-E--] tests/test_simple_functions.py::test_parse_unix_mode[----E-E-E] tests/test_simple_functions.py::test_parse_list_line_failed tests/test_simple_functions.py::test_reprs_works tests/test_simple_functions.py::test_throttle_reset tests/test_simple_functions.py::test_permission_is_parent tests/test_simple_functions.py::test_server_mtime_build
tests/test_simple_functions.py::test_parse_directory_response tests/test_simple_functions.py::test_connection_del_future tests/test_simple_functions.py::test_connection_not_in_storage tests/test_simple_functions.py::test_available_connections_too_much_acquires tests/test_simple_functions.py::test_available_connections_too_much_releases tests/test_simple_functions.py::test_parse_pasv_response tests/test_simple_functions.py::test_parse_epsv_response tests/test_simple_functions.py::test_parse_ls_date_of_leap_year tests/test_simple_functions.py::test_parse_ls_date_not_older_than_6_month_format tests/test_simple_functions.py::test_parse_ls_date_older_than_6_month_format tests/test_simple_functions.py::test_parse_ls_date_short
history.rst aioftp/client.py
history.rst aioftp/client.py