Skip to content

Commit 0a750ce

Browse files
authored
fix for ftp dir listing (#208)
1 parent bb19924 commit 0a750ce

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
66

77
## [2.0.27] - Unreleased
88

9-
### Fixed for Winows paths #152
9+
### Fixed
10+
11+
- Fixed for Winows paths #152
12+
- Fixed ftp dir parsing (@dhirschfeld)
1013

1114
## [2.0.26] - 2018-07-26
1215

fs/ftpfs.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,14 +542,17 @@ def _parse_mlsx(cls, lines):
542542
name, facts = cls._parse_facts(line.strip())
543543
if name is None:
544544
continue
545-
is_dir = facts.get("type", None) in ("dir", "cdir", "pdir")
545+
_type = facts.get("type", "file")
546+
if _type not in {"dir", "file"}:
547+
continue
548+
is_dir = _type == "dir"
546549
raw_info = {} # type: Dict[Text, Dict[Text, object]]
547550

548551
raw_info["basic"] = {"name": name, "is_dir": is_dir}
549552
raw_info["ftp"] = facts # type: ignore
550553
raw_info["details"] = {
551554
"type": (
552-
int(ResourceType.directory) if is_dir else int(ResourceType.file)
555+
int(ResourceType.directory if is_dir else ResourceType.file)
553556
)
554557
}
555558

tests/test_ftpfs.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,38 @@ def test_parse_mlsx(self):
4949
info = list(FTPFS._parse_mlsx(["foo=bar; .."]))
5050
self.assertEqual(info, [])
5151

52+
def test_parse_mlsx_type(self):
53+
lines = [
54+
"Type=cdir;Modify=20180731114724;UNIX.mode=0755; /tmp",
55+
"Type=pdir;Modify=20180731112024;UNIX.mode=0775; /",
56+
"Type=file;Size=331523;Modify=20180731112041;UNIX.mode=0644; a.csv",
57+
"Type=file;Size=368340;Modify=20180731112041;UNIX.mode=0644; b.csv",
58+
]
59+
expected = [
60+
{
61+
"basic": {"name": "a.csv", "is_dir": False},
62+
"ftp": {
63+
"type": "file",
64+
"size": "331523",
65+
"modify": "20180731112041",
66+
"unix.mode": "0644",
67+
},
68+
"details": {"type": 2, "size": 331523, "modified": 1533036041},
69+
},
70+
{
71+
"basic": {"name": "b.csv", "is_dir": False},
72+
"ftp": {
73+
"type": "file",
74+
"size": "368340",
75+
"modify": "20180731112041",
76+
"unix.mode": "0644",
77+
},
78+
"details": {"type": 2, "size": 368340, "modified": 1533036041},
79+
},
80+
]
81+
info = list(FTPFS._parse_mlsx(lines))
82+
self.assertEqual(info, expected)
83+
5284
def test_opener(self):
5385
ftp_fs = open_fs("ftp://will:[email protected]")
5486
self.assertIsInstance(ftp_fs, FTPFS)

0 commit comments

Comments
 (0)